Frage zu STM32F4 Systick Timer

Gast #2864428
Lesenswert?

Hallo,

ich möchte mit dem Systick genau jede Sekunde einen Interrupt auslösen.

Hierfür habe ich den Clocktree wie im Anhang konfiguriert. HSE-Value in 
stm32f4xx.h ist 8 MHz (STM32F4 Discovery Board). Das mit dem Excel-Sheet 
erstellte File system_stm32f4xx.c habe ich in \cmsis_boot kopiert.

Laut dem File ist die Frequenz des Systick-Timers 21 MHz. Also müsste 
der Reload-Wert 0x1406F40 betragen, um genau auf eine Sekunde zu kommen.

Dieser Wert geht aber nicht, da maximal nur 0xFFFFFF geht (24 Bit).

Seltsamerweise komme ich mit

SysTick_Config(0xF6FFFF);

relativ genau auf eine Sekunde, und das OHNE den Teiler HCLK/8.
D.h.

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

ist auskommentiert. Somit müsste ja der Systick mit den vollen 168 MHz 
laufen?

Kann mir irgendjemand helfen? Irgendwo ist doch da der Wurm drin.


Vielen Dank schon mal!


Gruß

der Beginner
Angehängte Dateien:
Gast #2864531
Lesenswert?

Fehler zum Teil gefunden, ich hatte SystemInit() vergessen, damit läuft 
das Teil nur mit dem HSI (16 MHz). Nun stimmen die Frequenzen, zumindest 
wenn man RCC_GetClocksFreq() glauben darf.


Gruß
(Firma: ich AG) #3091889
Lesenswert?

Hallo;

ich habe da gemäß deinem Bild auch ein Verständnisproblem:

Ich habe die Geschwindigkeiten ähnlich konfiguriert.

Ich möchte jede msec einen Interupt.

Gemäß dem Beispiel aus der Bibliothek habe ich den Systick wie folgt 
konfiguriert.

"SysTick_Config(SystemCoreClock / 1000)" --> 1 Interupt / sec

Systemcorecklock ist aber doch 168Mhz ?!

Nun habe ich eine delay funktion mit Parameter 1000 --> 1sec

Über diesen Delay toggle ich einen GPIO Pin.
Habe die Perido mal gemessen = Interrupt kommt ca 1 ms.

Aber: Dann versehe ich das bild nicht ich dachte der systick läuft immer 
mit 1/8 Sysclock ????

Danke für deine Aufklärung.

Gruß
Gast #3091901
Lesenswert?

Natürlich, wenn man 1000Hz habe will, muss man das Register mit 
168MHz/1000 laden! Somit ist der Teiler immer die gewünschte Frequenz. 
Nur wieso willst du 1Hz mit so ner Rechenmaschine machen, mach doch 
lieber 5kHz und teile dann durch 5000, dann haste auch ne Sekunde
#3091974
Lesenswert?

Marc Rupprath schrieb:
> Wo kann ich nachsehen welcher Fall bei mir gilt / wo wird das
> eingestellt ?

Steht in Systicks Steuerregister. Default ist /8. Siehe auch
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
und alternativ sowas in der Art für /1.

Quelle: Cortex M3 Programming Manual (von ST). Die CM4 Version habe ich 
grad nicht parat, dürfte in der Hinsicht aber gleich sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren