2017-02-13 16 views
7

aufwachen Ich programmiere STM32L051R8 und habe das nächste Problem. Ich versuche den Standby-Modus in den meisten Fällen zu verwenden, und manchmal wache ich mit RTC auf, es ist ein automatischer Weckruf. Wenn ich ohne Schlaf arbeite - alles funktioniert perfekt, ich habe jedes Mal einen RTC-Interrupt, aber wenn ich Standby verwende - nicht.STM32 aus dem Standby durch RTC

Wenn ich Standby verwenden, habe ich einen guten ersten Zyklus:

  1. zurückgesetzt
  2. gesetzt RTC
  3. den Standby
  4. gewartet Interrupt
  5. Weck-

Der zweite und der nächste Zyklus werden jedoch sofort nach dem Eintreten in den Standby-Modus aktiviert (3).

+0

Schwer zu sagen, so wäre es gut, wenn Sie Ihren Code zeigen könnte, aber es scheint, dass du vergessen hast, das WakeUp-Flag zu löschen. –

+1

'__HAL_PWR_CLEAR_FLAG (PWR_FLAG_WU);' so etwas fehlt beim Start. –

+0

Oh, vielen Dank, ich habe klare Flaggen in rtc versucht. Ich kann den Kommentar nicht wie eine Lösung überprüfen. Wenn Sie es richtig beantworten, werde ich es überprüfen. – luden

Antwort

10

Wenn die Mikrocontroller im Standby-Modus befindet und ein RTC-Interrupt auftritt, um die WUF: Wakeup-Flag wird durch die Hardware in der PWR control/status register (Seite 162) eingestellt werden.

Bit 0 WUF: Wakeup-Flag

Dieses Bit durch Hardware und gelöscht durch ein System oder Reset eingestellt ist, indem das CWUF Bit in der PWR Leistungssteuerung Registereinstellung (PWR_CR)

0 : Kein Ereignis aufgetreten Wakeup

1: A Wakeup Ereignis vom WKUP Stift oder aus dem RTC Alarm (A-Alarm oder Alarm B), RTC Manipulationsereignis, RTC Timestamp Ereignis oder RTC Wakeup empfangen wurde).

Zunächst wird dies durch einen System-Reset gelöscht, deshalb ist der erste Zyklus in Ordnung. Nach dem Aufwachen aus dem Standby-Modus müssen Sie es manuell mit dem CWUF-Bit im PWR-Steuerregister löschen. Wenn Sie dies nicht tun, wird der Controller sofort aufwachen, da dieses Bit ein aufgetretenes Wake-up-Ereignis signalisiert.

können Sie auf das Register zugreifen direkt dieses Bit oder mit HAL-Bibliothek setzen Sie das folgende Makro verwendet werden können:

__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);