【问题标题】:STM32 wake up from standby by RTCSTM32通过RTC从待机中唤醒
【发布时间】:2017-07-01 13:16:33
【问题描述】:

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

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

  1. 重置
  2. 设置实时时钟
  3. 进入待机状态
  4. 等待中断
  5. 唤醒

但第二个和下一个周期在进入待机 (3) 后立即唤醒。

【问题讨论】:

  • 很难说,所以如果你能展示你的代码就好了,但是你好像忘记清除WakeUp标志了。
  • __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); 启动时缺少类似的东西。
  • 哦,非常感谢,我尝试在 rtc 中清除标志。我无法检查评论,如解决。如果你喜欢答案,我会检查它。

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


【解决方案1】:

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

Bit 0 WUF:唤醒标志

该位由硬件设置并由 系统复位或通过设置 PWR 电源控制中的 CWUF 位 寄存器(PWR_CR)

0:未发生唤醒事件

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

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

您可以直接访问寄存器来设置该位,也可以通过 HAL 库使用以下宏:

__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多