stm32的定時器輸入捕獲與輸出比較精編版_第1頁
stm32的定時器輸入捕獲與輸出比較精編版_第2頁
stm32的定時器輸入捕獲與輸出比較精編版_第3頁
stm32的定時器輸入捕獲與輸出比較精編版_第4頁
stm32的定時器輸入捕獲與輸出比較精編版_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余13頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、最新資料推薦stm32的定時器輸入捕獲與輸出比較(2015-09-28 09:26:24)轉(zhuǎn)載標(biāo)簽: 分類: stm32it明確一點(diǎn)對比 AD的構(gòu)造,stm32有3個AD,每個AD有很多通道,使用哪個通道就配置成哪個通道,這里定時器也如此,有很多定時器TIMx,每個定時器有很多CHx(通道),可以配置為輸入捕捉測量頻率用,也可以配置為輸出比較 輸出PWM使用輸入捕捉:可以用來捕獲外部事件,并為其賦予時間標(biāo)記以說明此事件的發(fā)生時刻。外部事件發(fā)生的觸發(fā)信號由單片機(jī)中對應(yīng)的引腳輸入(具體可以參考單片機(jī)的datasheet),也可以通過模擬比較器單元來實(shí)現(xiàn)。時間標(biāo)記可用來計算頻率,占空比及信號的其他特

2、征, 以及為事件創(chuàng)建日志, 主要是用來測 量外部信號的頻率。輸出比較:定時器中計數(shù)寄存器在初始化完后會自動的計數(shù)。從bottom 計數(shù)到top。并且 有不同的工作模式。另外還有個比較寄存器。一旦計數(shù)寄存器在從bottom 到top計數(shù)過程中與比較寄存器匹配則會產(chǎn)生比較中斷(比較中斷使能的情況下)。然后根據(jù)不同的工作模式計數(shù)寄存器將清零或者計數(shù)到top值。51、朋友,可以解釋一下輸入捕獲的工作原理不?很簡單,當(dāng)你設(shè)置的捕獲開始的時候,cpu會將計數(shù)寄存器的值復(fù)制到捕獲比較寄存器 中并開始計數(shù),當(dāng)再次捕捉到電平變化時,這是計數(shù)寄存器中的值減去剛才復(fù)制的值就是這 段電平的持續(xù)時間,你可以設(shè)置上升沿捕

3、獲、下降沿捕獲、或者上升沿下降沿都捕獲。它沒 多大用處,最常用來測頻率。計數(shù)寄存器的初值,是自己寫進(jìn)去的嗎?是的,不過默認(rèn)不要寫入我如果捕獲上升沿,兩個值相減,代表的時兩個上升沿中間那段電平的時間。對不?timerl有五個通道(對應(yīng)五個10引腳),在同一時刻,只能捕獲一個引腳的值,對不?那是肯定的,通道很像ADC通道,是可以進(jìn)行切換的。那輸出比較的原理你可以幫我介紹一下不?這里有兩個單元:一個計數(shù)器單元和一個比較單元,比較單元就是個雙緩沖寄存器,比較單元的值是可以根據(jù)不同的模式設(shè)置的, 與此同時,計數(shù)器在不停的計數(shù),并不停的與比較寄存器中的值進(jìn)行比較,當(dāng)計數(shù)器的值與比較寄存器的值相等的時候一個

4、比較匹配就發(fā)生了,根據(jù)自己的設(shè)置,匹配了是io電平取反、變低、還是變高,就會產(chǎn)生不同的波形了比較單元的值是人為設(shè)進(jìn)去的吧?是的,但是他要根據(jù)你的控制寄存器的配置,來初始化你的比較匹配寄存器5:3CMPp 期000R W想通。比牧悵弍翡畀-L .心'.'1等于在TlCCO-Ptfjttetfl-0001住比膠twe輸出0!0t在比較切換輔岀Qllt紙向上土牧換置進(jìn)出“曲踽lOGt諾向上比較諦除雜由1在0設(shè)賈!0h8k賽使用HO:程右便用Hh上面這個總看不懂,好像不不止你說的那幾種情況:“匹配了是io電平取反、變低、還是變高,就會產(chǎn)生不同的波形了”就是比較匹配了你要10電平怎么辦?

