Ich verwende für mein Projekt eine STM32L0- MCU. Die MCU verfügt über einen Low-Power-Timer (LPTIM) zum Aufwecken der MCU aus dem Stop-Modus und einen Low-Power-UART (LPUART) zum Aufwecken der MCU aus dem Stop-Modus und zum Empfangen/Senden von Daten.
Mein Problem ist: - Wenn ich die MCU im Betriebsmodus bleiben lasse, funktioniert LPUART bei einer Baudrate über 256000 einwandfrei. - Wenn ich die MCU so einstelle, dass sie in den Stoppmodus wechselt, wird die MCU aufgeweckt, wenn sie etwas von LPUART-Rx empfängt Lesen Sie die empfangenen Sequenzdaten weiter. Für diese Einrichtung funktioniert es gut, wenn die UART-Baudrate niedriger als 56000 ist. Wenn die Baudrate jedoch höher ist (z. B. bei 115200), liest LPUART die falschen Daten. Ich bin mir bewusst, dass in diesem Setup das erste übertragene Byte verloren geht, aber die anderen korrekt gelesen werden sollten.
Ich habe es mit mehreren verschiedenen gesendeten Daten mit unterschiedlichen Längen versucht, aber die empfangenen Daten sind immer falsch. (Funktioniert gut, wenn die Baudrate jedoch 56000 beträgt).
Wakeup aus dem Stop-Modus mit LPUART
Der LPUART ist in der Lage, die MCU aus dem Stop-Modus aufzuwecken, wenn das UESM-Bit gesetzt ist und der LPUART-Takt auf HSI oder LSE eingestellt ist (siehe Abschnitt Reset und Taktsteuerung (RCC).
LPUART-Quellentakt ist HSI
Wenn während des Stoppmodus der HSI-Takt ausgeschaltet ist, wenn eine fallende Flanke auf der LPUART-Empfangsleitung erkannt wird, fordert die LPUART-Schnittstelle das Einschalten des HSI-Takts an. Der HSI-Takt wird dann für den Rahmenempfang verwendet.
- Wenn das Wakeup-Ereignis bestätigt wird, wacht die MCU aus dem Energiesparmodus auf und der Datenempfang geht normal weiter.
- Wenn das Aufweckereignis nicht verifiziert wird, wird die HSI-Uhr wieder ausgeschaltet, die MCU wird nicht aufgeweckt und bleibt im Energiesparmodus und die Taktanforderung wird freigegeben.
Wenn der LPUART beginnt, Daten zu empfangen, werden die Uhren nicht sofort aktiv. HSI16 (interner 16-MHz-Hochgeschwindigkeits-RC-Oszillator) benötigt typischerweise 3,7 μs zum Starten.*
Sie können die Startzeit des HSI16 eliminieren, indem Sie es im Stoppmodus laufen lassen, wenn Sie dies wirklich benötigen. Sobald der HSI16 verfügbar ist, muss der LPUART selbst aktiviert werden, was ebenfalls bis zu 12 μs* dauert:
*Das Referenzhandbuch erwähnt keine Startzeiten, da sie für jedes einzelne Teil spezifisch sind. Die tatsächlichen Werte finden Sie im Datenblatt, der Wert hier ist für den STM32L051x6/8 und hier nur zur Veranschaulichung aufgeführt.
Bei 56 kBaud beträgt die Übertragungsperiode eines Bits 17,86 μs, was kaum lang genug ist (immer noch wahrscheinlich außerhalb der Spezifikation), damit der LPUART aufwacht, bevor das nächste Bit ankommt und alles aus dem Takt gerät. Deshalb können Sie die Baudrate nicht erhöhen.
Siehe "Bestimmen der maximalen LPUART-Baudrate, die ein korrektes Aufwachen aus dem Stoppmodus ermöglicht, wenn die LPUART-Taktquelle die HSI-Uhr ist" (Seite 734, Referenzhandbuch )
Bence Kaulics
BL_
Bence Kaulics