I2C通信
I2C是一种通用的数据总线,共有两根通信线(SCL、SDA)。
I2C是一种同步、半双工、带有数据应答以及支持总线挂载多设备(一主多从、多主多从)。
I2C硬件电路
协议的规定:主机CPU有对SCL绝对的控制权力,从机不允许访问SCL;CPU对SDA有控制权力,当接收从机数据或从机应答时,从机会获得SDA的控制权力。
所有I2C设备的SDA连在一起,SCL连在一起。
所有I2C设备的SDA、SCL都设置成开漏输出模式。
所有I2C设备的SDA、SCL都需要一个上拉电阻,阻值为4.7kΩ左右。
I2C时序基本单元
起始条件:SCL高电平期间,SDA由高电平变成低电平。
终止条件:SCL高电平期间,SDA由低电平变成高电平。
发送一个字节
接收一个字节
发送应答与接收应答
读写操作
指定地址写
当前地址读
指定地址读
I2C硬件
STM32单片机内部集成了I2C收发电路,只需要通过控制控制寄存器CR、数据寄存器DR以及状态寄存器SR就可以实现时钟控制、起始终止条件生成、应答位收发、数据收发等功能。
1.减少CPU的负担。
2.支持多主机模型。
3.支持7位/10位地址模型。
4.支持DMA。
5.支持不同的通讯速度,标准(100KHz)、快速(400KHz)。
6.兼容SMBus协议。
STM32F103C8T6单片机的I2C资源:I2C1、I2C2。