Hallo, ich bin noch recht neu beim Programmieren des STM32. Nachdem ich es endlich geschafft hatte den STM32 überhaupt mit der IDE von Rowley ans Laufen zu bekommen, stehe ich nun vor dem Problem einen einfachen Software-Timer zu implementieren. Ich habe es hinbekommen, dass ich einen Timer anlegen kann und bekomme auch einen Update-Interrupt, aber irgendwie kann ich die Zeit nicht beeinflussen, mit der der Timer läuft. Mein Ziel ist es einen 100µs-Timer zu bekommen. Hier ist mal der bisherige Codeausschnitt. Vielleicht kann mir ja jemand helfen. TIM_DeInit(TIM1); TIM_TimeBaseStructure.TIM_Period = (72000000 / 10000) - 1; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); TIM_Cmd(TIM1, ENABLE);
Dazu gibts eigentlich den SysTick-Timer. Der ist in der Cortex-CPU bereits integriert. Einen ecten Timer dazu misbrauchen ist zwar machbar, aber viel zu kompliziert und verschwenderisch. Siehe FW-Lib, da gibts ein Demo "SysTick". Siehe Befehle wie: SysTick_SetReload(9000); // 9MHz (HCLK/8, default) SysTick_ITConfig(ENABLE); und Interrupt: void SysTickHandler(void) { //...; } Mehr Dateil steht in der Core Beschreibung von www.arm.com PS: Mit dem Systick-Counter kann sogar die Anzahl der ausgeführten Befehle gezählt werden. Aber das war ja hier nicht die Frage...
Markus wrote: > Mit dem Systick-Counter kann sogar die Anzahl der ausgeführten > Befehle gezählt werden. Nimmt man dafür nicht eher den PC sampler in der DWT unit? Gruß Marcus http://www.doulos.com/arm
Siehe Forum STM: http://www.st.com/mcu/forums-cat-6943-23.html&start=10 Da gibts Beispiel und Beschreibung wie mans macht.
Markus wrote: > Siehe Forum STM: > [...] > Da gibts Beispiel und Beschreibung wie mans macht. Ach so. Das ist ja nur ein einfacher Zyklenzähler (Zyklen != Befehle). Ich dachte, Du meintest irgendeine spezielle Eigenschaft des SysTick counters. Aber mein Hinweis auf den PC Sampler (DWT_PCSR) war natürlich auch nicht ganz richtig. Man müsste sich was aus den DWT_*CNT Registern zusammenbauen. Gruß Marcus http://www.doulos.com/arm
Ja, der Thread ist schon etwas älter, ich habe trotzdem noch einen Gedanken dazu: Was ist aber, wenn der SysTick schon vom FreeRTOS geklemmt wird? klar könnte man sich 'ne Meta-Ebene einziehen und den SysTick interrupt für beide Probleme verwenden, ich persönlich fände es jedoch besser dafür dann einen eigenen Timer zu verwenden. Gr. Eddy
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.