Forum: Mikrocontroller und Digitale Elektronik STM32 Timer Anzahl Update Events begrenzen


von Keine A. (karabennemsi)


Lesenswert?

Gibt es bei Timern der STM32 (ich stelle diese Frage ganz allgemein) die 
Möglichkeit, dass dieser nach einer Anzahl x Überläufen sich beendet?

Manche Timer haben ein RCR Register, in diesem wird jedoch die Anzahl 
der Takte eingegeben, die kein DMA/Interrupt und somit auch kein Update 
Event erzeugen sollen. Ich hingegen suche die Möglichkeit, die Anzahl 
der Update Events zu begrenzen, habe aber noch nichts auf Hardwareeben 
entdeckt.

von Wastl (hartundweichware)


Lesenswert?

Keine A. schrieb:
> Gibt es bei Timern der STM32 (ich stelle diese Frage ganz allgemein) die
> Möglichkeit, dass dieser nach einer Anzahl x Überläufen sich beendet?

Ich würde sagen du koppelst zwei Timer, der eine läuft planmässig
über und der zweite zählt die Anzahl der Überläufe. Wenn die
Hardware nicht das Stoppen des ersten Zählers via zweiten
ermöglicht dann notfalls per Interrupt Steuerung.

von Marci W. (Gast)


Lesenswert?

Keine A. schrieb:
> Gibt es bei Timern der STM32 (ich stelle diese Frage ganz allgemein) die
> Möglichkeit, dass dieser nach einer Anzahl x Überläufen sich beendet?

Also ich würde das in einer ISR machen...

ciao

Marci

von Hans-Georg L. (h-g-l)


Lesenswert?

Den Repeat Counter benutzen aber nicht den Überlauf sondern einen 
Compare Event als Interrupt verwenden.

: Bearbeitet durch User
von Bruno V. (bruno_v)


Lesenswert?

Wenn eine ISR aufgerufen wird, mach es dort. Wenn nicht, ist der 
Zeitaufwand 0 oder so klein, dass so eine Funktionalität entweder nicht 
gebraucht oder schwierig generisch zu designen ist.

Am ehesten noch (wie wastl schrieb) mit einem zweiten Timer, der Zeit 
oder Events zählt und Tor/enable des ersten steuert, notfalls ein 
externes Gatter

von Max G. (l0wside) Benutzerseite


Lesenswert?

Lieber Karl May ;)

vermutlich willst du eine definierte Anzahl Pulse auf einen Pin 
ausgeben.
Hast du schon mal überlegt, dafür einen MOSI zu missbrauchen? Der ist 
zwar wesentlich eingeschränkter als ein richtiger Timer, könnte deine 
Aufgabe aber ggf. erfüllen.

Andere (wilde) Idee: der Timerüberlauf triggert jedesmal die DMA. Die 
DMA-Source zählt ihre Adresse hoch, während die Zieladresse auf CR1 
zeigt. Als letzten Wert schreibt die DMA dann etwas in CR1, was EN auf 0 
setzt.

Und jetzt reitet Hadschi Halef Omar los, um sich bezüglich 
Master/Slave-Timern kundig zu machen.

Grüße,

Max

von Keine A. (karabennemsi)


Lesenswert?

Max G. schrieb:
> Andere (wilde) Idee: der Timerüberlauf triggert jedesmal die DMA. Die
> DMA-Source zählt ihre Adresse hoch, während die Zieladresse auf CR1
> zeigt. Als letzten Wert schreibt die DMA dann etwas in CR1, was EN auf 0
> setzt.

Inzwischen mache ich das so tatsächlich. Ich schreibe aber den 
Prescaler, kann somit auch noch die Frequenz ändern bei jedem Übrlauf.

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.