新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于STM32 定時(shí)器 PWM 實(shí)時(shí)調(diào)節(jié)占空比時(shí),預(yù)裝載特性

關(guān)于STM32 定時(shí)器 PWM 實(shí)時(shí)調(diào)節(jié)占空比時(shí),預(yù)裝載特性

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

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

圖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)論


技術(shù)專(zhuān)區(qū)

關(guān)閉