5、是清0還是置1 ?還是怎么樣?這樣才能產(chǎn)生波形啊 要不然你要比較單元有什么用呢?設(shè)置輸出就是置1,清除輸出就是置 0,切換輸出就是將原來的電平取反,對不?是的你理解的很快011 :計數(shù)器向上計數(shù)達(dá)到最大值時將引腳置1,達(dá)到0時,引腳電平置0,,對不?定時器1的輸出比較模式怎么用。禾U用這個功能輸出一個1KHZ,占空比為10%的程序怎么寫啊?求高人指點(diǎn)1、陪定時器1的功能為特殊功能,不是普通10在PERCFG這里2、P1SEL引腳選擇3、P1DIR設(shè)為輸出4、T3CC0設(shè)置周期5、T3CC1設(shè)置占空比6、T3CCTL0設(shè)置通道07、T3CCTL1設(shè)置通道18、T3CTL設(shè)為模模式9、用T3CTL

6、打開即可*以下是用定時器做頻率源,用定時器測量該頻率的應(yīng)用程序! !*調(diào)試STM32的定時器好幾天了,也算是對STM32的定時器有了點(diǎn)清楚的認(rèn)識了。我需要測量4路信號的頻率然后通過 DMA將信號的頻率傳輸?shù)酱鎯ζ鲄^(qū)域,手冊說的很明白每個定時器有 4個獨(dú)立通道。然后我就想能不能將這 4路信號都連接到一個定時器的4個通道上去。理論上應(yīng)該是行的通的。剛開始俺使用的是TIM2的123通道,TIM4的2通道來進(jìn)行頻率的測量。由于沒有頻率發(fā)生器, 所以我用tim3作為信號源,用TIM2,TIM4來進(jìn)行測量就ok 了 (剛好4個通道了)。請看一開始的程序,以 TIM2的1,3通道為例子(2通道設(shè)置方法一樣)

7、配置為輸TIMClni tStructure.TIMCMode =TIMCMode ICAP;/入捕獲模式最新資料推薦TIMCI ni tStructure.TIM_Cha nnel =TIM_Cha nn el_1;/選擇通道TIMClni tStructure.TIMCPolarity =TIMCPolarity Ris in g;/輸入上升沿7捕獲TIMCI nitStructure.TIMCSelection =TIMCSelection DirectTI; /通道方向選擇TIMCln itStructure.TIMCPrescaler =TIM ICPSC DIV1;/每次檢測TIM

8、Cln itStructure.TIMCFilter =0x0;/濾波TIMClni t(TIM2, &TIMCln itStructure); /TIM2通道1配置完畢到捕獲輸入就觸發(fā)一次捕獲TIMClni tStructure.TIMCMode = TIMCMode ICAP; /配置為輸入捕獲模式捕獲TIMClni tStructure.TIM Cha nnel =TIM Cha nn el 3;/選擇通道3TIMClni tStructure.TIMCPolarity =TIMCPolarity Ris in g;/輸入上升沿TIMCln itStructure.TIMCSel

