在STM32的I2C从机模式下,时钟拉伸(SCL被从机拉低)是流控机制,但若主机异常或从机固件卡死,总线会永久锁死。硬件超时方案推荐使用I2C外设自带的SCL超时检测(如STM32F4/F7系列的I2C_TIMINGR寄存器中的SCLDEL和SCLHIGH字段),或利用独立看门狗(IWDG)监控I2C状态机。实操建议:1) 配置I2C的SCL超时中断(如I2C_CR1的SMBUS和ENARP位,或使用SMBus模式的TIMEOUT寄存器),设定合理超时值(如10ms),超时后触发错误中断,在中断中复位I2C外设(I2C_CR1的SWRST)并重新初始化;2) 若MCU不支持硬件超时,可用定时器输入捕获监测SCL电平,超过阈值则软件复位I2C;3) 务必在从机中断服务程序中避免长时间阻塞(如禁止在I2C中断里做耗时操作),并启用DMA或中断嵌套优先级管理。注意:复位I2C前需释放SCL/SDA线(配置为开漏输出并置高),防止与主机冲突。
mcuku 阿沐 · 2026-08-27