Hallo, hat hier zufällig schon jemand bei einem STM32F4-Board eine PWM
im "One Pulse Mode" in STM32CubeMX konfiguriert?
Laut Datenblatt lässt sich hier ein Delay und eine Pulslänge einstellen.
Ich habe in CubeMX wie auf dem Foto zu sehen nur die beiden Optionen
"Counter Period" und "Pulse" um etwas einzustellen ("Pulse" steht aber
hierbei NICHT dafür, dass nur ein einziger Puls ausgegeben werden soll,
der Modus "One Puls Mode" wird nämlich an anderer Stelle in der
Pin-Out-Ansicht eingestellt)
Ich gehe mal schwer davon aus, dass "Counter Period" wie sonst auch
meine Zählerschritte insgesamt sind und "Pulse" die Anzahl der
Delay-Schritte..
PWM Mode 2 steht übrigens für einen LOW-Puls bei normal High
Da mein Timer mit 84 MHz versorgt wird, habe ich bei den Einstellungen
auf dem Foto erwartet, dass 25 Schritte a 1 Mikrosekunde gezählt werden,
davon 1 mit Delay und 24 Schritte "Signal LOW".... stattdessen bekomme
ich einen LOW-Puls mit einer exakten Länge von 20 Mikrosekunden... wie
kann das sein?
PS: Delay ist übrigens bei meiner Anwendung nicht gewünscht..
Hoffe, hier hat das schon mal jemand in Cube gemacht ;)
In Prescaler, wie auch in Counter Period sind die Gewünschten Werte -1
einzutragen.
Prescaler: 84-1
Counter Period: 25-1
SW4STM32 kommt damit klar, ich schätze andere IDEs auch.
Bevor ich unpassend antworte erlaube mir eine Rückfrage:
Ist Dir wichtig, die Aufgabe zu erledigen, oder ist Dir gerade wichtig,
es mit CubeMX zu machen?
philjk schrieb:> Bei Counter Period machgt das ja Sinn, aber warum denn beim Prescaler?
Weil ein Wert von 0 im PSC den Takt eben nicht durch 0 teilt. Das wäre
ja auch fatal ;)
CubeMX hin oder her, um das Reference Manual kommst du nicht herum.
Alles andere ist nur stochern im Nebel.
CubeMX erzeugt dir nur den Initialisierungs-Code.
Den Rest mußt du schon selber machen und dazu ist das Lesen und
Verstehen der Doku unabdingbar.
Und Nein!
Du kannst mit CubeMX nicht den/die Timer im Detail konfigurieren.
Das wäre auch totaler Blödsinn, da diese Einstellungen i.d.R. erst zur
Laufzeit bekannt sind.
Cube MX wurde mir als Zukunft in der Industrie vorgestellt (keine Fehler
bei grundlegenden Bausteinen von Header und Source-Dateien etc.)
Und der generiert mir nun mal den Code unter Verwednung von HAL und ihr
könnt mir nicht erzählen, dass im Dtaenblatt was von HAL angegeben ist.
Genau das MUSS ich aber dokumentieren
zur Betonung.. es geht hier nicht um die Programmierung selbst, sondern
wirklich nur eine "Anleitung" für CubeMX.. mir war es eigentlich schon
klar, dass die Meisten das hier nicht können... und es muss möglich
sein, den Puls genau dort zu konfigurioeren. Denn es wurden keine
weiteren Usercodes verwendet und er spuckt mir einen 20
Mikrosekunden-Puls aus.... deswegen wirklich nur an die Leute, die das
wirklich schon mal mit CubeMX gemacht haben!
philjk schrieb:> Cube MX wurde mir als Zukunft in der Industrie vorgestellt (keine Fehler> bei grundlegenden Bausteinen von Header und Source-Dateien etc.)>
Marketing-Blabla
> Und der generiert mir nun mal den Code unter Verwednung von HAL und ihr> könnt mir nicht erzählen, dass im Dtaenblatt was von HAL angegeben ist.> Genau das MUSS ich aber dokumentieren
Da bist du grob im Irrtum!
CubeMX erzeugt "Initialisierungs-Code" - nicht mehr, aber auch nicht
weniger.
HAL musst du schon selbst verstehen und die Hardware ebenfalls.
das steht alles in den Datenblättern, App-Notes und Sourcecode.
Es ist alles dokumentiert.
Es gibt nur nicht "das eine Dokument" daß dich von Null auf 100 bringt.
philjk schrieb:> keine Fehler bei grundlegenden Bausteinen
Blöderweise hat sich CubeMx an diesem Punkt mit zahlreichen Mängeln
hervor getan.
> und ihr könnt mir nicht erzählen, dass im Dtaenblatt was von> HAL angegeben ist.
Das ist das nächste Problem: ein Layer zu viel. Um den generierten Code
zu verstehen, musst du die 2000 Seiten Anleitung der HAL lesen. Um den
zu verstehen, musst du 1500 Seiten Referenzhandbuch lesen.
Ohne HAL wäre der Lesestoff nur halb so umfangreich und man bekäme keine
Knoten ins Hirn.
Wenn ST die Datenblätter so strukturieren würde, wie Atmel es getan hat
dann wären die Datenblätter zwar 4000 Seiten lang, sie wären dann aber
so gut verständlich, dass niemand eine HAL bräuchte und schon gar keinen
Code Generator.
Stefanus F. schrieb:> Das ist das nächste Problem: ein Layer zu viel. Um den generierten Code> zu verstehen, musst du die 2000 Seiten Anleitung der HAL lesen. Um den> zu verstehen, musst du 1500 Seiten Referenzhandbuch lesen.>> Ohne HAL wäre der Lesestoff nur halb so umfangreich und man bekäme keine> Knoten ins Hirn.
Wenn man das nicht versteht, mangelt es an Vorwissen.
Niemand hat behauptet, daß das was für Amateure wäre.
Ein "Arduino-Ersatz" ist das schon mal gar nicht!
Stefanus F. schrieb:> Wenn ST die Datenblätter so strukturieren würde, wie Atmel es getan hat> dann wären die Datenblätter zwar 4000 Seiten lang, sie wären dann aber> so gut verständlich, dass niemand eine HAL bräuchte und schon gar> keinen Code Generator.
Das glaubst auch nur du!
Wenn man nur ein paar LEDs blinken lassen will, mag das zutreffen, aber
bei umfangreicheren Projekten kann man mit HAL -wenn man es denn
verstanden hat- eine menge Zeit sparen.
Harry L. schrieb:> Niemand hat behauptet, daß das was für Amateure wäre.> Ein "Arduino-Ersatz" ist das schon mal gar nicht!
Mir ist das klar, dieses Tool wird aber wie ein Spielzeug beworben. Den
Managern wird erzählt, dass sie ihre gut ausgebildeten Spezialisten in
die Wüste schicken können, um die eigene Software von dumme Affen
zusammen klicken zu lassen. Wenn man dann aus der Wüste (Consulting)
zurück kommt, darf man den Affenstall sauber machen.
Stefanus F. schrieb:> Harry L. schrieb:>> Niemand hat behauptet, daß das was für Amateure wäre.>> Ein "Arduino-Ersatz" ist das schon mal gar nicht!>> Mir ist das klar, dieses Tool wird aber wie ein Spielzeug beworben. Den> Managern wird erzählt, dass sie ihre gut ausgebildeten Spezialisten in> die Wüste schicken können, um die eigene Software von dumme Affen> zusammen klicken zu lassen. Wenn man dann aus der Wüste (Consulting)> zurück kommt, darf man den Affenstall sauber machen.
Das ist völliger Humbug!
Sowas behauptet niemand außer ein paar Schlaumeier in den diversen
Foren, die noch nie über die Grundkonfiguration hinaus gekommen sind.
bevor jetzt eine Diskussion ausartet, die nicht weiterbringt...
wie programmiert ihr eingesessenen Profis denn eine einfache PWM als
One-Puls in der Mikrocontroller-Familie?... vielleicht habe ich ja was
übersehen
Verwendet wird ein Kanal eines Timers als Ausgang
philjk schrieb:> bevor jetzt eine Diskussion ausartet, die nicht weiterbringt...>> wie programmiert ihr eingesessenen Profis denn eine einfache PWM als> One-Puls in der Mikrocontroller-Familie?... vielleicht habe ich ja was> übersehen> Verwendet wird ein Kanal eines Timers als Ausgang
z.B. so:
1
htim2.Instance->PSC=27;
2
htim2.Instance->CCR3=1;
3
htim2.Instance->ARR=1;
4
htim2.Instance->DIER=TIM_DIER_UIE;// enable Interrupt on Update