嵌入式硬件通信接口协议-IIC(二):分层架构设计模拟接口
关于分层设计的思想,在之前的一篇文章中《嵌入式硬件通信接口协议-SPI(二)分层架构设计模拟接口》介绍SPI接口设计时,已经做了详细的设计过程讲解,在此就不赘述了。
现在参考SPI的BSP层设计思路,用同样的方法来设计IIC接口的BSP层代码模块。
本文将要讲解和实现的内容主要分为两个部分:代码实现IIC接口管理、代码实现IIC时序。
IIC接口管理
接口管理的目的是想在后期扩展时,一个工程里可使用多个IIC接口。
这里暂不考虑使用复杂的数据结构,仅仅采用简单的宏定义,放在头文件中,省去麻烦的内存申请、分配这一些操作。
以IIC接口序号“1”开始向后排,新增IIC接口时,直接参考当前示例来定义后续的IIC接口序号和管脚即可:
#define IIC_1 1
#define IIC1_PORT_SCL PORTB
#define IIC1_PIN_SCL 6
#define IIC1_PORT_SDA PORTA
#define IIC1_PIN_SDA 2
此处要实现的,依然是位于BSP层的IIC模块代码,这个层介于芯片驱动(寄存器)和应用库之间,要考虑到在后期的移植开发,此IIC模块可能由IO模拟,也可能由芯片厂商提供的驱动demo实现,所以这里所封装出来的BSP层接口,一定要考虑到后期的扩展。
所以这里的做法是把参数都放在函数中传递,并且均设计成带有uint8_t类型的函数返回值。这里如此设计的原因和习惯问题,可以参考《【嵌入式编程】函数返回类型设计》一文。
打开STM32CubeMX工具可以看到,在配置IIC接口时,参数可配置内容如下截图:
参考以上,暂且在结构体中定义:地址位宽、时钟速率,来定义一个IIC接口对象。如下头文件中的bsp_iic_obj_t结构体类型。
IIC时序
从上一篇《嵌入式硬件通信接口协议-IIC(一)协议基础》中,我们知道IIC的时序中有这几种信号特征,现在就根据这几个信号特征,用代码逐一实现。
实际上在互联网上已经有很多关于IIC时序模拟的实现代码,最简单的可以从github开源社区、百度百科、各类技术网站,具体到很多的技术论坛都有IIC应用实例,都能找到IIC接口的源码。
因此IIC时序的模拟已经大同小异了,然而在这里再“造轮子”的目的是,集成、优化、完善自有项目BSP层的代码,提高项目的扩展性和应用,对屡清代码的整体框架也有很大帮助!
说白了也是想把这篇文章写详细些。废话少说,立即上码:
起始标志:
这段起始标志的代码,思路很简单,首先确保SDA所使用的IO引脚为输出,在本BSP层的IIC模块中使用了iic_set_io(iic_n, 0);函数,将指定IIC接口序号的SDA管脚设为输出,之后的电平设置,就是完成信号时序的过程。
结束标志
思路类似于上,略。
图片新闻
最新活动更多
-
11月22日立即报名>> 【线下论坛】华邦电子与莱迪思联合技术论坛
-
即日-11.30免费预约申请>>> 燧石技术-红外热成像系列产品试用活动
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
限时免费下载立即下载 >>> 2024“机器人+”行业应用创新发展蓝皮书
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
推荐专题
- 1 同源共创 模式革新 | 华天软件皇冠CAD(CrownCAD)2025新品发布会圆满举行
- 2 上海国际嵌入式展暨大会(embedded world China )与多家国际知名项目达成合作
- 3 史上首次,大众终于熬不住开启40亿降本计划!关3个工厂,裁员万名...
- 4 iEi威强电新品丨IMBA-AM5:工业计算的强劲引擎
- 5 守护绿色学习空间,EK超低温热泵服务对外经济贸易大学图书馆
- 6 颜值高 有“门”道|贝特威汽车门板内饰AI视觉检测解决方案
- 7 观众登记启动 优解制造未来,锁定2025 ITES深圳工业展
- 8 “秸”尽全力,防患未“燃” | 秸秆焚烧智能监控解决方案
- 9 揭秘:「全球知名跨境电商」构建核心竞争力的“独门绝技”是?
- 10 3大场景解读 | 红外热像仪赋能科研智造创新应用
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论