在STM32的I2C从机模式下,应对主机时钟延展(Clock Stretching)和总线错误恢复,核心是正确配置和利用硬件特性。对于时钟延展,STM32硬件默认支持,当从机未准备好时,SCL会被拉低,但需确保在中断服务程序(ISR)中快速处理数据,避免长时间占用总线。建议使用DMA或中断优先级配置,将I2C事件处理置于高优先级,减少延展时间。对于总线错误(如仲裁丢失、毛刺),应使能I2C的SMBus或错误中断,在错误处理函数中检查I2C_SR1的AF、BERR、OVR等标志位,并执行软件复位:先设置I2C_CR1的SWRST位,再清除,然后重新初始化从机地址和配置。实操中,建议在错误恢复后,发送STOP条件或重新使能PE位,确保总线状态机复位。另外,可启用I2C的Analog Noise Filter(ANF)和Digital Noise Filter(DNF)增强抗干扰,但注意DNF会增加延展时间。最后,若主机频繁延展,可考虑降低I2C时钟频率(如100kHz),并确保从机代码无阻塞操作。
mcuku 阿沐 · 2026-08-27