9、ection =TIMCSelection DirectTI; /TIMCln itStructure.TIMCPrescaler =TIM ICPSC DIV1;/每次檢測到捕獲輸入就觸發(fā)一次捕獲TIMCln itStructure.TIMCFilter = 0x0;/濾波最新資料推薦14以上是輸入捕獲配置/參考TIM結(jié)構(gòu)還需要做的工作就是(參考stm32參考手冊的TIM的結(jié)構(gòu)框圖)TIM_SelectI nputTrigger(TIM2,TIM_TS_TI1FP1);圖選擇濾波后的TI1輸入作為觸發(fā)源,觸發(fā)下面程序的復(fù)位復(fù)位模式-選中TIM SelectSlaveMode(TIM2,TIM

10、 SlaveMode Reset);/的觸發(fā)輸入(TRGI )的上升沿初始化計數(shù)器,并且產(chǎn)生一個更新線號TIM SelectMasterSlaveMode(TIM2,TIM MasterSlaveMode E nable);/主從模式選擇測試了半天也沒有找到根本原因這樣我們就可以很輕松的就得到了連接在TIM2的通道1上的信號的頻率,但是3,請看TIM的結(jié)構(gòu)框圖的一部分紅色箭頭所指,這才找到原因,觸發(fā)的信號源只有這四種,而通道3上的計數(shù)器的值不可能在接受到信號的上升沿時候,有復(fù)位這個動作,找到原因了。這就是3通道上的數(shù)據(jù)不停跳動的原因,要想得到信號的頻率也是有辦法的, 可以取連續(xù)兩次捕捉的值之差

11、, 這個值就是信號的周期,自己根據(jù)實(shí)際情況去算頻率吧。有以上可以得到:stm32的TIM2的四個通道可以同時配置成輸入捕捉模式,但是計算CH3,CH4言號的頻率步驟有點(diǎn)繁瑣(取前后捕捉的差值),但是他的CH1,和CH2可以輕松得到/參考TIM結(jié)構(gòu)通道1TIM Selectl nputTrigger(TIM2,TIM TS TI1FP1);圖選擇濾波后的TI1輸入作為觸發(fā)源,觸發(fā)下面程序的復(fù)位復(fù)位模式-選中TIM SelectSlaveMode(TIM2,TIM SlaveMode Reset);/的觸發(fā)輸入(TRGI )的上升沿初始化計數(shù)器,并且產(chǎn)生一個更新線號TIMx->CRR1的值即

12、為信號的周期通道2 :TIM_Select In putTrigger(TIM2,TIM_TS_TI2FP2);/參考TIM結(jié)構(gòu)圖選擇濾波后的TI1輸入作為觸發(fā)源,觸發(fā)下面程序的復(fù)位復(fù)位模式-選中TIM SelectSlaveMode(TIM2,TIM SlaveMode Reset);/的觸發(fā)輸入(TRGI )的上升沿初始化計數(shù)器,并且產(chǎn)生一個更新線號TIMx->CRR2 的值即為信號的周期STM32的定時器外設(shè)功能強(qiáng)大得超出了想像力,STM32 一共有8個都為16位的定時器。其中TIM6、TIM7是基本定時器;TIM2、TIM3、TIM4、TIM5是通用定時器;TIM1和TIM8是高

13、級定時器。這些定時器使STM32具有定時、 信號的頻率測量、信號的PWM測量、PWM輸出、三相6步電機(jī)控制及編碼器接口等功能,都是專門為工控領(lǐng)域量身訂做的基本定時器:具備最基本的定時功能,下面是它的結(jié)構(gòu):IL根據(jù)控制位的垃疋'在U韋件時傳送飽皺載寄存器至實(shí)虹寄存崔、4 事件ah 4749b".Ml? 1丄!亠八 小中斷和DMA輸岀我們來看看它的啟動代碼:void TIM2 C on figuratio n( void)基本定時器TIM2的定時配置的結(jié)構(gòu)體(包含定時器配置的所有元素例如:TIM_Period=計數(shù)值)TIM TimeBasel ni tTypeDef TIM T

