在原子哥的PWM输出例程中,感觉对捕获/比较寄存器(CCR)的设置不太合理。

原子哥的主函数如下,

TIM_SetCompare函数设置CCR2的值,从而改变PWM的占空比,但是在上面PWM_Init函数中,最后一段代码是

TIM_Cmd(TIM3, ENABLE);

所以执行完PWM_Init函数后,定时器已经开始工作,但是此时的CCR2寄存器的值我们并没有设置过,所以应该是默认值0,即前面若干个PWM周期的占空比不是我们想要得到的。只有函数执行到上图红色方框中的TIM_SetCompare2函数后,才会设置目标CCR2的值,从而得到目标占空比。

下面是STM32 固件库中TIM_OC2Init函数的源码(截取),可以看到,在初始化TIM_OCInitTypeDef结构体的时候,通过TIM_Pulse成员变量设置了CCR2 的值,但是在原子哥的例程中并没有该结构体变量的初始化。并且在TIM_OC2Init函数之前调用TIM_SetCompare函数设置CCR2的值是无效的,因为TIM_OC2Init函数中会以默认值重新赋给CCR2寄存器。

  /* Write to TIMx CR2 */TIMx->CR2 = tmpcr2;/* Write to TIMx CCMR1 */TIMx->CCMR1 = tmpccmrx;/* Set the Capture Compare Register value */TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;/* Write to TIMx CCER */TIMx->CCER = tmpccer;

如果想要精准地控制PWM输出,需要注意以下两点:

1、CCRx寄存器的初始化时间

2、定时器的开启时间

STM32 PWM CCR配置解析相关推荐

  1. stm32 PWM互补输出

    stm32高级定时器例子-stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体,用于定时器基础参数设置,与TIM_TimeBaseInit函数配合 ...

  2. WS2812灯珠(三)-- STM32 PWM+DMA方式驱动

    WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 文章目录 WS2812灯珠(三)-- STM32 PWM+DMA方式驱动 一.理论 二.代码实践 一.理论 PWM输出就是对外输出脉宽( ...

  3. STM32 PWM输出实验

    定时器用来产生PWM输出: STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通 ...

  4. stm32 PWM输入捕获

    普通的输入捕获,可使用定时器的四个通道,一路捕获占用一个捕获寄存器. PWM输入,只能使用两个通道,通道1和通道2. 一路PWM输入占用两个捕获寄存器,一个捕获周期,一个捕获占空比. 这里,用通用定时 ...

  5. 一、STM32启动文件详细解析

    一.STM32启动文件详细解析 STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例 [cpp] view plain copy ;************ ...

  6. STM32 PWM控制舵机

    目录 舵机简介 舵机工作原理 什么是PWM 硬件连线 代码 实现结果 总结 舵机简介 舵机是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件.分有:①电动舵机,由电动机.传动部件和离合器组成. ...

  7. STM32 GPIO的配置寄存器(CRL、CRH)输入输出模式配置

    STM32 GPIO的配置寄存器(CRL.CRH)输入输出模式配置 1.学会使用寄存器设定所需IO的方向,学会配置CRL.CRH 2.理解如下代码的含义 //IO方向设置 #define DS18B2 ...

  8. STM32 GPIO的配置寄存器(CRL、CRH)快速学习

    1.问题 在使用STM32的时候配置GPIO是最常见的操作,可以使用比较简单明白的库函数配置,但很繁杂.使用寄存器的方式可以快速配置,对于同一个IO口的输入输出都需要使用到的时候,比如IIC通讯的SD ...

  9. STM32 PWM控制舵机——原理、接线、源程序

    STM32--PWM 控制舵机 通用定时输出PWM PWM的工作原理 PWM的模式 TIM_OCMode_PWM1 (边沿对齐模式) TIM_OCMode_PWM2(中央对齐模式) 占空比 舵机 实物 ...

最新文章

  1. js--webSocket入门
  2. Service Mesh — APIGW vs ServiceMesh
  3. c语言结构体老师信息管理系统,C语言课程设计职工信息管理系统结构体数组实现程序源代码.doc...
  4. 系统试运行总结报告_制药行业计算机化系统验证与数据可靠性实施精要
  5. Tomcat server.xml配置示例
  6. 【C++基础】异常处理机制概要
  7. 将检索出来的列按逗号拼接起来
  8. [ NOIP 2014 ] TG
  9. week one(1)—What is machine learning?
  10. Num37 spring 事务 ssh整合
  11. [原创]Tsys 2.0 beta 官方版无法使用自定义SQ
  12. SoapUI SoapUI接口测试之编码设置
  13. Android中什么是Dex文件
  14. 华为荣耀9刷Android9.0,华为荣耀手机,安卓9.0/EMUI9.0升级常见问题大汇总!
  15. multiparty 和 busboy
  16. linux的网易云音乐界面不显示,linux mint19.1解决网易云音乐安装后打不开的问题...
  17. 【工具】URLEncode
  18. GoLang panic 用法
  19. Error Based Injection和sql注入函数
  20. 自控力lesson14书摘——克服‘紧张症’的法则

热门文章

  1. 手机发送短消息(转)
  2. python explode(0、0.2、0、0)_Python 2
  3. wordpress vue_使用Vue构建WordPress插件
  4. SAS与固定收益证券有关的函数(1)
  5. Excel插入数据透视表,实现合并同类项(office2007)
  6. micropython遵循的是什么开源协议_ueos
  7. Vmware ESX 5.0 安装与部署
  8. 关于保存数据时,提取数据特征的数量和样本数不匹配的原因
  9. 怎么使用flashfxp,偷偷告诉你怎么使用flashfxp
  10. android的adb是什么,什么是ADB