简介
stm32配备专门负责协议I2C的外设,只要配置好该外设,他就会根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态该和访问数据寄存器,就能完成手法。
这种由硬件外设处理 I2C 协议的方式减轻了CPU的工作,且使软件设计更加简单。
STM32的 I2C 外设可用作通讯的主机及从机,支持100Kbit/s和400Kbit/s的速率,支持7位,10位设备地址,支持DMA数据传输,并具有数据校验功能。
它的I2C外设还支持 SMBus2.0协议,SMBus协议与I2C类似。
STM32中有两个I2C硬件模块。
I2C功能框图

SDA
SMBALERT是在SMBus模式下才可选的信号,非SMBus模式,不能使用该信号。
SDA中移位寄存器和DR的工作方式和USART中的TDR和RDR的工作原理类似,只是I2C中的SDA兼顾接收和发送信息,因此它是TDR和RDR功能的二合一。
帧错误校验寄存器:一个用于校验数据是否正确的模块。
自身地址寄存器:用来储存自己的地址,在主设备发送地址信号的时候通过比较器进行比较来确认自己是否需要回应。
双地址寄存器:用来储存第二个地址让主设备来寻找设备,用的不多。
帧错误校验寄存器:一个用来辅助帧错误计算的寄存器。
SCL
时钟控制寄存器:管理时钟控制
控制寄存器:控制时钟具体的操作
状态寄存器:储存底层各模块状态的寄存器