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

相关推荐
钰珠AIOT8 分钟前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠10 分钟前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200513 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT15 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen15 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠18 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_18 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技20 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计20 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件