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 电路连接规范
(图1:开发板与温度传感器连接示意图)
SCL
SDA
STM32
上拉电阻
3.3V
设备1
设备2
关键连接要点:
- 上拉电阻
:1kΩ~10kΩ(推荐4.7kΩ)
- 确保总线空闲时为高电平
- 电阻值影响上升沿时间
- 开漏输出 :所有设备必须配置为开漏模式
- 共地连接 :所有设备必须共地
- 布线限制 :总线长度建议不超过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温度传感器 | 0x48 | A2A1A0 | 0x9E(写地址) |
OLED显示屏 | 0x3C | SA0位 | 0x78 |
EEPROM存储器 | 0x50 | A2A1A0 | 0xB2 |
▲
三、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
精度处理 :
float temp = (raw_data >> 5) * 0.125;
滤波处理:建议取多次平均值
▲
五、典型应用场景
STM32
I2C
LM75A
OLED
EEPROM
RTC
显示温度
存储数据
常见问题解决方案:
- 总线锁死:重新初始化I2C
- 地址冲突:修改从设备地址选择位
- 波形畸变:减小上拉电阻值
- 通信失败:检查共地连接
六、总结与展望
I2C总线作为经典的双线制通信协议,在STM32开发中具有重要地位。掌握以下要点可提升开发效率:
- 正确配置GPIO为复用开漏模式
- 合理选择上拉电阻值
- 准确理解器件地址分配规则
- 熟练掌握温度传感器的数据解析方法
七、相关资源
[1]
[2]
[3]
[4]
[5]
[6]
[7]
💬 技术讨论(请在评论区留言~)
📌 下期预告 :下一期将探讨 I2C驱动程序分析 ,欢迎持续关注!
版权声明 :本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版 :洋桃1号开发版(基于STM32F103C8T6)
更新日志 :
- v1.0 初始版本(2025-03-06)