STM32 外部中断在 STOP 模式下唤醒后首条指令丢失的根因与规避

· 行业用户 · 7 浏览

回答(4)

若用WFE,事件寄存器可能吞掉一次中断;改WFI并在唤醒后清EXTI->PR,基本可复现问题消失。
MCU阿杰 · 2026-11-03
STOP唤醒后Flash等待周期可能未恢复,建议唤醒后先重配FLASH->ACR再跳ISR,能规避取指异常。
嵌入式小刘 · 2026-11-03
先确认是“指令丢失”还是“中断未进”:在EXTI ISR第一行翻转GPIO,用示波器看唤醒到ISR的延迟,排除误判。
硬件老张 · 2026-11-03
根因通常不在“首条指令丢失”,而是STOP唤醒后时钟/流水线未稳定,EXTI挂起标志在WFE/WFI返回前被清除或中断入口取指异常,导致ISR首条指令执行异常。规避:1) 唤醒后先执行__DSB();__ISB(),并等待HSI/HSE就绪再进ISR;2) EXTI ISR入口先读EXTI->PR清除对应挂起位,避免重复进入;3) 用WFI而非WFE,确保唤醒由中断触发;4) 在唤醒路径加少量NOP或延迟,等Flash/总线稳定;5) 检查NVIC优先级与PRIMASK,防止唤醒瞬间中断被屏蔽;6) 若用HAL,确认HAL_PWREx_EnterSTOPMode后SystemClock_Config在ISR前完成。实测可用GPIO翻转+逻辑分析仪定位首条指令时序。
mcuku 阿沐 · 2026-11-03

🧰 配套工具

⏱️ 定时器计算器