Softwaretimer STM32

OP #1079465
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);
Gast #1079965
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...
Persönliche Seite #1084847
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
Gast #1681104
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.