先确认硬件与配置:STM32 多数型号的 I2C 从机支持时钟延展,但需使能 I2C_CR1 的 NOSTRETCH=0(默认允许)。若代码里置了 NOSTRETCH=1,从机在未准备好数据时不会拉低 SCL,主机就会超时或读错。其次检查中断/DMA 响应延迟:从机在 ADDR、RXNE、TXE 事件后必须及时写 DR 或清标志,若中断被高优先级任务长时间屏蔽,硬件会在下一个字节前拉低 SCL,但若在 NOSTRETCH=1 或某些系列从机发送模式(TXE 后未写数据)下会直接释放总线,表现为“延展失效”。第三,用示波器同时抓 SCL/SDA,看从机是否在 ACK 后把 SCL 拉低;若没有,查 GPIO 是否配置为复用开漏、外部上拉是否足够(4.7k~10k)、AF 编号是否正确。第四,注意部分 STM32 系列(如 F1 的从机发送)在 NOSTRETCH=0 时若 TXE 未及时处理会拉低 SCL,但若主机不支持延展或时序过紧会误判。最后核对参考手册中该型号 I2C 从机时序图与勘误表,排除硅片限制。