基于单板使用Cube_MX实现两个IIC的主从通信

  • Post author:
  • Post category:其他



目录


一、IIC简介


二、IIC主要特性


三、Cube_MX的配置


四、总结



一、IIC简介


I


2


C


(内部集成电路)总线接口用作微控制器和


I


2


C


串行总线之间的接口。它提供多主模式功

能,可以控制所有


I


2


C


总线特定的序列、协议、仲裁和时序。


二、IIC主要特性


主模式特性:


时钟生成、起始位和停止位生成


tips:


起始位:当SCL为高电平时,SDA由高电平变为低电平

停止位:当SCL为高电平时,SDA由低电平变为高电平

从模式特性:

IIC地址检测、停止位检测

IIC通信分为主发从收、从发主收两种模式,这里主要演示如何使用Cube_MX完成配置IIC通信 ,具体IIC通信协

http://t.csdn.cn/2Vknl

(因工作需要,自己自学的,仅作为经验分享使用)


三、Cube_MX的配置

这是打开Cube_Mx的主界面,第一个时选择MCU核,第二个是选择ST板子。(每次新建工程,选择核的时候都会重新load,这个问题有知道怎么解决的吗?)

题主这里选择的是F401的板子,选择完成后,点击Start Project即可

文件创建完成后就可以开始配置需要的功能


选择IIC1做主(在Cube里不用分主从,跟spi不一样),参数配置这一栏从上到下,分别是选择标准模式/快速模式;标准模式最大时钟频率100K、快速模式最大时钟频率400K;可选时钟延长;7位/10位寻址;双地址应答;从机地址设置;通用呼叫地址检测。

对于主模式的配置,根据自己需要进行配置即可,题主这里只是实现最基本的主发从收,保持默认即可。

IIC的实现方式有轮询、中断、DMA三种,题主这里选择中断方式,打开事件中断即可

IIC3作为从机同IIC1配置,但需要设置从机地址,这里设置地址为0x72并打开对应事件中断


IIC两根线需要上拉,所以需要打开对于端口的内部上拉

至此,Cube_MX实现IIC通信配置完成。

选择生成文件类型为MDK_ARM,这样可以使用Keil打开并继续编辑代码。点击GENERATE CODE 生成以后,点击Open Project


用keil打开代码后,在main.c这个位置修改需要发送的数据

选择中断方式实现IIC的函数,将主发从收配置完成,这里主机发出的地址是0xe4,而我们在Cube_MX上配置的从机地址是0x72,不是写错了,是因为

将0x72写进去以后,还会在ADD0 bit0处补1位,所以实际在IIC3地址寄存器中设置的地址是0xe4

而Cube_MX生成的IIC3初始化函数部分会自动将地址补全,如下图所示

至此,IIC主发从收配置完成,将代码下载到板子上run


如图所示,IIC3作为从机正确收到主机发送的数据,也可以使用逻辑分析仪解析IIC通信协议,正确设置后解析结果如下


四、总结

总体来说,IIC各模式通信,使用HAL库实现更方便快捷,选用正确库函数,正确配置所需模式、时钟即可 。


tips:


更改Cube_MX再重新generate新的代码用keil打开时,可能会遇到卡死的现象,解决办法是,在生成代码之前把之前的keil关闭,就不会卡死了。



版权声明:本文为m0_48731721原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。