Forum: Mikrocontroller und Digitale Elektronik STM32 Timer verzögerter Interrupt


von Angelo (Gast)


Lesenswert?

Hi,

Hab gerde das Problem das ich nicht so richtig weis wie ich das lösen 
kann.
Ich brauche nen Interrupt 100ms verzögert nachdem ich nen Timer starte 
und soll dann auch wieder stoppen bis der Timmer wieder gestartet wird.

Mach ich das am besten mit Output Compare Mode? Wenn ja wie setzt man 
das mit CubeMX um?

von Harry L. (mysth)


Lesenswert?

Hier solltest du alles Notwendige finden:

AN4776
Application note
General-purpose timer cookbook for STM32 microcontrollers

https://www.st.com/resource/en/application_note/dm00236305-generalpurpose-timer-cookbook-for-stm32-microcontrollers-stmicroelectronics.pdf

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


Lesenswert?

Angelo schrieb:
> Hi,
>
> Hab gerde das Problem das ich nicht so richtig weis wie ich das lösen
> kann.
> Ich brauche nen Interrupt 100ms verzögert nachdem ich nen Timer starte
> und soll dann auch wieder stoppen bis der Timmer wieder gestartet wird.
>
> Mach ich das am besten mit Output Compare Mode? Wenn ja wie setzt man
> das mit CubeMX um?

Das geht auch ohne compare du musst nur dem Zähler einen entsprechenden 
Wert vorgeben und den Überlauf UE als Interrupt benutzen. Mit dem one 
pulse only und dem slave Trigger mode macht es das auch nur 1 mal bis 
zum nächsten Trigger.

von W.S. (Gast)


Lesenswert?

Angelo schrieb:
> Hab gerde das Problem das ich nicht so richtig weis wie ich das lösen
> kann.
> Ich brauche nen Interrupt 100ms verzögert nachdem ich nen Timer starte
> und soll dann auch wieder stoppen bis der Timmer wieder gestartet wird.

Ach herrje, sollen die 100 ms auf einige Nanosekunden genau kommen? Oder 
reicht es, wenn so etwa nach 100 ms (+/- ein paar ms) ein Signal kommt?

Wenn du eine Systemuhr in deiner Firmware hast, dann arbeite mit Events 
und verzögerten Events. Das Prinzip ist simpel: der Uhrtickinterrupt 
zählt nicht nur die Systemuhr hoch, sondern er guckt auch nach, ob bei 
einem der angemeldeten Events die Zeit abgelaufen ist. Wenn ja, dann 
packt er den Event in die Event-Warteschlange. Diese wiederum wird in 
der Grundschleife der Firmware abgefragt, ob da was drin ist. Wenn ja, 
wird es der Event-Behandlung übergeben. Fertig. Und dazu braucht es nur 
einen Timer für die Systemuhr. Geht für alles, was man in ms oder noch 
gröber zählt. Ist nicht dazu da, mal 2.7 µs zu warten.

W.S.

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.