STM32F4 Clocks und Systick

OP #5345694
Lesenswert?
• ▲
▼
Hallo,

ich habe ein kleines Verständnisproblem, aber ich habe im Internet keine 
wirkliche Antwort auf meine Frage gefunden, bzw. vielleicht den Wald vor 
lauter Bäumen nicht gesehen.

Ich habe ein STM32F407-Discovery Board und ein Board mit einem 
STM32F415RGT6.

Als Minimalbeispiel möchte ich mit Hilfe des SysTick-Timers eine LED 
alle 100ms blinken lassen. Ich verwende die StdPeripheral-Library und 
rufe zu Beginn des Codes
1
SystemInit();
2
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
3
RCC_ClocksTypeDef test;
4
RCC_GetClocksFreq(&test);
5
SysTick_Config(test.HCLK_Frequency / 1000);

bzw:
1
SystemInit();
2
SysTick_Config(SystemCoreClock / 1000);

auf um eine Frequenz von 1khz zu bekommen. (Beide Methoden erzielen das 
selbe Ergebnis). Dazu habe ich den SysTickHandler standardmäßig 
definiert:
1
extern "C" void SysTick_Handler(void) {
2
sysTicks++;
3
}
.
Auf dem STM32F415 produziert eine anschließende Warteschleife die 
richtige Frequenz, auf dem STM32F407-DISCO Board beträgt die Wartezeit 
über 300ms. Was ist da anders? Muss ich den Clocktree noch irgendwie 
anpassen? Auf dem STM32F0 musste ich noch den PLL-Multiplier anpassen, 
das ging beim F4 nicht so wie ich das gewohnt war. Und warum 
funktioniert das auf einem Board und auf dem anderen nicht?

Danke im Vorraus!

Gruß
Gast #5345791
Lesenswert?
• ▲
▼
Schau mal, ob deine IDE dir da nicht irgendeinen StartupCode reinsetzt 
und irgendeine abstruse Clock einstellt. Diese C-Datei kannst du z.B. 
einfach mal löschen/verschieben/etc. und schau nochmal ob die Frequenz 
nun stimmt.
Moderator Persönliche Seite #5345992
Lesenswert?
• ▲
▼
Dustin L. schrieb:
> auf dem STM32F407-DISCO Board beträgt die Wartezeit über 300ms.

Keine Ahnung, welche IDE Du verwendest, aber in vielen Fällen hilft das:

In system_stm32f4xx.c Deines Projektes anpassen:

PLL_M: alt 25, neu 8

In "stm32f4xx.h" HSE_VALUE an Quarz-Frequenz anpassen, also 8000000.

Siehe auch: STM32 CooCox Installation: Clock auf 168MHz einstellen.
OP #5346030
Lesenswert?
• ▲
▼
Hallo,
ja das hab ich auch schon gefunden nach langer Suche gestern, auch das 
Config-Excel-Tool von STM. Das Problem ist, wenn ich das beides mache, 
bzw. das Config-Tool von STM nutze wird mir mein SYSCLK auf 525Mhz 
eingestellt, laut RCC_GetClocksFreq, und im Endeffekt läuft mein 
SystickTimer dann immernoch 3,125 x zu langsam. Wenn ich in dem 
Config-Tool mir eine system_stm32f4xx.c mit HSI als Eingang generieren 
lassen funktioniert alles wie es soll. Liegt das am Quarz? Oder daran 
dass ich C++ benutze? Muss ich da irgendwas auf external "C" stellen?

Vielen Dank!

Gruß

P.S: ich nutze Eclipse Oxygen CDT mit AC6 Plugin.
Moderator Persönliche Seite #5346037
Lesenswert?
• ▲
▼
Dustin L. schrieb:
> und im Endeffekt läuft mein SystickTimer dann immernoch 3,125 x zu
> langsam.

25 / 8 = 3.125

Die 25Mhz hast Du offenbar vergessen.

Hast Du denn HSE_VALUE angepasst, wie ich es Dir angeraten habe? Ich 
mache das mittlerweile nicht mehr in der Datei stm32f4xx.h, sondern in 
den Projekt-Settings (benutze EM:Bitz):

-DHSE_VALUE=8000000

da in stm32f4xx.h die 25MHz nur bedingt gesetzt werden, nämlich wenn 
HSE_VALUE undefiniert ist.

Seht auch so in stm32f4xx.h als Kommentar drin:

"Tip: To avoid modifying this file each time you need to use different 
HSE, you can define the HSE value in your toolchain compiler 
preprocessor."
OP #5346244
Lesenswert?
• ▲
▼
Hi,
danke für die vielen hilfreichen Beiträge.
Ich glaube das Problem ist, dass ich die StdPeripheralLib als externe 
Bibliothek eingebunden habe, und sie als .a-Lib einbinde. Als ich sie 
als Source in das Projekt eingefügt habe ging es. Hm eigentlich wollte 
ich die StdPeripheral-Library gerne für alle meine F4-Devices in einem 
Ordner haben.
Oder hab ich einen Denkfehler?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.