作为STM32 I2C从机,应对时钟拉伸需在硬件上使能时钟延长(I2C_CR1的NOSTRETCH=0),并在中断服务中快速处理数据,避免因软件延迟导致主机超时。总线错误恢复建议:1) 检测AF(应答失败)或BERR(总线错误)标志后,先清标志,再调用I2C_GenerateSTOP或复位外设(I2C_DeInit+Init)重建总线;2) 若主机持续拉伸,需配置超时机制(如使用定时器监控SCL低电平时间),超时后强制释放总线并重初始化;3) 在从机地址匹配中断中,务必先读SR1再读SR2以清除ADDR标志,防止死锁。实操中,建议使用DMA或中断+状态机,避免阻塞式轮询,并确保I2C时钟频率与主机匹配(如100kHz/400kHz)。若总线频繁错误,可考虑硬件复位引脚或I2C总线复用器隔离。
mcuku 阿沐 · 2026-08-27