久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 21472|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STM32入門篇之通用定時(shí)器徹底研究

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:383941 發(fā)表于 2018-8-7 19:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
               STM32入門篇之通用定時(shí)器徹底研究
  STM32的定時(shí)器功能很強(qiáng)大,學(xué)習(xí)起來也很費(fèi)勁兒,本人在這卡了5天才算看明白。寫下下面的文字送給后來者,希望能帶給你點(diǎn)啟發(fā)。在此聲明,本人也是剛?cè)腴T,接觸STM32不足10天,所以有失誤的地方請(qǐng)以手冊(cè)為準(zhǔn),歡迎大家拍磚。
   其實(shí)手冊(cè)講的還是挺全面的,只是無奈TIMER的功能太復(fù)雜,所以顯得手冊(cè)很難懂,我就是通過這樣看手冊(cè):while(!SUCCESS){看手冊(cè)}才搞明白的!所以接下來我以手冊(cè)的順序?yàn)橹骶,增加一些自己的理解,并通過11個(gè)例程對(duì)TIMER做個(gè)剖析。實(shí)驗(yàn)環(huán)境是STM103V100的實(shí)驗(yàn)板,MDK3.2+Library2.東西都不怎么新,湊合用……
   TIMER主要是由三部分組成:
1、       時(shí)基單元。
2、       輸入捕獲。
3、       輸出比較。
還有兩種模式控制功能:從模式控制和主模式控制。
一、 框圖
讓我們看下手冊(cè),一開始是定時(shí)器的框圖,這里面幾乎包含了所有定時(shí)器的信息,您要是能看明白,那么接下來就不用再看別的了…
為了方便的看圖,我對(duì)里面出現(xiàn)的名詞和符號(hào)做個(gè)注解:
  TIMx_ETR:TIMER外部觸發(fā)引腳 ETR:外部觸發(fā)輸入
