Forum: Mikrocontroller und Digitale Elektronik STM32F405 clocktree und USART


von Detlef _A (Gast)


Lesenswert?

Liebe kundige ARM Kenner,

ich dachte immer laut ARM Cortex Reference manual figure 21, der USART1 
clock hängt über den AHB- und APB-prescaler an der SYSCLK.

Falls ich an der PLL rumschraube ändert sich SYSCLK und die Timerclocks 
aber USART1 läuft nach wie vor super.

Umgekehrt: Falls ich HSE ändere und die SYSCLK über die PLL konstant 
lasse passt die Baudrate nicht mehr. Der USART1 clock scheint also an 
HSE und nicht an SYSCLK zu hängen.

Das steht im Referance manual anders.
Wo ist denn da mein Verständnisproblem?

THX
Cheers
Detlef

von holger (Gast)


Lesenswert?

>Der USART1 clock scheint also an
>HSE und nicht an SYSCLK zu hängen.

Mit welchem Befehl schaltest du den Takt für die UART Peripherie ein?
Daran kannst du erkennen wo der UART dran hängt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Ich habe nicht ganz verstanden was Du machst. Vielleicht postetst Du mal 
zwei CubeMX-Screenshots Deiner Varianten?

Auch falls man die HAL-API nicht nutzt, ist CubeMX eine nette 
Möglichkeit, die Pin-Funktionen und den Clock-Tree festzulegen und zu 
dokumentieren.

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hallo,

hier mal die Initialisierung des UART1, habe ich irgendwoher adaptiert, 
geht auch. Ebenfalls der clock tree aus dem Reference Manual angehängt. 
USART1 hängt festverdrahtet an APB2 und der fest an SYSCLK, USART clock 
dürfte sich also nicht ändern falls sich SYSCLK nicht ändert, tut er 
aber.

AHB1 muss man auch noch bespielen, warum verstehe ich nicht richtig, 
aber der hängt ja auch an SYSCLK.

Ja, CubeMX, lohnt sich die Einarbeitung.

hmhm
Cheers
Detlef

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Detlef _. schrieb:
> USART clock dürfte sich also nicht ändern falls sich SYSCLK nicht ändert,
> tut er aber.

Um die Möglichkeit "falsch gemessen" auszuschließen:

Woran machst Du die Aussage fest? Per Oscar/LA?

von Detlef _. (detlef_a)


Lesenswert?

Hi,

>>Woran machst Du die Aussage fest? Per Oscar/LA?

An der SYSCLK hängt auch noch ein Zähler, der Interrupts generiert. Wenn 
ich dann HSE ändere ( 10MHz TCXO statt 8MHz Q ) aber SYSCLK gleich 
bleibt ( weil ich die PLL modde ), dann kommen die Interrupts in der 
gleichen Frequenz. Nur der UART gibt in einer anderen Baudrate aus, 
72kBd statt 57.6kBd vorher, also der passende Faktor.

Habs' inzwischen umschifft, indem ich die Baudrate entsprechend ändere. 
Verstanden ist das allerdings nicht, beunruhigend.

THX
Cheers
Detlef

von bbb (Gast)


Lesenswert?

Hm,
änderst du denn auch die HSE-Frequenz in der system_32f4xx.c? Denn 
zumindest bei den Treibern für den F407 (STM32-discovery) rechnet sich
  USART_Init(USART1, &USART_InitStruct);
die Teilerfaktoren für die Baudratenregister aus den Angaben in der 
system_32f4xx.c aus. Wenn du also in dieser Datei an den PLL-Teilern 
spielst, wird das bei der Initialisierung des USARTS berücksichtigt. 
Wenn du einfach einen anderen HSE dranlötest und das nicht in der Datei 
änderst, stimmen die Baudraten nicht mehr.

Hätte ja sein können
bbb

von Detlef _. (detlef_a)


Lesenswert?

Hi,

>>>Hätte ja sein können

War.

Hier  \lib\stm32f4xx.h steht bei mir der HSE Wert (8Mio) drin, hatte ich 
nicht gesehen, steht auch im filesystem ne Ebene tiefer, allerdings 
Hinweis in \system_stm32f4xx.c . Probier ich morgen mal aus.

Vielen Dank.
Cheers
Detlef

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.