新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 關于STM32 定時器 PWM 實時調節(jié)占空比時,預裝載特性

關于STM32 定時器 PWM 實時調節(jié)占空比時,預裝載特性

作者: 時間:2016-11-09 來源:網(wǎng)絡 收藏
最近在調試項目的時候遇到一個奇怪的現(xiàn)象:在調試狀態(tài)下,給定時器捕獲比較寄存器賦不同值,能產(chǎn)生不同占空比的波形(圖1)。反映到器件上也有不同的電壓顯示,但是在設備運行的時候,就不行了(圖2)。

本文引用地址:http://butianyuan.cn/article/201611/318031.htm

圖1

圖2

糾結了N天后,也沒有辦法解決,只好乖乖的看STM32控制器手冊找找看了,結果還真找到了。

從圖中可以看到,如果使能預裝載特性,則數(shù)據(jù)會立即寫入寄存器中,如果沒有使能,那就得等到有事件(?)發(fā)生了。這我就明白了,在調試狀態(tài)下,給寄存器賦值,不會產(chǎn)生什么影響,因為人的反應速度很慢,但是在運行的時候,占空比是實時發(fā)生改變的,這樣就不能及時寫入到捕獲比較寄存器中,輸出就不會改變了。所以在配置定時器輸出PWM的時候,還是乖乖的把預裝載使能吧。代碼原型如下:

/*******************************************************************************

* 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;

}



評論


技術專區(qū)

關閉