Forum: Mikrocontroller und Digitale Elektronik Frage zu STM32F4 Systick Timer


von ARM Beginner (Gast)


Angehängte Dateien:

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

von ARM Beginner (Gast)


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ß

von Thomas W. (diddl)


Lesenswert?

Um auf eine Sekunde zu kommen kann man sich mit einem simplen Zähler 
behelfen.

von ARM Beginner (Gast)


Lesenswert?

Oder aber die Gelegenheit nutzen um den Systick etwas kennenzulernen :)

Mittlerweile läuft auch alles :)

von Marc R. (Firma: ich AG) (mrupprath)


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ß

von (prx) A. K. (prx)


Lesenswert?

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

Bei den STM32 wahlweise mit HCLK/8 oder HCLK.

von Ingo (Gast)


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

von Marc R. (Firma: ich AG) (mrupprath)


Lesenswert?

Nochmal hallo ;-)

" Bei den STM32 wahlweise mit HCLK/8 oder HCLK."

Wo kann ich nachsehen welcher Fall bei mir gilt / wo wird das 
eingestellt ?

von Marc R. (Firma: ich AG) (mrupprath)


Lesenswert?

> Nur wieso willst du 1Hz mit so ner Rechenmaschine machen, mach doch


Ich wollte den Systemtakt schon dauerhaft auf 168 Mhz belassen,
da ich ja noch andere Dinge betreiben will, welche mit dem niedrigen 
Systemtakt nur unbefriedigend laufen .

von (prx) A. K. (prx)


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.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Das Systick Register ist nur 24 bit breit, selbst bei SYSCLMHz F/8 kann 
man bei F =168 MHz nur bis 128 *2^20 Zaehlen. Fuer  1 Hz Takt  langt das 
nicht...

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