STM32通过RTC从待机状态唤醒

时间:2017-02-13 14:05:51

标签: timer microcontroller stm32 wakeup real-time-clock

我正在编程STM32L051R8并有下一个问题。我大部分时间都在尝试使用待机模式,有时通过RTC唤醒,这是一个自动唤醒。如果我在没有睡觉的情况下工作 - 一切都很完美,我每次都会得到一个RTC中断,但是当我使用待机时 - 不要。

如果我使用待机,我的第一个周期很好:

  1. 重置
  2. 设置RTC
  3. 进入待机状态
  4. 等待中断
  5. 唤醒
  6. 但是第二个和下一个周期在进入待机状态后立即唤醒(3)。

1 个答案:

答案 0 :(得分:11)

当微控制器处于待机模式且发生RTC中断时, WUF:唤醒标志将由PWR control/status register中的硬件设置(页172)。

  

位0 WUF:唤醒标志

     

该位由硬件置1,由a清零   系统复位或通过设置PWR功率控制中的CWUF位   寄存器(PWR_CR)

     

0:没有发生唤醒事件

     

1:唤醒事件是   从WKUP引脚或RTC报警(报警A或报警B)接收,   RTC篡改事件,RTC TimeStamp事件或RTC唤醒)。

最初这是通过系统重置清除的,这就是您的第一个循环正常的原因。但是从待机状态唤醒后,必须使用PWR控制寄存器中的CWUF位手动清除它。如果不这样做,那么控制器将立即唤醒,因为该位表示发生了唤醒事件。

您可以直接访问寄存器以设置此位,或者使用HAL库可以使用以下宏:

__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);