1、IIC总线简介
1.1、总线的特点
- 半双工;
- 两条总线线路:一条数据线(SDA),一条时钟线(SCL);
- 支持多主机,支持冲突检测和仲裁,防止数据被破坏;
- 结构简单,接口连接方便,成本较低;
1.2、协议的内容
1.3、设备地址(固定和可编程两部分组成)
分为7位地址和10位地址
IIC器件用7位地址来标识,分为4个固定位和3个可编程位,so,可以连接8个相同的器件。
7位寻址:起始位后的第一个字节决定了主机选择哪一个从机,(第一个字节由七位地址和一位数据传输方向组成)
0:表示往从机写
1:表示从从机读
10位寻址:和七位寻址兼容。由起始位后两个字节决定选择哪个从机,
- 第一个字节的头7位111110XX,(XX为从机地址的高两位),第8位,R/W位;
- 第二个字节的为从机地址的剩下8位。
0:表示往从机写
1:表示从从机读
7位寻址
1.5、IIC总线信号类型
- 开始信号:SCL为高电平,SDA从高电平跳变为低电平,开始传送数据;
- 结束信号:SCL为高电平,SDA从低电平跳变为高电平,结束传送数据;
- 应答信号:接收设备收到8bits数据后,在第9个数据周期,向发送设备发送低电平,表示收到数据,发送高电平,表示未应答。
2、名词解释
2.1、专业术语
- 发送器:发送数据到总线的器件;
- 接收器:从总线接受数据的器件;
- 主机:初始化发送产生时钟信号和终止发送的器件;
- 从机:被主机寻址的器件(寻址可以分为七位和十位寻址);
- 多主机:同时由多个主机尝试控制总线,但是不破坏报文;
- 仲裁:有多个主机尝试控制总线,但是只允许其中一个主机控制总线并且使报文不被破坏的过程。
2.1、仲裁详解
当前有两个发送器在改变数据线的值,每一个发送器会检测当前数据线的值是否和自己发送的值是一样的,如果一样继续发送,直到有一个发送器发现自己发送的和数据线的值不一样时,会自动退出,且转换为接收状态。
3、IIC控制器
3.1、控制器详解
3.2、控制器寄存器详解
GPIOx_BSRR和GPIOx_BRR 寄存器:
GPIOx_BSRR :
- [15:0]:为0则对相应的ODRx位没有任何动作;为1则对相应的ODRx位置1操作
- [31:16]:为0则对相应的ODRx位没有任何动作;为1则对相应的ODRx位复位操作
GPIOx_BRR;同理
其实他俩是同一效果,只是优先级不同。
经过查询资料,只是习惯关系,就像stm32f103系列中置位函数set和reset差不多。
本文使用的开发板时钟线和数据线分别连接芯片的PF14和PF15;
4、原理代码
iic.h
#define GPIO_PIN_15 (0x1 <