14、imeBaseStructure;設(shè)置TIM2 CLK為72MHZ (即TIM2外設(shè)掛在 APB1上,把它的時鐘打開。)RCC APB1PeriphClockCmd(RCC APB1Periph TIM2 ENABLE);設(shè)置計數(shù)值位1000TIM TimeBaseStructure.TIM Period=1000;將TIM2 CLK為72MHZ 除以72 = 1MHZ 為定時器的計數(shù)頻率TIM TimeBaseStructure.TIM Prescaler= 71;這個TIM ClockDivision是設(shè)置時鐘分割,這里不分割還是1MHZ的計數(shù)頻率TIM_TimeBaseStructure

15、.TIM_ClockDivisio n=TIM_CKD_DIV1;設(shè)置為向上計數(shù)模式;(計數(shù)模式有向上,向下,中央對齊1,中央對齊2,中央對齊3)TIM TimeBaseStructure.TIM Cou nterMode=TIM Cou nterMode Up;將配置好的設(shè)置放進(jìn) stm32f10x-tim.c的庫文件中TIM_TimeBase In it(TIM2, &TIM_TimeBaseStructure);清除標(biāo)志位TIM ClearFlag(TIM2,TIM FLAG Update);使能TIM2中斷TIM ITCo nfig(TIM2,TIM I T Update,EN

16、ABLE);使能TIM2外設(shè)TIM Cmd(TIM2,ENABLE);通用定時器:就比基本定時器復(fù)雜得多了。除了基本的定時,它主要用在測量輸入脈沖的頻率、脈沖寬與 輸出PWM脈沖的場合,還具有編碼器的接口。<-Cm -THfe,CH2 QTIMfl.OU Q牡僭堆HK tJKempr->| iZ.t.'c J內(nèi)肉時VHc« iht)Jt riACC的 TIM船 LK*"早 PWADC廿rf輸入池覆峑TIIFRTW埔入港黃露2CC3IOCSfiEfmm naFF?用制料1亦&面莎可rCC.M 疋.IGP5 5翻詰器邯和滬:dZWIT爐叵郢確宅當(dāng)剜T