ETRP:分頻后的外部觸發(fā)輸入 ETRF:濾波后的外部觸發(fā)輸入
ITRx:內(nèi)部觸發(fā)x(由另外的定時(shí)器觸發(fā))
TI1F_ED:TI1的邊沿檢測(cè)器。
TI1FP1/2:濾波后定時(shí)器1/2的輸入
TRGI:觸發(fā)輸入  TRGO:觸發(fā)輸出  
CK_PSC:應(yīng)該叫分頻器時(shí)鐘輸入
CK_CNT:定時(shí)器時(shí)鐘。(定時(shí)周期的計(jì)算就靠它)
TIMx_CHx:TIMER的輸入腳  TIx:應(yīng)該叫做定時(shí)器輸入信號(hào)x
ICx:輸入比較x  ICxPS:分頻后的ICx
OCx:輸出捕獲x  OCxREF:輸出參考信號(hào)
關(guān)于框圖還有以下幾點(diǎn)要注意:
1、       影子寄存器。
有陰影的寄存器,表示在物理上這個(gè)寄存器對(duì)應(yīng)2個(gè)寄存器,一個(gè)是程序員可以寫入或讀出的寄存器,稱為preload register(預(yù)裝載寄存器),另一個(gè)是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadow register(影子寄存器);(詳細(xì)請(qǐng)參考版主博客http://blog.ednchina.com/STM32/401461/message.aspx
2、       輸入濾波機(jī)制
在ETR何TIx輸入端有個(gè)輸入濾波器,它的作用是以采樣頻率Fdts來采樣N次進(jìn)行濾波的。(具體也請(qǐng)參考版主博客http://blog.ednchina.com/STM32/263170/message.aspx
3、       輸入引腳和輸出引腳是相同的。
   
二、時(shí)基單元
       時(shí)基單元有三個(gè)部分:CNT、PSC、ARR。CNT的計(jì)數(shù)方式分三種:向上、向下、中央對(duì)齊。通俗的說就是0—ARR、ARR—0、0—(ARR-1)—ARR—1.
     
三、時(shí)鐘源的選擇
       這個(gè)是難點(diǎn)之一。從手冊(cè)上我們看到共有三種時(shí)鐘源:
1、       內(nèi)部時(shí)鐘。
也就是選擇CK_INT做時(shí)鐘,這個(gè)簡(jiǎn)單,但是有一點(diǎn)要注意,定時(shí)器的時(shí)鐘不是直接來自APB1或APB2,而是來自于輸入為APB1或APB2的一個(gè)倍頻器, 當(dāng)APB1的預(yù)分頻系數(shù)為1時(shí),這個(gè)倍頻器不起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率;當(dāng) APB1的預(yù)分頻系數(shù)為其它數(shù)值(即預(yù)分頻系數(shù)為2、4、8或16)時(shí),這個(gè)倍頻器起作用,定時(shí)器的時(shí)鐘頻率等于APB1的頻率兩倍。
例如AHP 72M,APB12分頻36M,那么TIMER就是APB1的2倍頻,即72M。
怎么選擇時(shí)鐘模式1呢?只要將SMCR中SMS[2:0]弄成000就好了
SMCR
15    14     13   12       11 10 9  8      7   6    5   4  3    2   1  0
  
ETP  
  
ECE
ETPS[1:0]
ETF[3:0]
MSM
TS[2:0]
SMS[2:0]
2、       外部時(shí)鐘模式1
這個(gè)比較麻煩,時(shí)鐘源選擇的其實(shí)就是TRGI(觸發(fā)輸入),但觸發(fā)輸入選擇挺多的,共8個(gè)……。看框圖,他們是:ITRx、TI1F_ED、
TI1FP1、TI2FP2、ETRF
ITRx的東西跟定時(shí)器的級(jí)聯(lián)有關(guān),暫時(shí)不管他。要進(jìn)入這種時(shí)鐘模式首先置SMS為111,當(dāng)然這還沒完,不像內(nèi)部時(shí)鐘那樣,什么都配好了,這里你還得配置一下別的參數(shù),比如選擇TI1FP1,自然要對(duì)輸入通道1的參數(shù)配置好,這樣時(shí)鐘才能按你需要的方式進(jìn)來。就是配框圖這塊
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
相關(guān)寄存器
CCMR1(輸入)
  
IC2F[3:0]
  
IC2PSC[1:0]
CC2S[1:0]
IC1F[3:0]
IC1PSC[1:0]
CC1S[1:0]
CCER
15 14   13    12 11 10   9      8    7  6    5     4   3 2    1    0
  
  
  
CC4P
CC4E
CC3P
CC3E
CC2P
CC2E
CC1P
CC1E
SMCR
15    14     13   12       11 10 9  8      7   6    5   4  3    2   1  0
  
ETP  
  
ECE
ETPS[1:0]
ETF[3:0]
MSM
TS[2:0]
SMS[2:0]
CCMR1寄存器里選擇好相應(yīng)的輸入(CC1S)和濾波(IC1F)后再配置好輸入極性(CCIP)然后在SMCR中選擇觸發(fā)源(TS[2:0])為TI1這樣輸入通道就配好了!最后選擇SMS111,開啟時(shí)鐘(CR1中的CEN)。現(xiàn)在時(shí)鐘就是從TI1上的輸入了,可以接個(gè)時(shí)鐘源進(jìn)行計(jì)數(shù)之類的。同理,如果要用ETR就把它相關(guān)通道配好就可以了
3、       外部時(shí)鐘模式2
  選擇外部輸入作為時(shí)鐘,看框圖:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
從圖上可以看出ETR可以直接作為時(shí)鐘輸入也可以通過觸發(fā)輸入(TRGI)來作為時(shí)鐘輸入即在時(shí)鐘模式1中觸發(fā)源選擇為ETR,兩個(gè)效果上是一樣的,看起來好像這個(gè)外部時(shí)鐘模式2沒什么用處,實(shí)際上不是的,他可以跟一些從模式(復(fù)位、觸發(fā)、門控)進(jìn)行組合。比如當(dāng)從模式選為觸發(fā)時(shí),我們不可能再通過觸發(fā)源選擇ETR了,因?yàn)閺哪J娇刂破鞅徽剂耍迷谟型獠繒r(shí)鐘模式2,我們選擇這種模式后就可以把兩者組合在一起完成一些功能了。
總結(jié)一下,STM32的時(shí)鐘選擇比較特別,在SFR中關(guān)于時(shí)鐘選擇配置位不再一塊,不是說兩個(gè)位在一起00、01、11就選擇了而是由
SMCR中SMS和ECE 來控制,這樣感覺可以吧內(nèi)部時(shí)鐘與外部模式2同時(shí)打開(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同時(shí)打開(SMS:111,ECE:1),實(shí)際上上述兩種方式用的都是外部時(shí)鐘2.
  
四、捕獲比較通道
               
這就是我說的定時(shí)器三個(gè)組成部分中的兩個(gè)部分了。核心是那個(gè)捕獲比較寄存器。
看框圖
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
   異或那塊先不管他,好像跟編碼器有關(guān),輸入有個(gè)特色就是可以把TI的輸入搞到CC1上去,也可以把T2的輸入搞到CC1上去,其實(shí)也可以把T1搞到CC1上去同時(shí)把T1搞到CC2上去,這樣就有了后來的PWM輸入。
輸出上的特色是不直接輸出,而是有個(gè)OC1REF,這樣可以定義高有效還是低有效,輸出自己需要的有效電平。
    五、做實(shí)驗(yàn)
      
講了這么多你一定煩了吧,那么讓我們搞點(diǎn)實(shí)際的吧,通過做實(shí)驗(yàn)來熟悉定時(shí)器,用到新知識(shí)時(shí)再在其中加以介紹。
實(shí)驗(yàn)一:
TIMER-1:定時(shí)器上溢,中斷中取反LED.
現(xiàn)象:LED 周期2秒閃爍。
        主要代碼如下:
         TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=2000;            //ARR的值
         TIM_TimeBaseStructure.TIM_Prescaler=0;
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采樣分頻
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計(jì)數(shù)模式
         TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate);//時(shí)鐘分頻系數(shù)36000,所以定時(shí)器時(shí)鐘為2K
        TIM_ARRPreloadConfig(TIM2, DISABLE);//禁止ARR預(yù)裝載緩沖器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM2, ENABLE);    //開啟時(shí)鐘
         解釋一下,首先得配好ARR,這是必須地。然后配置預(yù)分頻,為什么我先配為0再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate)配呢,原來PSC也有個(gè)預(yù)裝載功能,卻不像ARR和CRR那樣有相關(guān)的位控制立即裝載或更新事件裝載。也就是說只能更新事件來裝載。在上面函數(shù)中手工產(chǎn)生了一個(gè)更新事件,使PSC立刻生效。CK_DIV暫時(shí)沒用到。計(jì)數(shù)模式配置為向上計(jì)數(shù)。然后在中斷中做下LED取反就可以了。
        溢出周期怎么算?在這個(gè)實(shí)驗(yàn)里AHB為72M,APB1為36M,所以CK_INT為72M,36000分頻變?yōu)?K.ARR=2000,所以1秒溢出1次。
