最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图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;

}

最新文章

  1. C#中怎样实现序列化和反序列化
  2. PHP7 redis扩展安装
  3. 【bzoj1076】[SCOI2008]奖励关
  4. Contains Duplicate III 下标范围<=k 值范围<=t
  5. 浅析selenium的page object模式
  6. ROS2.9.27架设网吧软路由实战篇之端口映射与回流
  7. 在Android4.4上新增加keycode
  8. 解决myeclipse每次启动注册码过期输入注册码
  9. windows服务控制类
  10. openerp 中如何方便对搜索时间段
  11. 第一个Servlet程序及分析
  12. OC Block网上转载
  13. Redis之(二)数据类型及存储结构
  14. JS的函数节流(throttle)
  15. DAY01、计算机组成及操作系统
  16. [luogu5003]跳舞的线【动态规划】
  17. C# 实现身份验证之WEB Service篇
  18. C和C指针小记(十六)-动态内存分配
  19. linux编写脚本检测本机链接指定IP段是否畅通
  20. 【洛谷p1507】NASA的食物计划

热门文章

  1. DataView操作DataTable
  2. Netbeans IDE配置
  3. power desinger 学习笔记<八>
  4. animationWithKeyPath键值对
  5. Spring中@Autowired注解与自动装配
  6. C#中Predicate的一点理解
  7. APP被Rejected 的各种原因翻译(转)
  8. 页面插入Flash方式
  9. JQUERY1.9学习笔记 之可见性过滤器(二) 可见选择器
  10. 01:A+B问题