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
Hallo Bernd, wenn Du Dir die "Standart ST Libary" runterlädst, sind jede Menge guter Beispiele dabei. Ev. findest Du da was. Gruß Florian
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
Timer1 läuft One Pulse Mode mit 50% Tastverhältnis u. 1kHz Frequenz Das ist der richtige Ansatz. RCR ist dein Freund.
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. ;)
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.