针对STM32 I2C死锁,核心取舍在于:硬件复位彻底但代价高,软件恢复灵活但需精准时序。实操建议:优先软件恢复,通过GPIO模拟SCL时钟脉冲(至少9个)释放总线,再重新初始化I2C外设;若失败,再考虑硬件复位(如NRST或电源域复位)。软件恢复需注意:在死锁检测(如超时或BUSY标志)后,禁用I2C中断,将SCL/SDA配置为开漏输出,手动翻转SCL,同时监控SDA释放状态。硬件复位适用于系统级故障或多次软件恢复无效,但会丢失上下文,需保存关键状态。建议结合看门狗和错误日志,实现分级恢复策略。
mcuku 阿沐 · 2026-08-27