相關(guān)寄存器:
         CR1                                                         
        9   8     7      6   5    4    3   2     1     0
  
  
  
CKD[1:0]
ARPE
CMS[1:0]
DIR
OPM
URS
UDIS
CEN
ARR
PSC
接下來的4個(gè)實(shí)驗(yàn)跟輸出通道有關(guān)系
實(shí)驗(yàn)2
TIMER-2:強(qiáng)置輸出
現(xiàn)象:LED 常亮
例子比較簡(jiǎn)單關(guān)鍵是配好輸出通道
CCER
15 14   13    12 11 10   9      8    7  6    5     4   3 2    1    0
  
  
  
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實(shí)驗(yàn)板上PC6-9接了LED,剛好對(duì)應(yīng)著TIMER3重映射后的輸出,注意程序里的AFIO函數(shù)。
實(shí)驗(yàn)3
TIMER-3:輸出比較
現(xiàn)象:LED 2秒的周期閃爍。
跟上個(gè)實(shí)驗(yàn)配置大致相同,只是把輸出模式改為翻轉(zhuǎn)功能,并且CRR要配好,當(dāng)CRR=CNT時(shí)翻轉(zhuǎn)輸出。
實(shí)驗(yàn)4
TIMER-4:PWM輸出
現(xiàn)象:輸出4種不同占空比的PWM波,4個(gè)LED亮度不同。
實(shí)驗(yàn)5
TIMER-7:單脈沖方式
現(xiàn)象:LED 只閃爍一次。
將上個(gè)實(shí)驗(yàn)加一句話
TIM_SelectOnePulseMode(TIM3,TIM_OPMode_Single);    //設(shè)置單脈沖模式
就是這個(gè)實(shí)驗(yàn)。其實(shí)手冊(cè)上關(guān)于此實(shí)驗(yàn)的本意是由一個(gè)外部觸發(fā)使能計(jì)數(shù)器,然后產(chǎn)生一個(gè)脈沖的,這里還沒涉及從模式所以簡(jiǎn)化處理。
涉及寄存器
        CR1                                                         
        9   8     7      6   5    4    3   2     1     0
  
  
  
