STM32 通用定时器的输出PWM功能 学习笔记
来源:互联网 发布:出版社运作知乎 编辑:程序博客网 时间:2024/06/04 17:55
首先来说,你要使用PWM模式你得先选择用哪个定时器来输出PWM吧!除了TIM6、TIM7这两个普通的定时器无法输出PWM外,其余的定时器都可以输出PWM,每个通用定时器可以输出4路PWM,高级定时器TIM1、TIM8每个可输出7路PWM。选好定时器及通道后,下一步就是要使能定时器的时钟。先贴代码,再对每条代码做详细分析。
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高(也就是选择有效电平,这里是高电平为有效电平)
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
TIM_Cmd(TIM3, ENABLE); //使能TIM3
这6句话就把PWM的通道配置好了,现在来解释每一条代码:
为什么选择的是PWM2模式呢?为什么不选择PWM1模式呢?两者又有什么区别呢?
下面我们就一探究竟,PWM1和PWM2模式是由CCMRx的OCxM来决定的,因为我们选择的是是通道2,所以设置的是OC2M,再看相关介绍OCxM[2:0]:
110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCRx时通道为有效电平,否则为无效电平;
在向下计数时,一旦TIMx_CNT>TIMx_CCRx时通道x为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCRx时通道为无效电平,否则为有效电平;
在向下计数时,一旦TIMx_CNT>TIMx_CCRx时通道x为有效电平,否则为无效电平。
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 这句就是用来选有效电平,HIGH就代表1为有效电平。
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器,
即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中。
这句话是说,CCR2中的预装载值何时被传送到当前的CNT寄存器中,这里我们选择的是当更新事件到来的时候才装载,
追踪寄存器的设置可知,原来设置的是CCMR1的OC2PE,其实还有一种方式是立即装载看手册:
OC1PE:输出比较1预装载使能(Output compare 1 preload enable) 位3
0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数值立即起作用。
1:开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,
TIMx_CCR1的预装载值在更新事件到来时被传送至当前寄存器中。
TIM_OC1PreloadConfig(),TIM_ARRPreloadConfig();这两个函数控制的是ccr1和arr的预装在使能,使能和失能的区别就是:
使能的时候这两个储存期的读写需要等待有更新事件发生时才能被改变(比如计数溢出就是更新时间)。失能的时候可以直接进行读写而没有延迟。
另外在运行当中想要改变pwm的频率和占空比调用:TIM_SetAutoreload();TIM_SetCompare1()这两个函数就可以了。
学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考。
Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2—5是通用定时器。从名字就可以看得出来主要功能上的差异。
今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的。先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。
- STM32 通用定时器的输出PWM功能 学习笔记
- STM32学习笔记:通用定时器输出PWM
- STM32学习笔记(5):通用定时器PWM输出
- STM32学习笔记(5):通用定时器PWM输出
- stm32通用定时器的PWM输出
- stm32库函数学习篇----通用定时器(PWM功能)
- STM32通用定时器的PWM
- STM32 通用定时器的定时功能 学习笔记
- STM32定时器PWM输出
- 通用定时器PWM输出
- stm32 基于TIM1定时器的PWM输出
- stm32定时器TIM2的PWM输出PB3
- 如何利用STM32通用定时器实现输出两路占空比和频率可调的互补PWM
- STM32学习笔记(4):通用定时器基本定时功能
- STM32学习笔记(4):通用定时器基本定时功能
- STM32学习笔记(4):通用定时器基本定时功能
- STM32学习笔记(4):通用定时器基本定时功能
- STM32学习笔记之:stm32通用定时器
- 64位和32位系统区别
- 搭建内网npm私服
- java获取json格式的字符串,并增添新的值
- 从0到1开启web前端学习之旅四
- @SuppressWarning
- STM32 通用定时器的输出PWM功能 学习笔记
- 近期书单
- 大数运算
- 分享一项基于Android、iOS平台的移动端身份证识别技术
- 怎样通过HTM页面直接提交到Email的表单
- Java泛型详解
- struts 校验
- EhCache缓存在集群环境中同步问题
- python2.7下安装pyinstaller