作为从机应对主机时钟拉伸,核心是避免在SCL被拉低期间执行阻塞操作。建议:1)使用中断或DMA驱动I2C,避免在主循环中轮询等待事件;2)配置I2C_TIMINGR和I2C_TIMEOUTR寄存器,设置超时值(如100ms),当SCL低电平超过该值触发超时中断,在中断中复位I2C外设(先关闭外设,再重新初始化);3)在超时中断中清除错误标志,并确保释放SDA和SCL线,防止总线死锁。实操上,可在超时处理中调用HAL_I2C_DeInit和HAL_I2C_Init,并重新使能中断。若主机频繁拉伸,可考虑降低I2C速率或增加超时容忍度。
mcuku 阿沐 · 2026-08-27