CKD[1:0]
ARPE
CMS[1:0]
DIR
OPM
URS
UDIS
CEN
接下來再做兩個(gè)輸入的實(shí)驗(yàn)
實(shí)驗(yàn)6
TIMER-5:輸入捕獲模式。
現(xiàn)象:通過V100 的JOYSTICK鍵的SELECT鍵進(jìn)入捕獲,硬件仿真看CRR的值。
首先是基本的配置:ARR的值、時(shí)鐘PSC、采樣CKD、計(jì)數(shù)方式。
然后配置輸入通道。
選擇輸入捕獲模式、輸入極性、把T1配到CC1上、選好輸入的濾波跟分頻,就可以了。
講下輸入濾波功能,在此實(shí)驗(yàn)中Fdts=CK_INT/2,Fsample=Fdts/4,所以定時(shí)器時(shí)鐘為2K,所以采樣周期為4ms。才8次的話周期小于32ms的干擾會(huì)濾除。
相關(guān)寄存器
        CR1                                                         
        9   8     7      6   5    4    3   2     1     0
  
  
  
CKD[1:0]
ARPE
CMS[1:0]
DIR
OPM
URS
UDIS
CEN
PSC
ARR
CCMR1(輸入)
  
IC2F[3:0]
  
IC2PSC[1:0]
CC2S[1:0]
IC1F[3:0]
IC1PSC[1:0]
CC1S[1:0]
CCER
15 14   13    12 11 10   9      8    7  6    5     4   3 2    1    0
  
  
  
CC4P
CC4E
CC3P
CC3E
CC2P
CC2E
CC1P
CC1E
實(shí)驗(yàn)7
TIMER-6:PWM輸入
現(xiàn)象:由TIMER3輸出通道1產(chǎn)生一路周期2秒占空比50%的PWM波,飛線到TIMER4的輸入通道1,有TIMER4來測(cè)量該P(yáng)WM得周期和占空比。
在做實(shí)驗(yàn)之前引入三種從模式控制:復(fù)位、觸發(fā)、門控。通過SMCR選擇后可以進(jìn)入這三種從模式
SMCR
15    14     13   12       11 10 9  8      7   6    5   4  3    2   1  0
  
ETP  
  
ECE
ETPS[1:0]
ETF[3:0]
MSM
TS[2:0]
SMS[2:0]
SMS:100      101      110
     復(fù)位     門控     觸發(fā)
