關(guān)于STM32 定時(shí)器 PWM 實(shí)時(shí)調(diào)節(jié)占空比時(shí),預(yù)裝載特性
圖1
圖2
糾結(jié)了N天后,也沒(méi)有辦法解決,只好乖乖的看STM32控制器手冊(cè)找找看了,結(jié)果還真找到了。
從圖中可以看到,如果使能預(yù)裝載特性,則數(shù)據(jù)會(huì)立即寫(xiě)入寄存器中,如果沒(méi)有使能,那就得等到有事件(?)發(fā)生了。這我就明白了,在調(diào)試狀態(tài)下,給寄存器賦值,不會(huì)產(chǎn)生什么影響,因?yàn)槿说姆磻?yīng)速度很慢,但是在運(yùn)行的時(shí)候,占空比是實(shí)時(shí)發(fā)生改變的,這樣就不能及時(shí)寫(xiě)入到捕獲比較寄存器中,輸出就不會(huì)改變了。所以在配置定時(shí)器輸出PWM的時(shí)候,還是乖乖的把預(yù)裝載使能吧。代碼原型如下:
/*******************************************************************************
* Function Name : TIM_OC3PreloadConfig
* Description : Enables or disables the TIMx peripheral Preload register on CCR3.
* Input : - TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM *
peripheral.
* - TIM_OCPreload: new state of the TIMx peripheral Preload
* register
* This parameter can be one of the following values:
* - TIM_OCPreload_Enable
* - TIM_OCPreload_Disable
* Output : None
* Return : None
*******************************************************************************/
void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload)
{
u16 tmpccmr2 = 0;
/* Check the parameters */
assert_param(IS_TIM_123458_PERIPH(TIMx));
assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
tmpccmr2 = TIMx->CCMR2;
/* Reset the OC3PE Bit */
tmpccmr2 &= CCMR_OC13PE_Reset;
/* Enable or Disable the Output Compare Preload feature */
tmpccmr2 = TIM_OCPreload;
/* Write to TIMx CCMR2 register */
TIMx->CCMR2 = tmpccmr2;
}
評(píng)論