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
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ß
Um auf eine Sekunde zu kommen kann man sich mit einem simplen Zähler behelfen.
Oder aber die Gelegenheit nutzen um den Systick etwas kennenzulernen :) Mittlerweile läuft auch alles :)
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ß
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.
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
Nochmal hallo ;-) " Bei den STM32 wahlweise mit HCLK/8 oder HCLK." Wo kann ich nachsehen welcher Fall bei mir gilt / wo wird das eingestellt ?
> 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 .
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.