STM32F3: Definierte Anzahl von Pulsen erzeugen

#3978634
Lesenswert?

Hallo STM32-Freaks,

ich habe ein STM32F3 DISCO-Board und möchte an einem Pin eine definierte 
Anzahl von Pulsen erzeugen.
Das Tastverhältnis soll dabei 50% betragen, bei einer Frequenz von etwa 
1kHz. Der Timer wird mit dem internen Takt versorgt.

Also etwa so:

GeneratePulse(2); soll dieses Signal am Pin erzeugen:

         +---+   +---+
 --------+   +---+   +---------
         <- 1ms ->

GeneratePulse(3); entsprechend:

         +---+   +---+   +---+
 --------+   +---+   +---+   +---------

Die Funktion GeneratePulse() soll nur den Timer starten und dann sofort 
zurückkehren (sie soll nicht warten bis die Pulse erzeugt wurden).
Die Implementierung sollte nach Möglichkeit ohne Interrupts oder 
DMA-Transfers auskommen.

Kann mir jemand einen Tipp geben wie man das mit einem der verschiedenen 
Timermodule des STM32F303 hinbekommt und wie man den Timer (welcher ist 
geeignet?) konfigurieren muß?

Ich habe mir die Timer-Kapitel im Reference-Manual schon durchgelesen 
aber ich habe keine Idee ob/wie sich das realisieren läßt.

Danke schon mal !
Bernd
#3980252
Lesenswert?

Hallo Florian,

danke für den Hinweis, aber leider komme ich damit auch nicht richtig 
weiter.

ABER:
Ich denke ich werde es mal so probieren:

- TimerX im One Pulse Mode erzeugt einen n*1ms langen Puls.
- Über den Output von TimerX wird TimerY 'gegated'
- TimerY läuft im PWM Mode2 mit 50% Tastverhältnis u. 1kHz Frequenz

GeneratePulse(n) muß also das Reload Register von TimerX auf n*1ms 
setzen und den TimerX per SW im OPM starten.

Hat jemand noch eine andere/bessere Idee ?

Bernd
Gast #3980534
Lesenswert?

Beim STM32F1 und ...F4 kann man die Timer so einstellen, dass sie genau 
das machen, was du möchtest. Kann mir sehr gut vorstellen, dass der 
STM32F3 da ganz ähnlich ist. Warum liest du nicht einfach mal im 
Datenblatt nach und schaust dir an, was der so kann und wie du damit 
klar kommst?

Ich verstehe das immer nicht. So n bissl Datenblatt lesen, ist doch kein 
Schmerz. Und sehr faszinierend, wenn man das DB gelesen hat, ist auch, 
dass man es sogar selbst debuggen wenns nicht funktioniert. Dann ist 
nicht auf die Hilfe von durch die Faulheit anderer genervter Leute in 
irgendwelchen Foren angewiesen.

Geht schneller und man muss am ende vermutlich sogar noch weniger lesen 
als mit deinem aktuellen Ansatz solche Probleme zu lösen.
;)
#3984353
Lesenswert?

>In der Timer OCx IRQ  bis drei zählen und dann den Timer (oder OCx)
>stoppen.
Das kann jeder, ich wollte das eigentlich ohne IRQ oder DMA machen!
Denn wenn der IRQ (aus Gründen, die hier nicht von Belang sind,) 
ausgeschaltet ist, funtkioniert die Sache schon nicht mehr.

> Warum liest du nicht einfach mal im
>Datenblatt nach und schaust dir an, was der so kann und wie du damit
>klar kommst?
Habe ich schon. Aber ich weiß eben nicht ob mein Ansatz der Richtige ist 
oder ob es nicht noch besser/einfacher/zuverlässiger geht. Im Datenblatt 
steht auch nicht immer alles drin.

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