[CW32L083系列] CW32L083 STOP 模式下外部按键唤醒,偶现唤醒后程序卡死怎么排查?

[复制链接]
45|1
等你下课 发表于 2026-11-4 10:44 | 显示全部楼层 |阅读模式
项目用 CW32L083 做电池供电门锁,STOP 低功耗模式依靠外部按键 EXTI 中断唤醒。现象是大部分情况唤醒正常,偶尔唤醒之后 MCU 直接卡死,串口无输出,只能复位恢复。
已经确认:GPIO 配置上拉,开启 EXTI 中断,进入休眠前关闭多余外设时钟。怀疑是中断挂起标志没有清理或者时钟唤醒恢复异常。
请教各位:Stop 模式唤醒后,除清除 EXTI 中断标志,还有哪些寄存器需要处理?唤醒后系统时钟是否需要重新初始化?有没有最小测试代码参考?
classroom 发表于 2026-11-4 12:07 | 显示全部楼层
进 STOP 前用 PWR_StopCfg() 的时候,第二个参数里有没有带上 PWR_STOP_WAKEUP_GPIO。只写 PWR_STOP_WAKEUP_RTC 的话,按键中断触发了也醒不过来,但你说大部分情况能醒,所以更可能是标志位残留导致偶发卡死。
cr315 发表于 2026-11-4 14:10 | 显示全部楼层
清 EXTI 标志之外,NVIC 的挂起位也要清。NVIC_ClearPendingIRQ(GPIOx_IRQn) 这句加上去,进 STOP 前把 NVIC 里挂着的那个中断请求也一起清掉,否则唤醒后可能立刻又进一次中断,栈或者状态机乱掉。
duo点 发表于 2026-11-4 15:32 | 显示全部楼层
唤醒后系统时钟默认切回 HSI,但 HSI 起振需要时间。在 __WFI() 返回之后、操作任何外设之前,先加一句 while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); 等 HSI 稳定,串口没输出很可能就是时钟还没好就去写 DR 了。
solty 发表于 2026-11-4 17:11 | 显示全部楼层
进 STOP 前关外设时钟是对的,但唤醒后要记得重新使能。如果唤醒后代码路径里漏了恢复某个时钟,而后续逻辑又依赖它,就可能卡在等某个标志位的死循环里。串口无输出本身就是时钟或外设没恢复的信号。
jcky001 发表于 2026-11-4 19:09 | 显示全部楼层
门锁的按键引脚有没有复用成别的功能。如果唤醒脚在休眠前被某个外设占用了一部分复用功能,GPIO 中断路径可能时通时不通,表现就是偶发。确认引脚在进 STOP 前是纯 GPIO 输入模式。
powerantone 发表于 2026-11-4 19:48 | 显示全部楼层
用示波器抓按键引脚波形,看有没有抖动或者毛刺。机械按键的抖动如果刚好落在 STOP 进入或退出的临界窗口,EXTI 可能被触发两次,第一次唤醒,第二次在唤醒过程中又挂起,导致状态异常。
probedog 发表于 2026-11-4 20:25 | 显示全部楼层
检查 PWR_StopCfg() 是不是每次进 STOP 前都调用了。如果代码里只在初始化时调一次,后续循环里直接 __WFI(),某些情况下唤醒源配置可能被别的地方覆盖掉,偶发失效。
spicy 发表于 2026-11-4 21:58 | 显示全部楼层
最小测试代码的思路:只配按键 GPIO 上拉加 EXTI,NVIC 使能,进 STOP 前清 EXTI 和 NVIC 标志,PWR_StopCfg 带 GPIO 唤醒,__WFI() 之后等 HSI ready,然后翻转一个 LED。反复按几百次,看能不能复现卡死。能复现就是底层配置问题,不能就是业务代码在唤醒路径上踩了坑。
stormwind123 发表于 2026-11-4 22:36 | 显示全部楼层
还有一点容易漏:调试器连着的时候 STOP 模式行为可能和脱机不一样。你串口无输出是在脱机电池供电下测的,还是连着调试器测的?先把调试器拔了、用电池或者独立电源供电跑,排除调试接口对低功耗状态的影响。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

599

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部