STM32通过RTC从待机状态唤醒
STM32 wake up from standby by RTC
我正在为 STM32L051R8 编程,遇到下一个问题。我大部分时间都在尝试使用待机模式,有时会被 RTC 唤醒,这是自动唤醒。如果我不睡觉工作 - 一切正常,我每次都会收到 RTC 中断,但当我使用待机时 - 不会。
如果我使用待机,我有一个很好的第一个周期:
- 重置
- 设置实时时钟
- 进入待机状态
- 等待中断
- 唤醒
但是第二个和下一个周期进入待机后立即唤醒(3)。
当微控制器处于待机模式并且发生 RTC 中断时,WUF:唤醒标志 将由 PWR control/status register 中的硬件设置(第 162 页)。
Bit 0 WUF: Wakeup flag
This bit is set by hardware and cleared by a
system reset or by setting the CWUF bit in the PWR power control
register (PWR_CR)
0: No wakeup event occurred
1: A wakeup event was
received from the WKUP pin or from the RTC alarm (Alarm A or Alarm B),
RTC Tamper event, RTC TimeStamp event or RTC Wakeup).
最初这是通过系统重置来清除的,这就是为什么你的第一个周期是好的。但是在从待机状态 wake-up 之后,您必须使用 PWR 控制寄存器中的 CWUF 位手动清除它。如果您不这样做,那么控制器将立即唤醒,因为此位表示已发生 wake-up 事件。
您可以直接访问寄存器来设置此位,或者使用 HAL 库可以使用以下宏:
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
我正在为 STM32L051R8 编程,遇到下一个问题。我大部分时间都在尝试使用待机模式,有时会被 RTC 唤醒,这是自动唤醒。如果我不睡觉工作 - 一切正常,我每次都会收到 RTC 中断,但当我使用待机时 - 不会。
如果我使用待机,我有一个很好的第一个周期:
- 重置
- 设置实时时钟
- 进入待机状态
- 等待中断
- 唤醒
但是第二个和下一个周期进入待机后立即唤醒(3)。
当微控制器处于待机模式并且发生 RTC 中断时,WUF:唤醒标志 将由 PWR control/status register 中的硬件设置(第 162 页)。
Bit 0 WUF: Wakeup flag
This bit is set by hardware and cleared by a system reset or by setting the CWUF bit in the PWR power control register (PWR_CR)
0: No wakeup event occurred
1: A wakeup event was received from the WKUP pin or from the RTC alarm (Alarm A or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup).
最初这是通过系统重置来清除的,这就是为什么你的第一个周期是好的。但是在从待机状态 wake-up 之后,您必须使用 PWR 控制寄存器中的 CWUF 位手动清除它。如果您不这样做,那么控制器将立即唤醒,因为此位表示已发生 wake-up 事件。
您可以直接访问寄存器来设置此位,或者使用 HAL 库可以使用以下宏:
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);