标题:
STM32 PWM输出总结
[打印本页]
作者:
9geren
时间:
2014-3-26 14:41
标题:
STM32 PWM输出总结
学习后发现
stm32
的定时器功能确实很强大
,
小总结一下方便以后使用的时候做参考。
Stm32
定时器一共分为三种:
tim1
和
tim8
是高级定时器,
6
和
7
是基本定时器,
2
—
5
是通用定时器。从名字就可以看得出来主要功能上的差异。今天我主要是用定时器做
pwm
输出,所以总结也主要是针对
pwm
方面的。
先大致说下通用和高级定时器的区别。通用的可以输出四路
pwm
信号互不影响。高级定时器可以输出三对互补
pwm
信号外加
ch4
通道,也就是一共七路。
所以这样算下来
stm32
一共可以生成
4*5+7*2=30
路
pwm
信号。接下来还有功能上的区别:通用定时器的
pwm
信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的
pwm
天生就是用来控制电机的。
Pwm
输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到
APB2
上,而通用定时器是挂接到
APB1
上的。
APB1
和
APB2
的区别就要在于时钟频率不同。
APB2
最高频率允许
72MH
,而
APB1
最高频率为
36MHZ
。这样是不是通用定时器只最高
36MHZ
频率呢,不是的;通用定时器时钟信号完整的路线应该是下面这样的:
AHB
(
72mhz
)→
APB1
分频器(默认
2
)
→
APB1
时钟信号(
36mhz
)→
倍频器(
*2
倍)
→通用定时器时钟信号(
72mhz
)。
在
APB1
和定时器中间的倍频器起到了巨大的作用,假如红色字体的“
APB1
分频器
”假如不为
1
(默认是
2
),倍频器会自动将
APB1
时钟频率扩大
2
倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在
APB1
是
36mhz
的情况下通用定时器的频率同样能达到
72mhz
。我用的库函数直接调用函数
SystemInit();
这个函数之后时钟配置好了:通用定时器和高级定时器的时钟现在都是
72mhz
(你也可以自己再配置一下
RCC
让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:
TIMX_PSC
经过他的分频后,才是定时器计数的频率。所以真正的时钟频率应该是
72mhz/(TIMX_PSC-1)
,我们设为
tim_frepuency
下面还会用到。
stm32
的时钟频率弄得确实是很饶人的,所以关键就是先要把思路理清楚。时钟的频率弄好了下面终于可以开说重点
PWM
了。当然还少不了频率:
pwm
主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:
TIMX_ARR
和
TIMX_CCRX
。
ARR
寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样
pwm
的频率就是
tim_frequency/
(
TIMX_ARR-1
)。在计数时会不停的和
CCRX
寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于
CCRX
值的话电平极性反相。所以这也就控制了占空比。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1