Forum: Mikrocontroller und Digitale Elektronik Softwaretimer STM32


von Dirk P. (dilip01)


Lesenswert?

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);

von Markus (Gast)


Lesenswert?

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...

von Dirk P. (dilip01)


Lesenswert?

Ja, Super. Genau das habe ich gesucht. Danke.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

von Markus (Gast)


Lesenswert?

Siehe Forum STM:

http://www.st.com/mcu/forums-cat-6943-23.html&start=10

Da gibts Beispiel und Beschreibung wie mans macht.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

von Eddy Archer (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Wozu benötigst du einen separaten Software-Timer in einem RTOS???

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.