我使用的是
STM32L552ZE(实际上是 nucleo 版本)。在仔细阅读手册并查看 STM32 Cube IDE 中的一些示例代码后,我得出的结论是,这段代码是我需要使用 Wait For Event 进入停止 2 模式的代码:
- PWR->CR1 = //
- (PWR->CR1 & (~PWR_CR1_LPMS)) // Clear Low Power Mode Select bits
- | PWR_CR1_LPMS_STOP2 // Select Stop 2 Mode
- ;
- // Deep sleep
- SCB->SCR = SCB_SCR_SLEEPDEEP_Msk;
- // Wait for event
- __SEV();
- __WFE();
- __WFE();
这非常有效,因为处理器确实停止运行了。我还可以通过在 LPUART 接口(由 LSE 提供时钟)上发送一个字节来唤醒处理器。
但是,现在我还配置了一些(非 LP)定时器,然后 MCU 立即被唤醒。即使定时器是使用其相应的 APB 时钟配置的,但据推测应该在停止 2 模式下将其禁用。
我现在的问题是,APB 时钟外围设备怎么可能将我的 MCU 从停止 2 模式唤醒?