在原子哥的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. java mod %区别_Java中 % 与Math.floorMod() 区别详解
  2. python 中的*(星号)和**(双星号)简介
  3. windows-DLL注入
  4. 后台开发经典书籍--代码大全
  5. Python 输出的空格问题
  6. 【Python】又一个Jupyter神器,操作Excel自动生成Python代码!
  7. 软件行业为什么那么多项目经理
  8. 解决Ubuntu18.04没有声音(简便且终极方法)
  9. oracle JOB 查询 添加 修改 删除
  10. Shell脚本学习-阶段九-数据库被攻击恢复
  11. android图片拖动放大_Android拖放
  12. python联网斗地主_局域网联机斗地主
  13. 人工智能 - NBA球星产生式系统
  14. html/css椭圆运动
  15. matlab 股票分时图_利用Matlab读取股市数据
  16. html自动弹图片,JS自动适应的图片弹窗实例
  17. TensorFlow 2.9的零零碎碎(六)-模型训练和评价
  18. Java正则表达式简单入门
  19. 嵩天python爬虫百度云盘_基于MOOC嵩天《Python网络爬虫与信息提取》视频学习记录——第一周:requests库...
  20. 快捷键大全---windows , idea , linux , 浏览器

热门文章

  1. ZIP压缩文件的打开密码和自动加密有什么不同?
  2. 深圳达内:用事实打破一切谣言
  3. rysnc(+inotify)
  4. python中浮点数和小数的区别_Python中的浮点数和小数
  5. Python爬取南京地铁微博发布客流数据并进行分析
  6. 贪吃蛇代码java_贪吃蛇 java代码
  7. present/push的恩怨情仇
  8. JPGNet: Joint Predictive Filtering and Generative Network for Image Inpainting
  9. 静态页面与动态页面的web访问
  10. acm-sdut-团战可以输、提莫必须死