当前位置: 首页 > article >正文

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

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

师从洋桃电子,杜洋老师


📑文章目录

    • 一、I2C总线技术解析
      • 1.1 什么是I2C总线?
      • 1.2 电路连接规范
    • 二、I2C应用层协议解析
      • 2.1 通信时序流程
      • 2.2 器件地址分配
    • 三、LM75A温度传感器深度解析
      • 3.1 内部结构原理
      • 3.2 温度数据格式
    • 四、温度读取实战流程
      • 4.1 操作步骤图解
      • 4.2 数据处理技巧
    • 五、典型应用场景
    • 六、总结与展望
    • 七、相关资源


▲ 回顾上期🔍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温度传感器0x48A2A1A00x9E(写地址)
OLED显示屏0x3CSA0位0x78
EEPROM存储器0x50A2A1A00xB2

▲ 🔍LM75(温度传感器)

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

3.1 内部结构原理

(图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] 洋桃电子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)

http://www.kler.cn/a/577876.html

相关文章:

  • #UVM# 关于 config_db 机制中的“路径”和“层次”概念剖析
  • 点云数据处理--splat转3dtiles
  • 架构师面试(十一):消息收发
  • ajax之生成一个ajax的demo示例
  • 网络安全 api 网络安全 ast技术
  • 【五.LangChain技术与应用】【9.LangChain ChatPromptTemplate(上):高级对话模板设计】
  • MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模
  • 力扣hot100——多维动态规划
  • MySQL5.7.44-winx64版本Windows Server下载安装教程图解
  • three.js 在 webGL 添加纹理
  • Django系列教程(5)——Django模型详解
  • [FE] React 初窥门径(五):React 组件的加载过程(commit 阶段)
  • 【爬虫软件】抖音评论区采集工具
  • [含文档+PPT+源码等]精品基于Python实现的django电动车租赁系统
  • FPGA 实验报告:四位全加器与三八译码器仿真实现
  • Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(八)
  • uniapp:小程序将base64图片字符串保存到手机相册
  • java环境部署
  • hbase集群archive目录过大问题处理
  • 深度学习-143-Text2SQL之基于langchain的少量样本提示词模板FewShotPromptTemplate的应用实战(二)