📖 第 26 章:IIC实验(I2C)

🔧 正点原子《DMF407 开发指南》V1.0 · Chapter 26
🗨️ 「两根线就能通信:I2C 是板内低速总线之王。」
这一章在干嘛? I2C 实验:I2C 协议(起始/停止/应答)、AT24C02 EEPROM 读写、STM32 HAL_I2C_Master_Transmit / Master_Receive。理解后所有 I2C 传感器一通百通。
26.1 IIC 及 24C02 介绍26.2 硬件设计26.3 程序设计26.4 下载验证

26.1 IIC 及 24C02 介绍

26.1.1 I2C 协议

I2C(Inter-Integrated Circuit):两线制同步串行总线。

信号方向作用
SCL主机→从机时钟
SDA双向数据

原书图 26.1.1.1:I2C 总线拓扑
原书图 26.1.1.1:I2C 总线拓扑

关键时序:

帧格式:S | 地址(7bit) + R/W | ACK | 数据 | ACK | ... | P

原书图 26.1.1.2:I2C 时序图
原书图 26.1.1.2:I2C 时序图

地址位数:7 位或 10 位,常用 7 位。I2C 总线最多挂 127 个从机(地址 0x00 保留)。

26.1.2 AT24C02

AT24C02 是 2 Kbit(256 字节)EEPROM,I2C 接口,地址 0x50。

引脚作用
A0/A1/A2从机地址线(决定地址低 3 位)
SCL / SDAI2C 总线
WP写保护(高电平禁止写)

26.2 硬件设计

PB8 / PB9 作 I2C1_SCL/SDA;外接 AT24C02。

原书图 26.2.1:I2C 与 24C02 硬件连接
原书图 26.2.1:I2C 与 24C02 硬件连接

26.3 程序设计

26.3.1 CubeMX 配置

26.3.2 关键代码

uint8_t buf[256];
HAL_I2C_Mem_Read(&hi2c1, 0xA0, 0x00, I2C_MEMADD_SIZE_8BIT, buf, len, 100);
HAL_I2C_Mem_Write(&hi2c1, 0xA0, 0x00, I2C_MEMADD_SIZE_8BIT, buf, len, 100);

地址计算:24C02 地址 = 0x50 << 1 = 0xA0(最低位 R/W)。

26.3.3 连续读多字节

AT24C02 跨页读自动翻页,但写一页(8 字节)需等 5 ms 写入完成再写下一页。

I2C 读写常见问题:SDA 一直低 = 某从机把 SDA 拉住了,硬件复位一下解决;上拉电阻 4.7kΩ 必须。

26.4 下载验证

写入字符串到 24C02 后重启开发板,再读出来 → 一致。

🧠 小测验
I2C 总线最少需要几根线?
2 根(SCL + SDA)。
I2C 起始信号的时序?
SCL 高电平时 SDA 出现下降沿。
AT24C02 的 I2C 地址是多少?
0x50(HAL 中用 0xA0 写入,0xA1 读取)。
← 上一篇🏠 顶层目录下一篇 →