|
學(xué)習(xí)后發(fā)現(xiàn)stm32的定時(shí)器功能確實(shí)很強(qiáng)大,小總結(jié)一下方便以后使用的時(shí)候做參考。Stm32定時(shí)器一共分為三種:tim1和tim8是高級(jí)定時(shí)器,6和7是基本定時(shí)器,2—5是通用定時(shí)器。從名字就可以看得出來(lái)主要功能上的差異。今天我主要是用定時(shí)器做pwm輸出,所以總結(jié)也主要是針對(duì)pwm方面的。
先大致說(shuō)下通用和高級(jí)定時(shí)器的區(qū)別。通用的可以輸出四路pwm信號(hào)互不影響。高級(jí)定時(shí)器可以輸出三對(duì)互補(bǔ)pwm信號(hào)外加ch4通道,也就是一共七路。
所以這樣算下來(lái)stm32一共可以生成4*5+7*2=30路pwm信號(hào)。接下來(lái)還有功能上的區(qū)別:通用定時(shí)器的pwm信號(hào)比較簡(jiǎn)單,就是普通的調(diào)節(jié)占空比調(diào)節(jié)頻率(別的不常用到的沒去深究);高級(jí)定時(shí)器的還帶有互補(bǔ)輸出功能,同時(shí)互補(bǔ)信號(hào)可以插入死區(qū),也可以使能剎車功能,從這些看來(lái)高級(jí)定時(shí)器的pwm天生就是用來(lái)控制電機(jī)的。
Pwm輸出最基本的調(diào)節(jié)就是頻率和占空比。頻率當(dāng)然又和時(shí)鐘信號(hào)扯上了關(guān)系。高級(jí)定時(shí)器是掛接到APB2上,而通用定時(shí)器是掛接到APB1上的。APB1和APB2的區(qū)別就要在于時(shí)鐘頻率不同。APB2最高頻率允許72MH,而APB1最高頻率為36MHZ。這樣是不是通用定時(shí)器只最高36MHZ頻率呢,不是的;通用定時(shí)器時(shí)鐘信號(hào)完整的路線應(yīng)該是下面這樣的:
AHB(72mhz)→APB1分頻器(默認(rèn)2)→APB1時(shí)鐘信號(hào)(36mhz)→倍頻器(*2倍)→通用定時(shí)器時(shí)鐘信號(hào)(72mhz)。
在APB1和定時(shí)器中間的倍頻器起到了巨大的作用,假如紅色字體的“APB1分頻器”假如不為1(默認(rèn)是2),倍頻器會(huì)自動(dòng)將APB1時(shí)鐘頻率擴(kuò)大2倍后作為定時(shí)器信號(hào)源,這個(gè)它內(nèi)部自動(dòng)控制的不用配置。設(shè)置這個(gè)倍頻器的目的很簡(jiǎn)單就是在APB1是36mhz的情況下通用定時(shí)器的頻率同樣能達(dá)到72mhz。我用的庫(kù)函數(shù)直接調(diào)用函數(shù)SystemInit(); 這個(gè)函數(shù)之后時(shí)鐘配置好了:通用定時(shí)器和高級(jí)定時(shí)器的時(shí)鐘現(xiàn)在都是72mhz(你也可以自己再配置一下RCC讓他的頻率更低,但是不能再高了)。定時(shí)器接下來(lái)還有一個(gè)分頻寄存器:TIMX_PSC經(jīng)過(guò)他的分頻后,才是定時(shí)器計(jì)數(shù)的頻率。所以真正的時(shí)鐘頻率應(yīng)該是72mhz/(TIMX_PSC-1),我們?cè)O(shè)為tim_frepuency下面還會(huì)用到。
stm32的時(shí)鐘頻率弄得確實(shí)是很饒人的,所以關(guān)鍵就是先要把思路理清楚。時(shí)鐘的頻率弄好了下面終于可以開說(shuō)重點(diǎn)PWM了。當(dāng)然還少不了頻率:pwm主要就是控制頻率和占空比的:這兩個(gè)因素分別通過(guò)兩個(gè)寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自動(dòng)重裝寄存器,也就是計(jì)數(shù)器記到這個(gè)數(shù)以后清零再開始計(jì),這樣pwm的頻率就是tim_frequency/(TIMX_ARR-1)。在計(jì)數(shù)時(shí)會(huì)不停的和CCRX寄存器中的數(shù)據(jù)進(jìn)行比較,如果小于的話是高電平或者低電平,計(jì)數(shù)值大于CCRX值的話電平極性反相。所以這也就控制了占空比。 |
|