<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 學(xué)習(xí)筆記_TIME定時(shí)器詳解2

          STM32 學(xué)習(xí)筆記_TIME定時(shí)器詳解2

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          STM32的定時(shí)器功能很強(qiáng)大,學(xué)習(xí)起來(lái)也很費(fèi)勁兒.

          其實(shí)手冊(cè)講的還是挺全面的,只是無(wú)奈TIMER的功能太復(fù)雜,所以顯得手冊(cè)很難懂,我就是通過(guò)這樣看手冊(cè):while(!SUCCESS){看手冊(cè)…}才搞明白的!所以接下來(lái)我以手冊(cè)的順序?yàn)橹骶€,增加一些自己的理解,并通過(guò)11個(gè)例程對(duì)TIMER做個(gè)剖析。實(shí)驗(yàn)環(huán)境是STM103V100的實(shí)驗(yàn)板,MDK3.2 +Library2.東西都不怎么新,湊合用……

          本文引用地址:http://www.ex-cimer.com/article/201611/321890.htm

          TIMER主要是由三部分組成:

          1、時(shí)基單元。

          2、輸入捕獲。

          3、輸出比較。

          還有兩種模式控制功能:從模式控制和主模式控制。

          一、 框圖

          讓我們看下手冊(cè),一開(kāi)始是定時(shí)器的框圖,這里面幾乎包含了所有定時(shí)器的信息,您要是能看明白,那么接下來(lái)就不用再看別的了…

          為了方便的看圖,我對(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è)是程序員看不見(jiàn)的、但在操作中真正起作用的寄存器,稱為shadow register(影子寄存器);(詳細(xì)請(qǐng)參考版主博客http://blog.ednchina.com/STM32/401461/message.aspx)

          2、輸入濾波機(jī)制

          在ETR何TIx輸入端有個(gè)輸入濾波器,它的作用是以采樣頻率Fdts來(lái)采樣N次進(jìn)行濾波的。(具體也請(qǐng)參考版主博客http://blog.ednchina.com/STM32/263170/message.aspx)

          3、輸入引腳和輸出引腳是相同的。

          二、時(shí)基單元

          時(shí)基單元有三個(gè)部分:CNT、PSC、ARR。CNT的計(jì)數(shù)方式分三種:向上、向下、中央對(duì)齊。通俗的說(shuō)就是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í)鐘不是直接來(lái)自APB1或APB2,而是來(lái)自于輸入為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è)……??纯驁D,他們是:ITRx、TI1F_ED、

          TI1FP1、TI2FP2、ETRF

          ITRx的東西跟定時(shí)器的級(jí)聯(lián)有關(guān),暫時(shí)不管他。要進(jìn)入這種時(shí)鐘模式首先置SMS為111,當(dāng)然這還沒(méi)完,不像內(nèi)部時(shí)鐘那樣,什么都配好了,這里你還得配置一下別的參數(shù),比如選擇TI1FP1,自然要對(duì)輸入通道1的參數(shù)配置好,這樣時(shí)鐘才能按你需要的方式進(jìn)來(lái)。就是配框圖這塊

          相關(guān)寄存器

          CCMR1(輸入)

          IC2F[3:0]

          IC2PSC[1:0]

          CC2S[1:0]

          IC1F[3:0]

          IC1PSC[1:0]

          CC1S[1:0]

          CCER

          15 14131211 109 87 6543210

          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這樣輸入通道就配好了!最后選擇SMS為111,開(kāi)啟時(shí)鐘(CR1中的CEN)?,F(xiàn)在時(shí)鐘就是從TI1上的輸入了,可以接個(gè)時(shí)鐘源進(jìn)行計(jì)數(shù)之類的。同理,如果要用ETR就把它相關(guān)通道配好就可以了。

          3、外部時(shí)鐘模式2

          選擇外部輸入作為時(shí)鐘,看框圖:

          從圖上可以看出ETR可以直接作為時(shí)鐘輸入也可以通過(guò)觸發(fā)輸入(TRGI)來(lái)作為時(shí)鐘輸入即在時(shí)鐘模式1中觸發(fā)源選擇為ETR,兩個(gè)效果上是一樣的,看起來(lái)好像這個(gè)外部時(shí)鐘模式2沒(méi)什么用處,實(shí)際上不是的,他可以跟一些從模式(復(fù)位、觸發(fā)、門控)進(jìn)行組合。比如當(dāng)從模式選為觸發(fā)時(shí),我們不可能再通過(guò)觸發(fā)源選擇ETR了,因?yàn)閺哪J娇刂破鞅徽剂?,好在有外部時(shí)鐘模式2,我們選擇這種模式后就可以把兩者組合在一起完成一些功能了。

          總結(jié)一下,STM32的時(shí)鐘選擇比較特別,在SFR中關(guān)于時(shí)鐘選擇配置位不再一塊,不是說(shuō)兩個(gè)位在一起00、01、11就選擇了而是由

          SMCR中SMS和ECE 來(lái)控制,這樣感覺(jué)可以吧內(nèi)部時(shí)鐘與外部模式2同時(shí)打開(kāi)(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同時(shí)打開(kāi)(SMS:111,ECE:1),實(shí)際上上述兩種方式用的都是外部時(shí)鐘2.

          四、捕獲比較通道

          這就是我說(shuō)的定時(shí)器三個(gè)組成部分中的兩個(gè)部分了。核心是那個(gè)捕獲比較寄存器。

          看框圖

          異或那塊先不管他,好像跟編碼器有關(guān),輸入有個(gè)特色就是可以把TI的輸入搞到CC1上去,也可以把T2的輸入搞到CC1上去,其實(shí)也可以把T1搞到CC1上去同時(shí)把T1搞到CC2上去,這樣就有了后來(lái)的PWM輸入。

          輸出上的特色是不直接輸出,而是有個(gè)OC1REF,這樣可以定義高有效還是低有效,輸出自己需要的有效電平。

          五、做實(shí)驗(yàn)

          講了這么多你一定煩了吧,那么讓我們搞點(diǎn)實(shí)際的吧,通過(guò)做實(shí)驗(yàn)來(lái)熟悉定時(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í)鐘為2KTIM_ARRPreloadConfig(TIM2, DISABLE);//禁止ARR預(yù)裝載緩沖器TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_Cmd(TIM2, ENABLE); //開(kāi)啟時(shí)鐘
          解釋一下,首先得配好ARR,這是必須地。然后配置預(yù)分頻,為什么我先配為0再用TIM_PrescalerConfig(TIM2,0x8C9F,TIM_PSCReloadMode_Immediate)配呢,原來(lái)PSC也有個(gè)預(yù)裝載功能,卻不像ARR和CRR那樣有相關(guān)的位控制立即裝載或更新事件裝載。也就是說(shuō)只能更新事件來(lái)裝載。在上面函數(shù)中手工產(chǎn)生了一個(gè)更新事件,使PSC立刻生效。CK_DIV暫時(shí)沒(méi)用到。計(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

          接下來(lái)的4個(gè)實(shí)驗(yàn)跟輸出通道有關(guān)系

          實(shí)驗(yàn)2

          TIMER-2:強(qiáng)置輸出

          現(xiàn)象:LED 常亮

          例子比較簡(jiǎn)單關(guān)鍵是配好輸出通道

          CCER

          15 14131211 109 87 6543210

          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è)脈沖的,這里還沒(méi)涉及從模式所以簡(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

          接下來(lái)再做兩個(gè)輸入的實(shí)驗(yàn)

          實(shí)驗(yàn)6

          TIMER-5:輸入捕獲模式。

          現(xiàn)象:通過(guò)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 14131211 109 87 6543210

          CC4P

          CC4E

          CC3P

          CC3E

          CC2P

          CC2E

          CC1P

          CC1E


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();