- STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担
- 支持多主机模型
- 支持7位/10位地址模式
- 支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz)
- 支持DMA
- 兼容SMBus协议
I2C框图
SDA部分:数据收发的核心部分是数据寄存器和数据移位寄存器,
当需要发送数据时,把一个字节数据写到数据寄存器DR,当移位寄存器没有数据移位时,数据寄存器的值就会进一步转到移位寄存器,在移位过程中,就可以把下一个数据放到数据寄存器里等待,当前一个数据移位完成,下一个数据无缝连接,继续发送;当数据由数据寄存器转到移位寄存器时,会置状态寄存器的TXE为1,表示发送寄存器为空;接收时,输入的数据一位一位的从引脚移入到移位寄存器里,当一个字节的数据收齐之后,数据就整体从移位寄存器转到数据寄存器,同时置标志位RXNE,表示接收寄存器非空,就可以从数据寄存器读出数据
比较器和地址寄存器是从机模式下使用,STM32不进行通信时,就是从机,那么由自身地址寄存器指定从机地址,且支持同时响应两个从机地址
帧错误校验计算:这是stm32设计的一个数据校验模块,当发生一个多字节的数据帧时,硬件可以自动执行CRC(数据校验算法)校验计算
SCL部分:时钟控制SCL线,在时钟控制寄存器写对应的位,电路会执行对应的功能。
I2C基本结构
数据寄存器和移位寄存器是通信的核心部分,使用硬件I2C时,需要将GPIO配置成复用开漏输出的模式,GPIO的状态交由片上外设来进行控制
主机发送
主机接收