STM32F405 clocktree und USART

Gast #4703240
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
Gast
>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.
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
Angehängte Dateien:
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
Gast
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.