Forum: Mikrocontroller und Digitale Elektronik STM32: laufenden timer durch Flankenänderung am Eingang stoppen lassen


von brechbunkt (Gast)


Lesenswert?

Hallo,

ich verwende den STM32F105 von STMicroelectronics. Ich habe einen timer 
(TIM1), der mir im up-count-mode ein schnelles Takt-Signal am Ausgang 
erzeugt. Dieses Takt-Signal soll so lange laufen, bis ich an einem 
anderen Eingang einen Pegelwandel von low nach high erhalte. Ich frage 
diesen Eingang nun endlos in einer Schleife ab, sobald der high-Pegel 
anliegt wird die Schleife verlassen und gleich sofort der timer (TIM1) 
disabled.

Das ganze funktioniert nun „fast“ immer gut. Manchmal kommt es jedoch 
auch vor, dass die Schleife zu lange braucht und ein Takt zu viel am 
Ausgang des timers erzeugt wird. Der timer also nicht schnell genug 
angehalten wurde.

Meine Frage ist nun, ob es möglich ist den Eingangspin (pin PA0) direkt 
zu nutzen, um den timer zu stoppen. Im Datenblatt habe ich unter „Using 
the break function „ und „Clearing the OCxREF signal on an external 
event“ etwas gefunden, dass das eventuell machen könnte. Aber irgendwie 
verwirren mich diese Kapitel total.

Ist es nun möglich den Eingangspin direkt zu nutzen um den timer zu 
stoppen oder muss ich doch bei meiner Endlosschleife bleiben?

von Chris (Gast)


Lesenswert?

Du kannst den Pin auf einen EXTI Interrupt legen und in der 
Service-Routine den Timer stoppen :-)

von brechbunkt (Gast)


Lesenswert?

Hallo und danke für deinen Beitrag.

das rein und raus springen in/aus der Interruptroutine würde allerdings 
mehr Taktzyklen verbraten als das abfragen des eingangs in der schleife 
(denke ich ).

von Heinz (Gast)


Lesenswert?

Hallo,
Der Vorteil der Lösung mit dem exti ist, dass nicht den Eingang pollen 
musst, daher kann dein controller andere Sachen machen anstatt nur den 
Eingang abzufragen.

Im stm32f4 kann man zwischen interrupt und event auswählen, periferien 
können auf diese events reagieren (siehe reference manual). Ob das im f1 
auch geht weiß ich nicht.

Lg

von Marc (Gast)


Lesenswert?

Ich meine mal was von einer external trigger Source gelesen zu haben in 
der Doku vom Timer des STM32 wäre das nicht was ?

mfg

von CapCom Einheit (Gast)


Lesenswert?

Das Stichwort heißt Capture!

von brechbunkt (Gast)


Lesenswert?

@Marc:
in meinem Fall ist das die einzige Zeitkritische stelle und der 
Controller muss Den ADC anschalten und gleich weiter das Signal 
ausgeben. Interrupts würde ich in diesem Fall eher kurz abschalten 
wollen.

Die external trigger source dient meines Wissens nach nur um ein Takt 
vom Eingang ein zu speisen und dem timer zur Verfügung zu stellen. In 
meinem Fall verwende ich den internen Takt.

@capcom Einheit:
irgendwie kann ich mit dem Einwurf des einzelnen Worts nichts anfangen. 
Das einzige, bei dem mir capture vorgekommen ist, war beim einlesen eine 
Eingangs für den timer (was ich ja aber gar nicht vor habe).

@all:
eine Idee fällt mir aber gerade noch ein... vielleicht könnte man aber 
auch den Flankenwechsel von meinem Eingang nutzen, einem weiteren timer 
als Taktgeber zuführen, der dann aber schon nach dem ersten, gezählten 
Takt (also genau beim Pegelwechsel, den ich bisher abgepollt habe) ein 
event generiert. Dieses event könnte dann per timer-synchronisation 
meinem eigentlichen timer zugeführt werden, der dann automatisch stoppt. 
Muss ich mal probieren, wenn ich am Wochenende wieder Daheim bin (zz 
Krankenhaus). Falls das mit dem Kapitel im Eröffnungsbeitrag allerdings 
doch genau dafür gedacht sein sollte, wäre dieses vorhaben ein wenig 
"von hinten durch die Brust" :)

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.