17、F1C |xilC2PS f寸啟出TtlFP?J吧*更衛(wèi)1THC-pKT14FP4THG.1:柿 fi 4<H.tt, ft 耘. 向I jr rHi嗆CC1I»»KMnaXjTKtp (:審CC4T-rXf(X4,-1. C-IREFfa-dfii ftrlC TC4si ff K攤Stcwa>TfTW>_CH4-eiRP【血jVfidri我們來詳細(xì)講解:如何生成PWM脈沖通用定時器可以利用GPIO引腳進(jìn)行脈沖輸出,在配置為比較輸出、PWM輸出功能時,捕獲/比較寄存器TIMx_CCR被用作比較功能,下面把它簡稱為 比較寄存器這里直接舉例說明定時器的 PW

18、M輸出工作過程:若配置脈沖計數(shù)器TIMx_CNT為向上計數(shù),而重載寄存器TIMx_ARR(相當(dāng)于庫函數(shù)寫法的TIM_Period的值N)被配置為N,即TIMx_CNT的當(dāng)前計數(shù)值數(shù)值X在TIMxCLK時鐘源的驅(qū)動下不斷累加,當(dāng)TIMx_CNT的數(shù)值X大于N時,會重置TIMx_CNT數(shù)值為0重新計數(shù)。而在TIMxCNT 計數(shù)的同時,TIMxCNT的計數(shù)值X會與比較寄存器 TIMx_CCR最新資料推薦預(yù)先存儲了的數(shù)值A(chǔ)進(jìn)行比較,當(dāng)脈沖計數(shù)器TIMx_CNT的數(shù)值X小于比較寄 存器TIMx_CCR的值A(chǔ)時,輸出高電平(或低電平),相反地,當(dāng)脈沖計數(shù)器的數(shù)值X大于或等于比較寄存器的值A(chǔ)時,輸出低電平(

19、或高電平)如此循環(huán),得到的輸出脈沖周期就為重載寄存器 TIMx_ARR存儲的數(shù)值(N+1)乘以觸發(fā)脈沖的時鐘周期,其脈沖寬度則為比較寄存器TIMx_CCR的值A(chǔ)乘以觸發(fā)脈沖的時鐘周期,即輸出PWM的占空比為A/(N+1)如果不想看的可以直接看我標(biāo)注的紅色字體,就大體可以理解。F面我們來編寫具體代碼和講解: void TIM3 GPIO Co nfig(void)配置TIM3復(fù)用輸出PWM的10GPIO I ni tTypeDefGPIOnitStructure;打開TIM3的時鐘RCC APB1PeriphClockCmd(RCC APB1Periph TIM3,ENABLE);打開GPIOA

20、和GPIOB的時鐘RCC APB2PeriphClockCmd(RCC APB2Periph GPIOA| RCC APB2Periph GPI0B,ENABLE);配置PA6.PA7的工作模式GPIO I ni tStructure.GPIO Pi n= GPIO Pin 6 |GPIO P in 7;GPIO I ni tStructure.GPIO Mode =GPIO Mode AF PP;配置PB0.PB1的工作模式GPIO I nitStructure.GPIO Speed =GPIO Speed 5OMH z;GPIO I nit(GPIOA,&GPIO I nitStr

21、ucture);#最新資料推薦GPIO_I ni tStructure.GPIO_Pi n= GPIO_Pin_0 |GPI0_Pin_1;GPIO I nit(GPIOB,&GPIO I nitStructure);void TIM3 Mode Co nfig(void)/初始化TIM3的時間基數(shù)單TIM_TimeBasel ni tTypeDef TIM_TimeBaseStructure;/初始化TIM3的外設(shè)TIM OCI ni tTypeDef TIM OCI ni tStructure;u16 CCR1 Val= 500;u16 CCR2 Val= 375;u16 CCR3

22、 Val= 250;u16 CCR4 Val= 125;PWM 信號電平跳變值(即計數(shù)到這個數(shù)值以后都是低電平之 前都是高電平)TIM3的時間基數(shù)單位設(shè)置(如計數(shù)終止值:999,從0開始;計數(shù)方式:向上計數(shù))TIM TimeBaseStructure.TIM Period= 999;TIM TimeBaseStructure.TIM Prescaler= 0;TIM TimeBaseStructure.TIM Cou nterMode= TIM Cou nterMode Up;TIM3的外設(shè)的設(shè)置TIM_OCI ni tStructure.TIM_OCMode= TIM_OCMode_PWM1

23、;/TIM 脈沖寬度調(diào)制 模式1TIM_OCInitStructure.TIM_OutputState= TIM_OutputState_Enable;/ 這個暫時不知 道,stm32固件庫里沒有搜到。應(yīng)該是定時器輸出聲明使能的意思TIM OCInitStructure.TIM Pulse =CCR1 Val;/設(shè)置了待裝入捕獲比較寄存器的脈沖TIM_OCI ni tStructure.TIM_OCPolarity= TIM_OCPolarity_High;/TIM 輸出比較極性高TIM OC1I nit(TIM3, &TIM OCI ni tStructure);TIM_OC1Pre

24、loadConfig(TIM3,TIM_OCPreload_Enable);/ 使能或者失能 TIMx 在CCR1上的預(yù)裝載寄存器F面3路PWM輸出和上面的一樣不再解說TIM OCI ni tStructure.TIM OutputState= TIM OutputState E nable;TIM OCI ni tStructure.TIM Pulse =CCR2 Val;TIM OC2I nit(TIM3,& TIM OCI nitStructure);TIM OC2PreloadCo nfig(TIM3,TIM OCPreload E nable);TIM OCI ni tStructure.TIM OutputState= TIM OutputState E nable;TIM OC In itStructure.TIM Pulse =CCR3 Val;TIM OC3 In it(TIM3,& TIM OCI nitStructure);16最新資料推薦TIM_OC3PreloadCo nfig(TIM3,TIM_OCPreload_E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論