Forum: Mikrocontroller und Digitale Elektronik STM32L431 mit USART 1 STOP1 wakeup und HSI


von stm32 schlafender (Gast)


Lesenswert?

Hallo,
ich habe hier einen STM32L431 bei dem ich den STOP1 nutze.
Bei einer eingehenden Nachricht über den USART1 soll der wieder 
aufwachen.
(Der Wakeup IRQ feuert beim Startbit)
Damit der USART1 im STOP1 empfangen kann muss er per HSI RC laufen.
Der ist mit seinen +-1% genau genug für UART.
Da ich 1Mbaud brauche kann ich nicht auf HSE+PLL warten bis die 
ready+locked sind.
Also läuft der Rest des STM32 mit dem MSI auf 48MHz.

Nun bekommt der USART1 also 2 Takte, 16MHz HSI und 48MHz MSi, diese sind 
nicht synchron zueinander.

Im Datenblatt finde ich nichts dazu ob das erlaubt ist oder verboten 
ist.
Es wird auch nichts von einer sync Logik erwähnt.
(kennt man zB vom AVR mit seinem async Timer)
Laut Blockschaltbild geht der 16MHz HSI nur an den Baudratenerzeuger.
Die Busclk (=48MHz MSI) ist im Blockschaltbild nicht eingezeichnet.

Da das später in den Produktionscode soll bräuchte ich dazu eine 
konkrete Aussage.
Weis wer wo ich die bekomme?

Das erste byte per HSI empfangen, dann aufs Stopbit lauschen und dann 
den Takt umschalten ist jetzt auch nicht wirklich praktikabel oder?
Vor allem wenn der Empfang per DMA und Timeout realisiert ist.

von Jim M. (turboj)


Lesenswert?

Der folgende Text aus dem DB (3.25 UART) impliziert Clock Syncro Logik:
> All USART have a clock domain independent from the CPU clock

Insbesondere sieht man im Clock Tree das auch 32kHz als Clock Source 
ausgewählt werden darf - damit wird Synchronisierung Pflicht.

Da beim STM32L4 mehrere Peripherials eine eigene Clock haben, könnten 
die Details an anderer Stelle im Refrenz Handbuch auftauchen - ich habe 
da jetzt nicht nachgeschaut.

von Jim M. (turboj)


Lesenswert?

stm32 schlafender schrieb:
> Das erste byte per HSI empfangen, dann aufs Stopbit lauschen und dann
> den Takt umschalten ist jetzt auch nicht wirklich praktikabel oder?

Nicht wirklich, dann auf das Stop kann direkt das nächste Start Bit 
folgen. Da Baudraten umschalten seine Zeit dauert, dürfte das dann in 
die Hose gehen.

von stm32 schlafender (Gast)


Lesenswert?

Jim M. schrieb:
> Der folgende Text aus dem DB (3.25 UART) impliziert Clock Syncro Logik:
>> All USART have a clock domain independent from the CPU clock

Ja impliziert, aber so wirklich konkret steht das nirgends.
Das mit den 32kHz ist nen Argument, aber beim AVR stehts eben noch 
deutlicher im Datenblatt.

Jim M. schrieb:
> Da beim STM32L4 mehrere Peripherials eine eigene Clock haben, könnten
> die Details an anderer Stelle im Refrenz Handbuch auftauchen - ich habe
> da jetzt nicht nachgeschaut

Beim RCC und USART stehts jedenfalls nicht, da hab ich natürlich schon 
nachgelesen.

von Bauform B. (bauformb)


Lesenswert?

Evt. scheitert es an der hohen Baudrate. Das Datenblatt sagt:
1
Table 43. Wakeup time using USART/LPUART(1)
2
Wakeup time needed to calculate the maximum USART/LPUART
3
baudrate allowing to wakeup up from stop mode when USART/LPUART
4
clock source is HSI16
5
  Stop 0 mode                   1.7us
6
  Stop 1 mode and Stop 2 mode   8.5us
bzw. im RM0394
1
38.5.17 Wakeup from Stop mode using USART
2
Determining the maximum USART baud rate allowing to wakeup correctly
3
from Stop mode when the USART clock source is the HSI clock
4
204kBaud
allerdings heißt es auch
1
If the wakeup event is verified, the MCU wakes up from
2
low-power mode and data reception goes on normally.
und verify beim Startbit kostet doch max. 1 Takt oder wie?

Jim M. schrieb:
> Insbesondere sieht man im Clock Tree das auch 32kHz als Clock Source
> ausgewählt werden darf - damit wird Synchronisierung Pflicht.

Das gilt doch für jede andere Taktfrequenz genauso, entscheidend ist 
doch nur die Taktquelle.

von stm32 schlafender (Gast)


Lesenswert?

Bauform B. schrieb:
> Evt. scheitert es an der hohen Baudrate

Es scheitert ja nicht, alles funktioniert bestens.
Die hohe Baudrate ist möglich, weil ich das UCESM Bit gesetzt habe 
(USART Clock Enable in Stop mode).
Das zieht dann zwar etwas mehr Strom, weil der HSI nie schläft, aber ich 
brauch die Baudrate.

Die 204kbaud sind aber auch nur aus STOP0 heraus möglich.
Bei STOP1/2 ist man auf maxx 44kbaud beschränkt.
Also letztendlich auf 38400.

Bei zu hoher Baudrate und HSI deaktiviert in STOP1 wird zwar der WKUP 
IRQ ausgelöst, aber der Anfang der Empfangenen Daten ist Grütze.
(Ließe sich eventeuell mit einer "Präambel" lösen).

Bei den Stromaufnahmen pro MHz im Datenblatt steht dann noch was von 
"USARTx independend clock domain".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.