我没有直接使用pm组件,而是根据组件的工作原理,在进入低功耗之前依次:
① 禁用全局中断
② 关闭外设和时钟(deinit),禁用外设中断,清空中断标志
③ 禁用 systick 中断
④ 设置 RTC Wakeup 功能,比如 10s 钟之后唤醒
⑤ 调用 HAL 库函数进入 STOP 模式
⑥ 从 STOP 模式唤醒,基本是以上过程的逆过程
如果不跑基于串口收发的应用(有四个串口收发,使用的 drv_usart/serial 库),能正常进入 STOP 模式,也能正常 RTC 唤醒。
一旦我打开任何一个基于串口收发的应用,进入 STOP 模式就变得十分不稳定,有时候可以进入,有时候就无法进入,十分让人抓狂。
我已经把串口相关的所有寄存器都看了一遍,和串口相关的所有中断也确认过一遍,没有任何 pending 的中断。也没有任何外部中断处于 pending 状态(实际上进 STOP 模式前我也清空了一次)。我也尝试使用 HAL_NVIC_GetPendingIRQ() 函数清除 pending 的中断,也么有任何效果。还是概率性进入 STOP 模式。
请求各位大佬指点迷津,这个问题卡住好几天了:Q
你好,请问问题解决了吗?有什么解决办法吗?同样碰到了一样的问题。