STM32F4 Clocks und Systick

OP #5345694
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 8 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.