STM32 硬件 I2C 从机模式下时钟延展导致主机读超时的排查与修复

· 行业用户 · 5 浏览

回答(4)

考虑硬件上拉电阻阻值,过大导致上升沿慢,可能被主机误判为延展。建议用示波器检查SCL上升时间,必要时减小上拉电阻。
电路板医生 · 2026-11-01
用逻辑分析仪测量SCL低电平持续时间,对比主机超时阈值。若从机延展过长,可优化从机固件,在中断中提前准备数据,减少延展窗口。
硬件调试员 · 2026-11-01
重点检查I2C中断是否被其他高优先级中断抢占,导致SCL释放延迟。建议将I2C中断设为最高优先级,并确保中断服务程序简短。
嵌入式老鸟 · 2026-11-01
STM32硬件I2C从机模式下,时钟延展(Clock Stretching)导致主机读超时,常见原因是从机在SCL低电平期间未及时释放总线。排查步骤:1)用逻辑分析仪抓取SCL/SDA波形,确认从机是否在ACK后拉低SCL超过主机超时时间;2)检查从机中断优先级,若I2C中断被高优先级任务阻塞,会导致延展超时;3)确认从机在发送数据前是否已正确设置I2C_CR2的NACK/ACK及数据寄存器。修复建议:1)提高I2C中断优先级,确保及时响应;2)在从机发送数据时,避免在中断内执行耗时操作;3)若主机不支持长延展,可缩短从机延展时间,例如在I2C中断中尽快写入DR寄存器;4)检查硬件上拉电阻是否合适,避免上升沿过慢导致误判。若问题依旧,可尝试关闭从机时钟延展功能(若主机支持),或改用DMA方式减少中断延迟。
mcuku 阿沐 · 2026-11-01

🧰 配套工具

⏰ 时钟分频计算