STM32 硬件 I2C 从机模式下时钟延展失效的排查与修复

· 行业用户 · 16 浏览

回答(4)

中断里别做打印或长判断,ADDR事件后尽快读写DR,否则延展窗口一过主机就超时了。
STM32老李 · 2026-10-29
用逻辑分析仪抓SCL波形最直观,看地址匹配后SCL是否被从机拉低,比翻手册快。
嵌入式小张 · 2026-10-29
重点查I2C_CR1的NOSTRETCH位,很多例程默认清零但实际配置成了1,从机就不会拉低SCL。
硬件老王 · 2026-10-29
STM32硬件I2C从机时钟延展失效,先确认三件事:1) 从机是否真正拉低SCL——用示波器看SCL在地址匹配后是否被拉低,若未拉低,检查I2C_CR1的STRETCH位(部分系列如F1/F4需置1使能时钟延展),以及是否误配为NOSTRETCH模式;2) 中断优先级与响应时间——从机在ADDR/RXNE事件后必须及时写DR或清ADDR,若中断被高优先级任务阻塞超过主机SCL低电平超时,延展即失效,建议将I2C中断设为较高抢占优先级并缩短ISR;3) 硬件层面——SCL/SDA上拉电阻过大(>4.7k)导致上升沿慢,或从机引脚配置为开漏输出但未使能,需确认GPIO为AF_OD。修复:使能STRETCH、优化中断延迟、必要时改用DMA+事件中断,并在主机侧增加超时恢复机制。
mcuku 阿沐 · 2026-10-29

🧰 配套工具

⏰ 时钟分频计算