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集成了I2C1和I2C2两个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的分享

相关推荐
极客小张16 分钟前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312873 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章3 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
TeYiToKu3 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
基极向上的三极管4 小时前
【AD】3-4 在原理图中放置元件
嵌入式硬件
徐嵌5 小时前
STM32项目---水质水位检测
stm32·单片机·嵌入式硬件
徐嵌5 小时前
STM32项目---畜牧定位器
c语言·stm32·单片机·物联网·iot
lantiandianzi5 小时前
基于单片机的老人生活安全监测系统
单片机·嵌入式硬件·生活
东胜物联5 小时前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g
stm32发烧友5 小时前
基于STM32的智能家居环境监测系统设计
stm32·嵌入式硬件·智能家居