STM32使用I2C

STM32使用I2C

1.I2C通讯概述:

I2C(Inter-Integrated Circuit)和和SPI一样,都是实现主控芯片外挂芯片之间的数据交流。

通信线

  • SCL(Serial Clock):串行时钟线。
  • SDA(Serial Data):串行数据线。

特性

  • 同步:I2C总线是同步通信。
  • 半双工:数据可以在两个方向传输,但不能同时进行

数据应答: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通信中,主机发送一个数据后会立即接收一个位作为应答位,用来判断从机是否正确接收到数据。

从机地址

  1. 发送从机地址
    1. 主机在起始条件之后,先发送一个字节(从机地址)。
    2. 所有从机会接收该字节,并与自己的地址进行比较。
    3. 如果地址匹配,相应的从机会响应主机的读写操作。
  2. 唯一地址
    1. 同一条I2C总线上的每个设备地址必须唯一,以防止主机发送一个地址时有多个设备响应。

I2C地址类型

7位地址:常用的I2C地址格式。

10位地址:用于一些特殊情况下的I2C地址格式。

设备地址分配

  • 每个I2C设备在出厂时由厂商分配一个7位地址。例如,MPU6050的地址是1101 000
  • 不同型号的设备地址不同,相同型号的设备地址相同。

地址可变部分

对于挂在同一条总线上的相同型号设备,可以利用设备地址的可变部分来区分。

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.外设

硬件资源

  • I2C外设:STM32内部集成的I2C外设,通过通信协议在时序上,驱动根据协议的规范去翻转通信引脚的高低电平。
  • I2C控制器:STM32的I2C外设包括I2C1和I2C2控制器,能够自动进行时钟生成、起始条件生成、应答位发送和接收,减轻了CPU负担。

特性

多主机模式:支持多个主机设备,可变多主机模式。

地址模式:支持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中的实现

  • STM32F103C8T6集成了I2C1I2C2两个I2C外设,支持多种功能和特性,适用于各种嵌入式应用。
  • 通过配置I2C寄存器,可以实现从机地址设置、通信速度调整、DMA传输等功能,满足不同应用需求。

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的分享

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值