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

发布于:2025-03-12 ⋅ 阅读:(28) ⋅ 点赞:(0)
主题 内容 教学目的/扩展视频
I2C总线 电路原理,跳线设置,I2C协议分析。驱动程序与调用。 熟悉I2C总线协议,熟练调用。

师从洋桃电子,杜洋老师



回顾上期🔍STM32功能介绍—I2C和USART接口 | 零基础入门STM32第十步


一、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 电路连接规范

(图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

🔍I2C总线规范(中文)

2.2 器件地址分配

设备类型 基础地址 可配置位 完整地址示例
LM75A温度传感器 0x48 A2A1A0 0x9E(写地址)
OLED显示屏 0x3C SA0位 0x78
EEPROM存储器 0x50 A2A1A0 0xB2

🔍LM75(温度传感器)

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

3.1 内部结构原理

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

温度传感器
Σ-Δ ADC
温度寄存器
比较器
输出引脚
接口电路

主要特性:

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

3.2 温度数据格式

Temp 数据

11 位二进制数(补码) 3 位十六进制 十进制值 温度值(℃)
0111 1111 000 3F8h 1016 +127.000℃
0111 1110 111 3F7h 1015 +126.875℃
0111 1110 001 3F1h 1009 +126.125℃
0111 1101 000 3E8h 1000 +125.000℃
0001 1001 000 0C8h 200 +25.000℃
0000 0000 001 001h 1 +0.125℃
0000 0000 000 00h 0 0.000℃
1111 1111 111 7FFh -1 -0.125℃
1110 0111 000 738h -200 -25.000℃
1100 1001 001 649h -439 -54.875℃
1100 1001 000 648h -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] 洋桃电子B站课程-STM32入门100步
[2] STM32F103xx官方数据手册
[3] STM32F103X8-B数据手册(中文)
[4] STM32F103固件函数库用户手册(中文)
[5] I2C总线规范(中文)
[6] LM75(温度传感器)数据手册+编程说明+应用
[7] 温度传感器数码管显示程序


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

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

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

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