[STM32F0] STM32F0 系列硬件 I2C 从机通信与总线锁死恢复要点

[复制链接]
8|1
一、从机模式的基本配置
STM32F0 的 I2C 在从机模式下常用"中断 + 地址匹配回调"的写法:使能 ADDR、STOPF、NACKF 中断,收到地址后根据方向位分别进入发送或接收流程。要特别注意在 ADDR 中断里必须先读 SR1 再读 SR2 来清除标志,只读 SR1 会导致标志不清、总线被拉死。
二、时钟延展与主机速率
如果从机在中断里处理数据较慢,可以打开时钟延展(NOSTRETCH=0),让主机在字节间隙等待。主机速率 400kHz 时应预留至少 10us 的响应时间,否则容易出现数据被覆盖。
三、总线锁死(BUSY 不释放)的处理
主机异常复位后从机常出现 SR2 的 BUSY 恒为 1。标准恢复流程:关闭 I2C 外设,把 SCL/SDA 配成推挽输出,手动产生 9 个 SCL 时钟让从机释放 SDA,再发一个 STOP 条件,最后重新初始化外设。直接在 BUSY 未清时初始化会立刻失败。
四、工程上的几个细节
1)从机发送时若主机提前 NACK,需要在 AF 标志处理后重新准备缓冲区;2)建议给 I2C 通信加超时保护,避免中断里死等;3)长线通信时上拉电阻取 2.2k~4.7k,并适当加串阻抑制振铃。
以上是 STM32F0 作为从机与主控通信时的调试要点。
云上漫步 发表于 2026-11-11 15:31 | 显示全部楼层
忙标志不清问题,试试重置 SCL 为高电平再恢复中断,别忽视 SCL 波形。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

542

主题

4086

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部