码迷,mamicode.com
首页 > 其他好文 > 详细

关于STM32 定时器 PWM 实时调节占空比时,预装载特性

时间:2014-12-18 18:20:07      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   ar   io   sp   on   数据   

 

最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1)。反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2)。 

bubuko.com,布布扣

图1

bubuko.com,布布扣

图2

纠结了N天后,也没有办法解决,只好乖乖的看STM32 控制器手册找找看了,结果还真找到了。bubuko.com,布布扣

从图中可以看到,如果使能预装载特性,则数据会立即写入寄存器中,如果没有使能,那就得等到有事件(?)发生了。这我就明白了,在调试状态下,给寄存器赋值,不会产生什么影响,因为人的反应速度很慢,但是在运行的时候,占空比是实时发生改变的,这样就不能及时写入到捕获比较寄存器中,输出就不会改变了。所以在配置定时器输出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;

}

 

 

关于STM32 定时器 PWM 实时调节占空比时,预装载特性

标签:des   style   blog   http   ar   io   sp   on   数据   

原文地址:http://www.cnblogs.com/coolkai/p/4172028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!