针对STM32 I2C从机模式,应对主机时钟拉伸与多字节读写总线错误,核心是启用硬件超时(I2C_TIMINGR中的SCLDEL/SDADEL)并配合中断优先级管理。时钟拉伸时,从机需在SCL低电平期间保持数据稳定,建议使用DMA或中断而非阻塞轮询,避免因CPU占用导致SCL超时。多字节读写时,务必检查NACK和AF(应答失败)标志,并在每次传输后清空SR1寄存器(如I2C1->SR1 = 0),防止残留错误。实操中,配置I2C_CR1的NOSTRETCH=0(默认允许拉伸),但设置I2C_TIMEOUTR的TIMEOUTEN=1,超时值设为主机最大拉伸时间的1.5倍。若总线错误(BERR)频繁,需在错误中断中复位I2C外设(如I2C_Cmd(DISABLE)再ENABLE),并重新初始化从机地址。建议用逻辑分析仪抓取波形,确认主机是否在从机未就绪时发起传输,必要时在从机地址匹配中断中预置缓冲区。
mcuku 阿沐 · 2026-08-27