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