目录

STM32入门之I2C总线应用详解附LM75A温度传感器实战-零基础入门STM32第四十九步

STM32入门之I2C总线应用详解(附LM75A温度传感器实战) | 零基础入门STM32第四十九步

主题内容教学目的/扩展视频
I2C总线电路原理,跳线设置,I2C协议分析。驱动程序与调用。熟悉I2C总线协议,熟练调用。

师从 ,杜洋老师




一、I2C总线技术解析

1.1 什么是I2C总线?

SCL

SDA

STM32主设备

I2C总线

OLED 0x78

LM75A 0x9E

EEPROM 0xB2

其他设备 0xC0

I2C(Inter-Integrated Circuit)总线是飞利浦公司开发的 同步串行通信协议 ,具有以下核心特点:

  • 两线制通信:仅需SCL(时钟线)和SDA(数据线)
  • 多主从架构:支持多个主设备与从设备(最多127个)
  • 标准速率:100kHz(标准模式),400kHz(快速模式)
  • 地址寻址:每个设备拥有唯一7位地址

▲新版I2C范围中新增了10位地址模式,最大器件地址数量可达1023个。

1.2 电路连接规范

https://i-blog.csdnimg.cn/direct/838795df835642839a98e1fecdb3e29f.png

(图1:开发板与温度传感器连接示意图)

SCL

SDA

STM32

上拉电阻

3.3V

设备1

设备2

关键连接要点:

  1. 上拉电阻 :1kΩ~10kΩ(推荐4.7kΩ)
    • 确保总线空闲时为高电平
    • 电阻值影响上升沿时间
  2. 开漏输出 :所有设备必须配置为开漏模式
  3. 共地连接 :所有设备必须共地
  4. 布线限制 :总线长度建议不超过2米

二、I2C应用层协议解析

2.1 通信时序流程

Master

Slave

起始条件(S)

发送地址+写位(ADDR+W)

应答(ACK)

发送寄存器地址(REG_ADDR)

应答(ACK)

重复起始条件(Sr)

发送地址+读位(ADDR+R)

应答(ACK)

发送数据(DATA)

非应答(NACK)

停止条件(P)

Master

Slave

2.2 器件地址分配

设备类型基础地址可配置位完整地址示例
LM75A温度传感器0x48A2A1A00x9E(写地址)
OLED显示屏0x3CSA0位0x78
EEPROM存储器0x50A2A1A00xB2

三、LM75A温度传感器深度解析

3.1 内部结构原理

https://i-blog.csdnimg.cn/direct/1d6ea345b69d4893a0e9e37fb6f33fc6.png

(图1:开发板与传感器连接示意图)

温度传感器

Σ-Δ ADC

温度寄存器

比较器

输出引脚

接口电路

主要特性:

  • 测量范围:-55℃~+125℃
  • 精度:±2℃(-25℃~+100℃)
  • 分辨率:0.125℃
  • 内置9位ADC

3.2 温度数据格式

Temp 数据

11 位二进制数(补码)3 位十六进制十进制值温度值(℃)
0111 1111 0003F8h1016+127.000℃
0111 1110 1113F7h1015+126.875℃
0111 1110 0013F1h1009+126.125℃
0111 1101 0003E8h1000+125.000℃
0001 1001 0000C8h200+25.000℃
0000 0000 001001h1+0.125℃
0000 0000 00000h00.000℃
1111 1111 1117FFh-1-0.125℃
1110 0111 000738h-200-25.000℃
1100 1001 001649h-439-54.875℃
1100 1001 000648h-440-55.000℃
MSB字节:
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |   => 整数部分
LSB字节:
| 7  | 6  | 5  | 4  | 3  | 2  | 1 | 0 |   => 小数部分(0.125℃/bit)

示例数据解析:

  • 原始数据:0xC890(二进制1100100010010000)

  • 温度值 = 11001000.10010000b

    = 200.125℃(需转换为补码)

四、温度读取实战流程

4.1 操作步骤图解

启动I2C

写入器件地址+写位

写入寄存器地址

重复启动

写入器件地址+读位

读取两个字节

停止条件

4.2 数据处理技巧

  1. 补码转换 :最高位为符号位

    • 正温度:直接转换
    • 负温度:取反加1
  2. 精度处理

    float temp = (raw_data >> 5) * 0.125;
  3. 滤波处理:建议取多次平均值

五、典型应用场景

STM32

I2C

LM75A

OLED

EEPROM

RTC

显示温度

存储数据

常见问题解决方案:

  1. 总线锁死:重新初始化I2C
  2. 地址冲突:修改从设备地址选择位
  3. 波形畸变:减小上拉电阻值
  4. 通信失败:检查共地连接

六、总结与展望

I2C总线作为经典的双线制通信协议,在STM32开发中具有重要地位。掌握以下要点可提升开发效率:

  • 正确配置GPIO为复用开漏模式
  • 合理选择上拉电阻值
  • 准确理解器件地址分配规则
  • 熟练掌握温度传感器的数据解析方法

七、相关资源

[1]

[2]

[3]

[4]

[5]

[6]

[7]


💬 技术讨论(请在评论区留言~)


📌 下期预告 :下一期将探讨 I2C驱动程序分析 ,欢迎持续关注!

版权声明 :本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源

实测开发版 :洋桃1号开发版(基于STM32F103C8T6)

更新日志

  • v1.0 初始版本(2025-03-06)