STM32 Timer Anzahl Update Events begrenzen

OP #7384950
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.

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

#7388501
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

Persönliche Seite #7388546
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

OP #7388561
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren