STM32 I2C使用指南
STM32使用I2C
1.I2C通讯概述:
I2C(Inter-Integrated Circuit)和和SPI一样,都是实现主控芯片和外挂芯片之间的数据交流。
通信线
特性
数据应答:I2C总线支持数据应答机制。
支持多设备
起始条件:在SCL高电平期间,SDA从高电平切换到低电平,表示通信的开始。
终止条件:在SCL高电平期间,SDA从低电平切换到高电平,表示通信的结束。
时序单元:每个时序单元从SCL的低电平开始,并以低电平结束。
从设备限制:从设备不允许产生起始和终止条件。
2.硬件电路
3. I2C时序基本单元
起始条件:SCL高电平期间,SDA从高电平切换到低电平
终止条件:SCL高电平期间,SDA从低电平切换到高电平
发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
主机发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
应答机制
在I2C通信中,主机发送一个数据后会立即接收一个位作为应答位,用来判断从机是否正确接收到数据。
从机地址
- 发送从机地址:
- 主机在起始条件之后,先发送一个字节(从机地址)。
- 所有从机会接收该字节,并与自己的地址进行比较。
- 如果地址匹配,相应的从机会响应主机的读写操作。
- 唯一地址:
- 同一条I2C总线上的每个设备地址必须唯一,以防止主机发送一个地址时有多个设备响应。
I2C地址类型
7位地址:常用的I2C地址格式。
10位地址:用于一些特殊情况下的I2C地址格式。
设备地址分配
地址可变部分
对于挂在同一条总线上的相同型号设备,可以利用设备地址的可变部分来区分。
MPU6050:
地址的最后一位由板上的AD0引脚确定。
AD0引脚接低电平,地址为1101 000。
AD0引脚接高电平,地址为1101 001。
通过这种方式,可以在同一条I2C总线上挂载多个相同型号的设备,并通过改变引脚电平来分配不同的地址,避免地址冲突。
4. I2C时序
(重要)
示例
对于从机地址为1101000的设备,在其内部0x19地址的寄存器中写入0xAA这个数据,数据帧的过程如下:
1.起始条件:SCL高电平期间,SDA从高电平拉低。
2.发送从机地址和读写位(1101000+0)。
3.接收从机应答位。
4.发送寄存器地址(0x19)。
5.接收从机应答位。
6.发送数据值(0xAA)。
7.接收从机应答位。
8.停止条件:SCL高电平期间,SDA从低电平释放至高电平。
通过这些步骤,主机可以可靠地在从机的指定寄存器地址中写入数据。
5.外设
硬件资源
特性
多主机模式:支持多个主机设备,可变多主机模式。
地址模式:支持7位和10位地址模式。
通信速度:支持不同的通信速率,标准模式最高100kHz,快速模式最高400kHz。
DMA支持:支持DMA,在多字节传输时提高传输效率。
兼容SMBus协议:SMBus协议用于电源管理系统(System Management Bus)。
示例说明
I2C地址转换:
二进制地址1101000转换为十六进制为0x68。
I2C通信时,需要发送7位地址和1位读写位。
从机地址0x68左移1位再加上读写位:
0x68左移1位为11010000(0xD0),加上读写位为0xD1。
读写操作
写操作:从机地址为0xD0。
读操作:从机地址为0xD1。
I2C在STM32中的实现
6. 软件和硬件I2C波形对比
软件I2C实现
波形特点:软件I2C的波形较为不规整,每个时钟周期和空闲时间都不一致。
操作特点:软件I2C时的引脚操作会有一定的延时,因此各个时钟周期的间隔和占空比都不均匀。
硬件I2C实现
波形特点:硬件I2C的波形更加规整,时钟周期和占空比非常一致。
操作特点:每个时钟周期后都有严格的延时,保证每个周期的时间相同。
STM32单片机I2C通信详解_stm32 i2c-CSDN博客
全部摘录自此博客,就是读了多遍,学习一下。
STM32通过I2C软件读写MPU6050_stm32读取mpu6050-CSDN博客
感觉I2C的博客写的很详细
通过百度网盘分享的文件:0809
链接:https://pan.baidu.com/s/1S8tbmQptUjzqZb4bBJeGAQ?pwd=4blo
提取码:4blo
–来自百度网盘超级会员V2的分享
作者:微笑面对危险