IIC简介

硬件特点
- 引脚:STM32 的 I2C 接口有两根信号线,分别是 SDA(Serial Data,串行数据线)用于传输数据,SCL(Serial Clock,串行时钟线)用于同步数据传输的时钟信号。 不同型号的 STM32,I2C 引脚对应的 GPIO 口不同,使用时需要进行正确的引脚复用配置。
- 设备连接:I2C 总线支持多设备连接,总线上的设备分为主机和从机。主机负责发起和控制数据传输,从机在接收到主机的寻址后进行数据的接收或发送。在同一时刻,总线上只能有一个主机进行通信。设备之间通过上拉电阻连接到电源,保证总线在空闲状态下为高电平。
软件编程
在 STM32 上使用 I2C,需要进行初始化配置,包括设置 I2C 的工作模式(标准模式或快速模式等)、波特率、引脚复用等;然后根据具体的通信需求,编写数据发送和接收的函数,如向从设备写入数据、从从设备读取数据等 。可以使用 STM32 官方提供的标准库函数,或者基于 HAL 库、LL 库进行编程。
通信协议
- 起始和停止信号:主机通过在 SCL 为高电平时,拉低 SDA 信号产生起始信号,标志着一次通信的开始;在 SCL 为高电平时,拉高 SDA 信号产生停止信号,表示通信结束。
- 设备寻址:起始信号之后,主机发送一个从机地址字节,共 7 位地址位和 1 位读写控制位(0 表示写操作,1 表示读操作),用于选择要通信的从机设备并指定操作类型。
- 数据传输:数据以字节为单位进行传输,每个字节后面都跟随一个应答位(ACK)。发送方在发送完 8 位数据后,释放 SDA 线,接收方在接收到数据后,通过拉低 SDA 线来表示应答(ACK = 0),若接收方不响应则保持 SDA 为高电平(非应答,NACK = 1) 。
- 时钟同步:SCL 线由主机控制,用于同步数据传输的节奏,数据在 SCL 的高电平期间被采样,在低电平期间可以进行变化。
应用场景
- 传感器数据采集:许多传感器如温度传感器、加速度传感器、陀螺仪等都支持 I2C 接口。STM32 通过 I2C 可以方便地读取这些传感器的数据,例如在智能手环中,STM32 通过 I2C 与加速度传感器连接,获取运动数据。
- EEPROM 数据读写:EEPROM(电可擦除可编程只读存储器)常用于存储一些掉电不丢失的配置信息或数据,STM32 可以使用 I2C 接口对 EEPROM 进行读写操作,如存储设备的校准参数、用户设置等。
- 显示模块控制:部分 OLED、LCD 显示模块也支持 I2C 通信,STM32 通过 I2C 发送指令和数据,控制显示模块显示相关信息,如在小型电子设备中,用于显示时间、电量等。
