您的位置 首页 开关

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

最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1)。反映到器件上…

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

图1

图2

纠结了N天后,也没有方法处理,只好乖乖的看STM32控制器手册找找看了,成果还真找到了。

从图中能够看到,假如使能预装载特性,则数据会当即写入寄存器中,假如没有使能,那就得比及有事情(?)产生了。这我就理解了,在调试状态下,给寄存器赋值,不会产生什么影响,因为人的反应速度很慢,但是在运转的时分,占空比是实时产生改动的,这样就不能及时写入到捕获比较寄存器中,输出就不会改动了。所以在装备定时器输出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;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/277406.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部