目录
一、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关闭,就不会卡死了。