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
>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.
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.
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
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?
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.