Hallo,
ich möchte mit Hilfe der HAL Bibliothek ein PWM Signal erzeugen.
Meine Schritte bisher sind:
Initialisierungscode von CubeMX.
Aufruf der Funktionen wie folgt:
MX_TIM4_Init();
HAL_TIM_PWM_Init(&htim4);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_ALL);
Fehlt da irgendwie noch etwas?
Leuchten tut keine einzige meiner LEDs...
Öh, stellst du den irgendwo das Tastverhältnis ein? Davon sehe ich
nichts, aber vllt. bin ich für HAL zu doof.
Mit SPL muss ich dem Timer und dem jeweiligen CC Register sagen, das ich
PWM machen möchte und auch noch den PWM Pin auf Ausgang stellen, bzw.
die Alternate Function aktivieren.
HAL schrieb:> Die Funktion HAL> _TIM_MspPostInit(&htim4) sieht so aus:
Fein. Aber wo rufst du die auf? In deinem ersten Post ist davon nichts
zu sehen.
HAL schrieb:> if(htim->Instance==TIM4)
Und warum diese Einschränkung? Ist doch völlig wurscht, denn du
initialisierst ja nur ein paar Pins.
HAL schrieb:> sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;> sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;> if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) !=> HAL_OK)> {> Error_Handler();> }
Auf dieses Feature solltest du erstmal verzichten, wenns dir auf die PWM
ankommt. Wenn die läuft, kannst du mit dem Trigger rumspielen. Ist das
ein Discovery F407 Board?
Vielleicht sollte man sich nicht so sehr an den einzelnen Funktionen
aufhängen, die sind mir so von der HAL übergeben worden, bzw. von Cube
erzeugt. Insofern erwarte ich, dass die irgendwie schon tun was sie tun
sollen.
Meine Frage ziel also eher darauf, ob ich irgendetwas grundlegendes
vergessen habe, ob ich noch irgendeine Funktion im Vorwege aufrufen muss
und dergleichen...
TIM_CHANNEL_4 wird nicht funktionieren, da:
sConfigOC.Pulse = 15000 > htim4.Init.Period = 10000.
Außerdem wird dein HAL_TIM_PWM_Init(&htim4); schon in der MSP-Init davor
durchgeführt, hier überschreibst du evtl. dein korrekt initialisierten
Timer4.
Hallo,
hab endlich Zeit an dem Problem weiter zu arbeiten, aber so ganz will es
noch nicht. IRgendwas mache Ich immer noch falsch.
Der Timer scheint zu laufen, das CNT Register wird hoch gezählt. Die
LEDs machen leider garnichts.
Das PRogramm ist nun so minimalistisch wie möglich, da kann doch
eigentlich Nur eine Kleinigkeit fehlen, weiß einfach nicht was es ist...
Im Screenshot sieht man mein Programm und das Timer4Register.
Was fehlt denn noch, damit bei Erreichen der jerweiligen Timer-Werte
auch die LED mal umgeschaltet wird?
Und eine Sache verstehe ich irgendwie auch noch nicht so ganz:
Man kann die PWM ja "normal" starten und mit dem Zusat "_IT" um einen
Interrupt zu aktivieren. Kommt mir irgendwie spanisch vor, weil nutzt
man nicht gerade die PWM, um nicht dauernd Timer-Interrupts aus zu
lösen, sondern Portpins eben im Hintergrund ohne Prozessorlast um zu
schalten?