关于分层设计的思想,在之前的一篇文章中《嵌入式硬件通信接口协议-SPI(二)分层架构设计仿真模块》讲解SPI模块设计时,早已做到了详尽的设计过程介绍,在此就不赘述了。现在参照SPI的BSP层设计思路,用某种程度的方法来设计IIC模块的BSP层代码模块。本文即将介绍和构建的内容主要分成两个部分:代码构建IIC模块管理、代码构建IIC时序。IIC模块管理模块管理的目的是想要在后期拓展时,一个工程里可用于多个IIC模块。
这里嗣后不考虑到用于简单的数据结构,意味着使用非常简单的宏定义,放到头文件中,省却困难的内存申请人、分配这一些操作者。以IIC模块序号“1”开始向后排,追加IIC模块时,必要参照当前示例来定义先前的IIC模块序号和管脚才可:#defineIIC_11#defineIIC1_PORT_SCLPORTB#defineIIC1_PIN_SCL6#defineIIC1_PORT_SDAPORTA#defineIIC1_PIN_SDA2此处要构建的,仍然是坐落于BSP层的IIC模块代码,这个层介于芯片驱动(寄存器)和应用于库之间,要考虑到在后期的重制研发,此IIC模块有可能由IO仿真,也有可能由芯片厂商获取的驱动demo构建,所以这里所PCB出来的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管脚另设为输入,之后的电平设置,就是已完成信号时序的过程。完结标志思路类似于上,额。
本文来源:博鱼APP官方网站-www.xjxrck.com