Forum: Mikrocontroller und Digitale Elektronik STM32F3: Definierte Anzahl von Pulsen erzeugen


von Bernd G. (bege)


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

von Florian (Gast)


Lesenswert?

Hallo Bernd,

wenn Du Dir die "Standart ST Libary" runterlädst, sind jede Menge guter 
Beispiele dabei. Ev. findest Du da was.

Gruß
Florian

von Bernd G. (bege)


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

von Detlef K. (adenin)


Lesenswert?

Timer1 läuft One Pulse Mode mit 50% Tastverhältnis u. 1kHz Frequenz

Das ist der richtige Ansatz.

RCR ist dein Freund.

von Luigi (Gast)


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.
;)

von Michael K. (Gast)


Lesenswert?

Bernd Geyer schrieb:
> Hat jemand noch eine andere/bessere Idee ?

Ob besser ...
Timer auf auto reload und 50% PWM auf OCx
In der Timer OCx IRQ  bis drei zählen und dann den Timer (oder OCx) 
stoppen.

von Bernd G. (bege)


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.

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.