STM32通用定時器(時鐘選擇,模式選擇)
1、
2、
3、
還有兩種模式控制功能:從模式控制和主模式控制。
一、 框圖
讓我們看下手冊,一開始是定時器的框圖,這里面幾乎包含了所有定時器的信息,您要是能看明白,那么接下來就不用再看別的了…
為了方便的看圖,我對里面出現(xiàn)的名詞和符號做個注解:
ETRP:分頻后的外部觸發(fā)輸入 ETRF:濾波后的外部觸發(fā)輸入
ITRx:內(nèi)部觸發(fā)x(由另外的定時器觸發(fā))
TI1F_ED:TI1的邊沿檢測器。
TI1FP1/2:濾波后定時器1/2的輸入
TRGI:觸發(fā)輸入
CK_PSC:應該叫分頻器時鐘輸入
CK_CNT:定時器時鐘。(定時周期的計算就靠它)
TIMx_CHx:TIMER的輸入腳
ICx:輸入比較x
OCx:輸出捕獲x
關于框圖還有以下幾點要注意:
1、
有陰影的寄存器,表示在物理上這個寄存器對應2個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為preload register(預裝載寄存器),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadow register(影子寄存器);(詳細請參考版主博客http://blog.ednchina.com/STM32/401461/message.aspx)
2、
在ETR何TIx輸入端有個輸入濾波器,它的作用是以采樣頻率Fdts來采樣N次進行濾波的。(具體也請參考版主博客http://blog.ednchina.com/STM32/263170/message.aspx)
3、
1、
也就是選擇CK_INT做時鐘,這個簡單,但是有一點要注意,定時器的時鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個倍頻器,當APB1的預分頻系數(shù)為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當
例如AHP 72M,APB12分頻36M,那么TIMER就是APB1的2倍頻,即72M。
怎么選擇時鐘模式1呢?只要將SMCR中SMS[2:0]弄成000就好了
SMCR
15
ETP | ECE | ETPS[1:0] | ETF[3:0] | MSM | TS[2:0] | SMS[2:0] |
2、
這個比較麻煩,時鐘源選擇的其實就是TRGI(觸發(fā)輸入),但觸發(fā)輸入選擇挺多的,共8個……??纯驁D,他們是:ITRx、TI1F_ED、
TI1FP1、TI2FP2、ETRF
ITRx的東西跟定時器的級聯(lián)有關,暫時不管他。要進入這種時鐘模式首先置SMS為111,當然這還沒完,不像內(nèi)部時鐘那樣,什么都配好了,這里你還得配置一下別的參數(shù),比如選擇TI1FP1,自然要對輸入通道1的參數(shù)配置好,這樣時鐘才能按你需要的方式進來。就是配框圖這塊
相關寄存器
CCMR1(輸入)
IC2PSC[1:0] | CC2S[1:0] | IC1F[3:0] | IC1PSC[1:0] | CC1S[1:0] |
CCER
15 14
CC4P | CC4E | CC3P | CC3E | CC2P | CC2E | CC1P | CC1E |
SMCR
15
ETP | ECE | ETPS[1:0] | ETF[3:0] | MSM | TS[2:0] | SMS[2:0] |
在CCMR1寄存器里選擇好相應的輸入(CC1S)和濾波(IC1F)后再配置好輸入極性(CCIP)然后在SMCR中選擇觸發(fā)源(TS[2:0])為TI1這樣輸入通道就配好了!最后選擇SMS為111,開啟時鐘(CR1中的CEN)。現(xiàn)在時鐘就是從TI1上的輸入了,可以接個時鐘源進行計數(shù)之類的。同理,如果要用ETR就把它相關通道配好就可以了。
3、
從圖上可以看出ETR可以直接作為時鐘輸入也可以通過觸發(fā)輸入(TRGI)來作為時鐘輸入即在時鐘模式1中觸發(fā)源選擇為ETR,兩個效果上是一樣的,看起來好像這個外部時鐘模式2沒什么用處,實際上不是的,他可以跟一些從模式(復位、觸發(fā)、門控)進行組合。比如當從模式選為觸發(fā)時,我們不可能再通過觸發(fā)源選擇ETR了,因為從模式控制器被占了,好在有外部時鐘模式2,我們選擇這種模式后就可以把兩者組合在一起完成一些功能了。
總結一下,STM32的時鐘選擇比較特別,在SFR中關于時鐘選擇配置位不再一塊,不是說兩個位在一起00、01、11就選擇了而是由
SMCR中SMS和ECE 來控制,這樣感覺可以吧內(nèi)部時鐘與外部模式2同時打開(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同時打開(SMS:111,ECE:1),實際上上述兩種方式用的都是外部時鐘2.
四、捕獲比較通道
這就是我說的定時器三個組成部分中的兩個部分了。核心是那個捕獲比較寄存器。
輸出上的特色是不直接輸出,而是有個OC1REF,這樣可以定義高有效還是低有效,輸出自己需要的有效電平。
TIMER-1:定時器上溢,中斷中取反LED.
現(xiàn)象:LED 周期2秒閃爍。
相關寄存器:
CKD[1:0] | ARPE | CMS[1:0] | DIR | OPM | URS | UDIS | CEN |
ARR
PSC
接下來的4個實驗跟輸出通道有關系
實驗2
TIMER-2:強置輸出
現(xiàn)象:LED 常亮
例子比較簡單關鍵是配好輸出通道
CCER
15 14
CC4P | CC4E | CC3P | CC3E | CC2P | CC2E | CC1P | CC1E |
CCMR(輸出)
OC2CE | OC2M[2:0] | OC2PE | OC2FE | CC2S | OC1CE | OC1M[2:0] | OC1PE | OC1FE | CC1S |
將通道1配為輸出,輸出使能,輸出極性選擇好,輸出模式選擇好就可以了。在V100實驗板上PC6-9接了LED,剛好對應著TIMER3重映射后的輸出,注意程序里的AFIO函數(shù)。
實驗3
TIMER-3:輸出比較
現(xiàn)象:LED 2秒的周期閃爍。
跟上個實驗配置大致相同,只是把輸出模式改為翻轉功能,并且CRR要配好,當CRR=CNT時翻轉輸出。
實驗4
TIMER-4:PWM輸出
現(xiàn)象:輸出4種不同占空比的PWM波,4個LED亮度不同。
實驗5
TIMER-7:單脈沖方式
現(xiàn)象:LED 只閃爍一次。
將上個實驗加一句話
TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single);
就是這個實驗。其實手冊上關于此實驗的本意是由一個外部觸發(fā)使能計數(shù)器,然后產(chǎn)生一個脈沖的,這里還沒涉及從模式所以簡化處理。
評論