所謂從模式簡(jiǎn)單理解就是受控于別人了,包括何時(shí)啟動(dòng)、何時(shí)停止、何時(shí)復(fù)位。相關(guān)作用請(qǐng)看手冊(cè)。提示一點(diǎn)就是進(jìn)入這三種模式后時(shí)鐘是誰的問題?肯定不是外部時(shí)鐘1了,可以是內(nèi)部時(shí)鐘和外部時(shí)鐘2.
接著看實(shí)驗(yàn),PWM方式的原理是這樣的,如前文提到過輸入時(shí)可以把T1映射到CC1上去同時(shí)映射到CC2上,將CC1和CC2的捕獲邊沿搞成相反的,比如CC1捕獲T1上升沿,CC2捕獲T1下降沿,還要再設(shè)置T1為復(fù)位從模式,上升沿有效,這樣T1上升沿后計(jì)數(shù)器開始計(jì)數(shù)。下降沿CC2捕獲發(fā)生,此為PWM占空比,在來一個(gè)上升沿,CC1捕獲發(fā)生此為PWM周期。注意CC1捕獲的第一次無效。
這是從模式跟輸入捕獲的一種組合使用,從模式還可以跟輸出比較組合使用。比如手冊(cè)上的單脈沖實(shí)驗(yàn)。
接著做4個(gè)實(shí)驗(yàn)跟定時(shí)器的級(jí)聯(lián)和定時(shí)器同步有關(guān)系,在實(shí)驗(yàn)前先得說說主模式的問題。在CR2寄存器中的MMS位決定了定時(shí)器的主模式方式,即決定TRGO.幾種方式可以參看手冊(cè)。要說明一點(diǎn)就是一個(gè)定期器既可以是主模式同時(shí)它也是從模式,這就好像你是一個(gè)中層干部一樣,既可以領(lǐng)導(dǎo)別人同時(shí)又被別人領(lǐng)導(dǎo),這個(gè)不沖突的。
簡(jiǎn)單介紹下4個(gè)實(shí)驗(yàn)。
實(shí)驗(yàn)8
TIMER-8: TIMER2作為TIMER3的分頻器.
現(xiàn)象:LED以10秒周期閃爍。
TIMER3配置為PWM輸出,但是始終有TIMER2的溢出時(shí)間頻率來提供,其溢出頻率為100Hz所以TIMER3PWM的周期為10S.
實(shí)驗(yàn)9
TIMER-9:TIMER2來使能TIMER3.
現(xiàn)象:LD1前15秒以1秒的周期閃爍,后15秒熄掉,然后下個(gè)15秒再閃爍如此循環(huán)。
在這個(gè)實(shí)驗(yàn)里TIEMR3輸出一個(gè)周期1秒的PWM波,仍然驅(qū)動(dòng)LD1閃爍。同時(shí)從模式配成門控模式,TIEMR2將OC1作為TRGO,OC1是一個(gè)周期30S占空比50%的PWM波。
實(shí)驗(yàn)10
TIMER-10: IMER2啟動(dòng)TIMER3
現(xiàn)象:上電后延遲15秒LD1以1秒的周期閃爍。
此實(shí)驗(yàn)跟上個(gè)實(shí)驗(yàn)配置差不多只要把TIMER3有門控改為觸發(fā)方式即可。
實(shí)驗(yàn)11
TIMER-11: TIMER4的通道1同時(shí)出發(fā)TIMER4和TIMER3兩個(gè)定時(shí)器
現(xiàn)象:按下JOYSTICK 的“選擇”鍵同時(shí)出發(fā)兩個(gè)定時(shí)器開始。同時(shí)TIMER3驅(qū)動(dòng)LD1以1秒周期閃爍。
以上4個(gè)實(shí)驗(yàn)實(shí)際上是主模式和從模式的組合以及主模式和外部時(shí)鐘1的組合。其實(shí)根據(jù)自己的需要還可以做出多種組合,這就是STM32定時(shí)器強(qiáng)大的地方。
  最后多熟悉下庫函數(shù),關(guān)于TIM的庫(2.0版本),本人認(rèn)為有兩點(diǎn)錯(cuò)誤:
1、       TIM.C中CR1_CounterMode_Mask的值為0x039F應(yīng)該改為0x038F這樣才能覆蓋CR1的DIR位。
2、       TIM.C中TIM_PrescalerConfig函數(shù)原文
      if (TIM_PSCReloadMode ==TIM_PSCReloadMode_Immediate)
  {
    TIMx->EGR |= TIM_EventSource_Update;
  }
  else
  {
TIMx->EGR &= TIM_EventSource_Update;
  }
  紅色的這句好像不對(duì)吧?應(yīng)該TIMx->EGR &=~ TIM_EventSource_Update;才對(duì)吧。
   

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:569885 發(fā)表于 2020-1-8 14:40 | 只看該作者
圖沒顯示出來,引用的博客我這里也打不開
回復(fù)

使用道具 舉報(bào)

板凳
ID:337139 發(fā)表于 2020-9-29 14:48 | 只看該作者
不知道是哪種設(shè)置題 ,直接引用是用不了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中国人pornoxxx麻豆 | 国产成人午夜精品影院游乐网 | 中文字幕第十页 | 精精国产xxxx视频在线野外 | 久久精品亚洲 | 午夜视频免费在线观看 | 欧美午夜激情在线 | 精品一区二区三区在线观看 | 精品欧美乱码久久久久久 | 中文字幕人成人 | 午夜在线视频 | 国产精品一区在线观看你懂的 | 日韩一| 久久免费精品 | 欧美日韩在线免费 | 亚洲激情一区二区 | 国产一区二区在线免费 | 成人午夜黄色 | 欧美在线一区二区三区 | 无码日韩精品一区二区免费 | 国产精品一区二区免费 | 成人在线国产 | 亚洲一区视频在线 | 久久久久亚洲国产| 国产精品久久久久久久久免费桃花 | 久久精品亚洲成在人线av网址 | 古装三级在线播放 | 中文字幕二区 | 一区二区三区视频在线观看 | 美国一级片在线观看 | 久久精品一区二区 | 毛片网站在线观看 | 日韩欧美在线观看视频 | 四虎影院久久 | 欧美一级毛片在线播放 | 婷婷色国产偷v国产偷v小说 | 超碰免费在 | 在线三级电影 | 国产在线视频一区二区董小宛性色 | 热久久999 | 日韩在线免费看 |