一、 STM32定時器分類眾多,按照內(nèi)核、外核標(biāo)準(zhǔn)分為兩部分:核內(nèi)定時器+核外定時器
1)核內(nèi)定時器:Systick
2)外設(shè)定時器:特定應(yīng)用定時器+常規(guī)定時器
3)特定應(yīng)用定時器:LPTIM,RTC,WTD,HRTIM
4)常規(guī)定時器:基本定時器TIM6&TIM7)、通用定時器(TIM2TIM5,TIM9TIM14)、高級定時器(TIM1&TIM8)
【常規(guī)定時器:
- 基本定時器:計劃沒有任何對外輸入/輸出,常用作時基,實現(xiàn)基本的計數(shù)和定時功能。
- 通用定時器:除了基本的定時器的時基功能外,還可以對外作輸入捕獲、輸出比較以及連接其他傳感器接口(除了編碼器和霍爾傳感器)
- 高級定時器:此類的定時器功能強(qiáng)大,除了具備通用的定時器的功能外,還包含一些與電機(jī)控制和數(shù)字電源應(yīng)用的相關(guān)功能,比方帶死區(qū)控制的互補(bǔ)信號輸出、緊急剎車關(guān)斷輸入控制。】
按照計數(shù)器的位寬來分:分為3部分
1)16bit定時器
2)32bit定時器(TIM2、TIM5)
3)24bit定時器(Systick)
二、三種 定時器 (高級&通用&基本)區(qū)別
對于STM32F4XX,三種定時器(高級、通用、基本)的區(qū)別如下表
根據(jù)以上表格,可以看出
1)高級定時器(TIM1&TIM8)是16bit,支持向上、向下、向上/向下計數(shù)模式,可以產(chǎn)生DMA請求,捕獲/比較通道有4個,支持互補(bǔ)輸出(帶可編程死區(qū)的互補(bǔ)輸出)
2)通用定時器又分為三種,32bit(TIM2&TIM5)和16bit(TIM3&TIM4),這兩種支持向上、向下、向上/向下計數(shù)模式,且都可以產(chǎn)生DMA請求,捕獲/比較通道4個,16bit(TIM9TIM14)只能向上計數(shù),不能產(chǎn)生DMA請求,捕獲/比較通道只有2個,沒有這三種都無互補(bǔ)輸出,都能應(yīng)用于定時器技術(shù),PWM輸出,輸入捕獲,輸出比較??梢哉J(rèn)為TIM9TIM14是TIM2&TIM5&TIM3&TIM4的簡單版本。
3)基本定時器(TIM6&TIM7)是16bit,支持向上、向下、向上/向下計數(shù),可以產(chǎn)生DMA請求,沒有捕獲/比較通道和互補(bǔ)輸出,只能用于驅(qū)動DAC。
三、通用定時器的特性(以TIM2.TIM3,TIM4.TIM5為例)
1)16bit/32bit遞增、遞減、遞增/遞減(中心對齊)計數(shù)模式,自動重載計數(shù)器;
2)16bit可編程預(yù)分頻器(可實時修改),用于對計數(shù)器時鐘進(jìn)行分頻,分頻系數(shù)介于1~65535之間;
3)多達(dá)4個獨立通道
--輸入捕獲
--輸出比較
--PWM生成(邊沿和中心對齊模式)
--單脈沖模式輸出
4)可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用1個定時器控制另外一個定時器)同步電路
5)如下事件發(fā)生時,可以產(chǎn)生中斷/DMA請求(6個獨立的IRQ/DMA請求生成器)
- 更新:計數(shù)器向上溢出/向下溢出,計數(shù)器初始化(通過軟件或內(nèi)部/外部觸發(fā))
- 觸發(fā)事件(計數(shù)器啟動、停止、初始化或由內(nèi)部/外部觸發(fā)計數(shù))
- 輸入捕獲
- 輸出比較
- 會吃針對定位的增量(正交)編碼器和霍爾傳感器電路
- 觸發(fā)輸入作為外部時鐘或按周期的電流管理
6)STM32的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM)
7)使用定時器預(yù)分頻器和RCC時鐘控制器預(yù)分頻器,脈沖長度和波形周期可以在幾個us到幾個毫秒之間調(diào)整。SMT32的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
四、計數(shù)器模式
通用定時器可以向上、向下、向上/向下雙向計數(shù)模式
- 向上計數(shù)模式:計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR),然后重新從0開始計數(shù)并且產(chǎn)生一個計數(shù)器向上溢出事件
- 向下計數(shù)模式:計數(shù)器從自動裝入的值(TIMx_ARR)向下計數(shù)到0,然后從自動裝入的值重新開始,并產(chǎn)生一個計數(shù)器向下溢出事件
- 向上/向下雙向計數(shù)模式(中央對齊模式)
五、定時器框圖分析
框圖可以分為以下4個部分
第一部分:定時器時鐘源
定時器時鐘可由下列時鐘源提供:
- 內(nèi)部時鐘(CK_INT)(內(nèi)部RCC提供的時鐘)
- 外部時鐘模式1:外部輸入引腳(TIx)
- 外部時鐘模式2:外部觸發(fā)輸入(ETR),僅適用于TIM2,TIM3,TIM4
- 內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另外一個定時器的預(yù)分頻器,例如可以將定時器配置為定時器2的預(yù)分頻器
第二部分:時基單元 :主要包括預(yù)分頻寄存器(TIMx_PSC)、自動重裝載寄存器(TIMx_ARR)、計數(shù)器寄存器(TIMx_CNT)
第三部分:輸入捕獲通道
第四部分:輸出比較通道
六、PWM輸出
PWM輸出主要用到定時器框圖中的第四部分:時基單元和輸出比較通道
PWM工作過程(通道1為例)
CCR1:捕獲/比較值寄存器(x=1,2,3,4),設(shè)置比較值
CCMR1:OC1M[2:0]位:對于PWM方式下,用于設(shè)置PWM模式1【110】或PWM模式2【111】
CCER:CC1P位:捕獲/比較1輸出極性,0:高電平有效,1:低電平有效
CCER:CC1E位:捕獲/比較1輸出使能,0:OC1關(guān)閉,1:OC1打開
PWM模式1;在遞增計數(shù)模式下,只要 TIMx_CNTTIMx_CCR1,通道 1 便為無效狀態(tài) (OC1REF=0),否則為有效狀態(tài) (OC1REF=1)。
PWM模式2:在遞增計數(shù)模式下,只要 TIMx_CNTTIMx_CCR1,通道 1 便為有效狀態(tài),否則為無效狀態(tài)。
注意:在 PWM 模式 1 或 PWM 模式 2 下,僅當(dāng)比較結(jié)果發(fā)生改變或輸出比較模式由“凍結(jié)”模式切換到“PWM”模式時, OCREF 電平才會發(fā)生更改
如下圖就是PWM模式2的例子
當(dāng)配置某個IO口為PWM1模式,TIMx_CNT=TIM_CCR1,通道1有效,輸出高電平。
PWM模式本質(zhì)是可以產(chǎn)生一個由TIMx_ARR寄存器確定頻率,由TIMx_CCRx寄存器確定占空比的信號。在TIMx_CCMRx寄存器中的OCxM位寫入"110-PWM模式1","111-PWM模式2",能夠獨立地設(shè)置每個OCx輸出通道產(chǎn)生一路PWM,必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最好還要設(shè)置TIMx_CR1寄存器的ARPE位,(在向上計數(shù)或中心對稱模式中)使能自動重裝載的預(yù)裝載寄存器。
注意:此處提到的“ 必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器.. .”目的是滿足一些特殊的需求,使能預(yù)裝載的意義在于可以多個通道同時輸出時,時序能準(zhǔn)確地同步。網(wǎng)上的一段有意義的解釋是:設(shè)計preload register和shadow register的好處是,所有真正需要起作用的寄存器(shadow register)可以在同一個時間(發(fā)生更新事件時)被更新為所對應(yīng)的preload register的內(nèi)容,這樣可以保證多個通道的操作能夠準(zhǔn)確地同步。如果沒有shadow register,或者preload register和shadow register是直通的,即軟件更新preload register時,同時更新了shadow register,因為軟件不可能在一個相同的時刻同時更新多個寄存器,結(jié)果造成多個通道的時序不能同步,如果再加上其它因素(例如中斷),多個通道的時序關(guān)系有可能是不可預(yù)知的。可見如果只是單通道輸出,多通道輸出時沒時序精準(zhǔn)的同步更新要求,不使能也可以的。
**七、PWM編程
**
1)要求:使用TIM14的PWM功能,輸出頻率不變,占空比變化的PWM波,驅(qū)動LED燈,達(dá)到LED的亮度由暗變亮,由從亮變暗,如此往復(fù)。
2)編程步驟
2-1,使能定時器時鐘和對應(yīng)的GPIO時鐘,
2-2 初始化IO口為復(fù)用功能輸出,并將復(fù)用功能映射到對應(yīng)的定時器
2-3 初始化定時器,ARR,PSC等
2-4 初始化輸出比較參數(shù)
2-5 使能預(yù)裝載寄存器和ARPE位
2-6 使能定時器
2-7不斷改變比較值CCRx,達(dá)到不同的占空比;
在功能函數(shù)中,我們初始化要設(shè)置好arr和psc,TIM14采用的APB1(42MHz)經(jīng)過2倍的倍頻獲得的頻率(84MHz),預(yù)分頻系數(shù)設(shè)置為84,那么PWM的頻率為1MHZ,自動重裝載值arr=500,則PWM的頻率為1MHZ/500=2kHz。
TIM14_PWM_Init(500-1,84-1); //1Mhz的計數(shù)頻率,2Khz的PWM.
u16 led0pwmval=0;
u8 dir=1;
pwm_func{
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval >300)dir=0;//實測當(dāng)TIM_CNT大于300時,亮度變化不明顯,故此處設(shè)置為300為最亮
if(led0pwmval==0) dir=1;
TIM14- >CCR1 =led0pwmval;
-
電機(jī)控制
+關(guān)注
關(guān)注
3534文章
1876瀏覽量
268740 -
STM32F4
+關(guān)注
關(guān)注
3文章
194瀏覽量
28046 -
預(yù)分頻器
+關(guān)注
關(guān)注
0文章
18瀏覽量
8131 -
PWM輸出
+關(guān)注
關(guān)注
1文章
66瀏覽量
5135 -
stm32定時器
+關(guān)注
關(guān)注
0文章
13瀏覽量
2292
發(fā)布評論請先 登錄
相關(guān)推薦
評論