Hallo, an einem Timer des STM32F429 möchte ich gerne ein PWM Signal ausgeben, dessen Pulsweite ich ständig ändere. Im Datenblatt zu den Timern des µC habe ich bereits gelsen, dass man das Ändern des Dutycycles auf das Ende jeder Periode über ein Auto Preload register aktivieren kann. Ich finde jedoch im ganzen HAL und STM32 reference Manual-Wahnsinn nicht das Register, über dem sich das Auto-Preload register des CCR eines Timers aktiveren lässt. Weiß jemand hier eventuell wo ich suchen muss oder, ob sich sowas eventuell auch in CubeMX direkt konfigurieren lässt? VG
"The TIMx_CCRx registers can be programmed with or without preload registers using the OCxPE bit in the TIMx_CCMRx register." Im CCMR register: "Bit 3OC1PE: Output Compare 1 preload enable 0: Preload register on TIMx_CCR1 disabled. TIMx_CCR1 can be written at anytime, the new value is taken in account immediately. 1: Preload register on TIMx_CCR1 enabled. Read/Write operations access the preload register. TIMx_CCR1 preload value is loaded in the active register at each update event." Einfach nur nach "preload" suchen...
Ha stimmt, hätte ich auch selber drauf kommen können! Danke trotzdem... Johnny B. schrieb: > __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor_pwm); Updated das Makro automatisch am ende des Zyklus? Muss dafür nicht trotzdem irgendwo das Preload-Register aktiviert werden?
RH schrieb: > Ha stimmt, hätte ich auch selber drauf kommen können! Danke trotzdem... > > Johnny B. schrieb: >> __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor_pwm); > > Updated das Makro automatisch am ende des Zyklus? Muss dafür nicht > trotzdem irgendwo das Preload-Register aktiviert werden? Sicher bin ich nicht, aber so wie ich es verstehe ist das Compare-Register in das Du reinschreibst immer dasselbe, egal ob mit preload oder ohne. Wenn preload abgeschaltet ist/wird... __HAL_TIM_DISABLE_OCxPRELOAD(_HANDLE_, _CHANNEL_) dann wird das CCR Register wohl sofort beschrieben wenn man es mit __HAL_TIM_SET_COMPARE beschreibt und wenn preload eingeschaltet ist/wird... __HAL_TIM_ENABLE_OCxPRELOAD(_HANDLE_, _CHANNEL_) dann wird das CCR Register nach Aufruf von __HAL_TIM_SET_COMPARE wohl erst beim erreichen eines neuen Zyklus übernommen.
Du kannst auch den DMA nutzen um die DC des PWM zu ändern. Dem DMA kannst du ein Array mit verschiedenen DC übergeben und nach jeder Periode updatet er das Register.
Genderkorrekter Sprachwissenschaftler schrieb: > TIMx->CCMRx |= TIM_CCMRx_OCxPE; Habe ich gerade auch im Datenblatt des STM32 gefunden! Default ist, dass das Preload-Register ausgeschaltet ist.
RH schrieb: > Habe ich gerade auch im Datenblatt des STM32 gefunden! Default ist, dass > das Preload-Register ausgeschaltet ist. Und im Gegensatz zu dieser HAL Kacke nur eine Codezeile.
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.