stm32的定時(shí)器輸入捕獲與輸出比較_第1頁
stm32的定時(shí)器輸入捕獲與輸出比較_第2頁
stm32的定時(shí)器輸入捕獲與輸出比較_第3頁
stm32的定時(shí)器輸入捕獲與輸出比較_第4頁
stm32的定時(shí)器輸入捕獲與輸出比較_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

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

4、匹配了是io電平取反、變低、還是變高,就會產(chǎn)生不同的波形了比較單元的值是人為設(shè)進(jìn)去的吧?是的,但是他要根據(jù)你的控制寄存器的配置,來初始化你的比較匹配寄存器S3CMP2tOj000四進(jìn)D比較僮選Sb當(dāng)定時(shí)番的血食官于在址00仇在士牧設(shè)蹩輸由時(shí)壓切灣謂輸出111014itttm換邀出Olh仙1:比越的1UHi在附100音甸上比轂?zāi)妥ǔ??coaxLOhfifrats1IO.sa科恢用1H1列踽t(yī)輸出9IW>Cmp(2或即弘T1CC0+的比軟tl上面這個(gè)總看不懂,好像不不止你說的那幾種情況:“匹配了是io電平取反、變低、還是變高,就會產(chǎn)生不同的波形了”形啊 要不然你要比較單就是比較匹配了你要1

5、0電平怎么辦?是清0還是置1?還是怎么樣?這樣才能產(chǎn)生波元有什么用呢?設(shè)置輸出就是置1,清除輸出就是置0,切換輸出就是將原來的電平取反,對不?是的你理解的很快011:計(jì)數(shù)器向上計(jì)數(shù)達(dá)到最大值時(shí)將引腳置1,達(dá)到0時(shí),引腳電平置0,對不?序怎么寫啊?求高人指點(diǎn)1、陪定時(shí)器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打開即可*以下是用定時(shí)器做頻率源,用定時(shí)器測量該頻率的應(yīng)用程序!*調(diào)試STM32的定時(shí)器好幾天了

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

7、IMCInitStructure.TIMCSelection=TIMCSelectionDirectTI;向選擇TIMClnitStructure.TIMCPrescaler=TIMICPSCDIV1;/到捕獲輸入就觸發(fā)一次捕獲TIMClnitStructure.TIMCFilter=0x0;濾波TIMClnit(TIM2,&TIMCln讓Structure);TIM2通道1配置完畢TIMCInitStructure.TIMCMode=TIMCModeICAP;模式TIMClnitStructure.TIMChannel=TIMChannel3;/TIMClnitStructure.T

8、IMCPolarity=TIMCPolarityRising;/捕獲TIMClnitStructure.TIMCSelection=TIMCSelectionDirectTI;/TIMClnitStructure.TIMCPrescaler=TIMICPSCDIV1;/輸入上升沿通道方每次檢測配置為輸入捕獲選擇通道3輸入上升沿每次檢測到捕獲輸入就觸發(fā)一次捕獲以上是輸入捕獲配置還需要做的工作就是(參考stm32參考手冊的TIM的結(jié)構(gòu)框圖)TIMSelectInputTrigger(TIM2,TIMTSTI1FP1);/參考TIM結(jié)構(gòu)圖選擇濾波后的TI1輸入作為觸發(fā)源,觸發(fā)下面程序的復(fù)位TIMSe

9、lectSlaveMode(TIM2,TIMSlaveModeReset);/復(fù)位模式-選中的觸發(fā)輸入(TRGI)的上升沿初始化計(jì)數(shù)器,弁且產(chǎn)生一個(gè)更新線號TIMSelectMasterSlaveMode(TIM2,TIMMasterSlaveModeEnable);主從模式選擇這樣我們就可以很輕松的就得到了連接在TIM2的通道1上的信號的頻率,但是3通道的頻率的值永遠(yuǎn)都是跳動的不準(zhǔn),測試了半天也沒有找到根本原因,請看TIM的結(jié)構(gòu)框圖的一部分TRGCTRGlMI1FP1THFP2紅色箭頭所指,這才找到原因,觸發(fā)的信號源只有這四種,而通道3上的計(jì)數(shù)器的值不可能在接受到信號的上升沿時(shí)候,有復(fù)位這個(gè)

10、動作,找到原因了。這就是3通道上的數(shù)據(jù)不停跳動的原因,要想得到信號的頻率也是有辦法的,可以取連續(xù)兩次捕捉的值之差,這個(gè)值就是信號的周期,自己根據(jù)實(shí)際情況去算頻率吧。有以上可以得到:stm32的TIM2的四個(gè)通道可以同時(shí)配置成輸入捕捉模式,但是計(jì)算CH3,CH4言號的頻率步驟有點(diǎn)繁瑣(取前后捕捉的差值),但是他的CH1,和CH2可以輕松得到/參考TIM結(jié)構(gòu)通道1TIMSelectlnputTrigger(TIM2,TIMTSTI1FP1);圖選擇濾波后的TI1輸入作為觸發(fā)源,觸發(fā)下面程序的復(fù)位TIM SelectSlaveMode(TIM2,TIM SlaveMode Reset);/復(fù)位模式-

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

12、時(shí)器;TIM2、TIM3、TIM4、TIM5是通用定時(shí)器;TIM1和TIM8是高級定時(shí)器。這些定時(shí)器使STM32具有定時(shí)、信號的頻率測量、信號的PWM測量、PWM輸出、三相6步電機(jī)控制及編碼器接口等功能,都是專門為工控領(lǐng)域量身訂做的基本定時(shí)器:具備最基本的定時(shí)功能,下面是它的結(jié)構(gòu):IL,整揣控剖應(yīng)叮覽遲'1 !1住口事佯吩傳昆恨翌豉奇,竺實(shí)町奇t!7人于件f中肪相MA輸出3.147JQh我們來看看它的啟動代碼:voidTIM2Configuration(void)基本定時(shí)器TIM2的定時(shí)配置的結(jié)構(gòu)體(包含定時(shí)器配置的所有元素例如:TIM_Period二計(jì)數(shù)值)TIMTimeBaseln

13、itTypeDefTIMTimeBaseStructure;設(shè)置TIM2CLK為72MHz(即TIM2外設(shè)掛在APB1上,把它的時(shí)鐘打開。)RCCAPB1PeriphClockCmd(RCCAPB1PeriphTIM2'ENABLE);設(shè)置計(jì)數(shù)值位1000TIMTimeBaseStructure.TIMPeriod=1000;將TIM2CLK為72MHz除以72=1MHZ為定時(shí)器的計(jì)數(shù)頻率這個(gè) TIM ClockDivisionTIMTimeBaseStructure.TIMPrescaler=71;是設(shè)置時(shí)鐘分割,這里不分割還是1MHZ的計(jì)數(shù)頻率TIM_TimeBaseStructu

14、re.TIM_ClockDivision=TIM_CKD_DIV1;設(shè)置為向上計(jì)數(shù)模式;(計(jì)數(shù)模式有向上,向下,中央對齊1,中央對齊2,中央對齊3)TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;將配置好的設(shè)置放進(jìn)stm32f10x-tim.c的庫文件中TIMTimeBaseInit(TIM2,&TIMTimeBaseStructure);清除標(biāo)志位TIMClearFlag(TIM2,TIMFLAGUpdate);使能TIM2中斷TIMITConfig(TIM2,TIMITUpdate,ENABLE);使能TIM2外設(shè)T

15、IMCmd(TIM2,ENABLE);通用定時(shí)器:就比基本定時(shí)器復(fù)雜得多了。除了基本的定時(shí),它主要用在測量輸入脈沖的頻率、脈沖寬與輸出PWM脈沖的場合,還具有編碼器的接口。我們來詳細(xì)講解:如何生成PWM脈沖通用定時(shí)器可以利用GPIO弓I腳進(jìn)行脈沖輸出,在配置為比較輸出、PWM輸出功能時(shí),捕獲/比較寄存器TIMx_CCR被用作比較功能,下面把它簡稱為比較寄存器這里直接舉例說明定時(shí)器的PWM輸出工作過程:若配置脈沖計(jì)數(shù)器TIMx_CNT為向上計(jì)數(shù),而重載寄存器TIMx_ARR(相當(dāng)于庫函數(shù)寫法的TIM_Period的值N)被配置為N,即TIMx_CNT的當(dāng)前計(jì)數(shù)值數(shù)值X在TIMxCLK時(shí)鐘源的驅(qū)動

16、下不斷累加,當(dāng)TIMx_CNT的數(shù)值X大于N時(shí),會重置TIMx_CNT數(shù)值為0重新計(jì)數(shù)。而在TIMxCNT計(jì)數(shù)的同時(shí),TIMxCNT的計(jì)數(shù)值X會與比較寄存器TIMx_CCR預(yù)先存儲了的數(shù)值A(chǔ)進(jìn)行比較,當(dāng)脈沖計(jì)數(shù)器TIMx_CNT的數(shù)值X小于比較寄存器TIMx_CCR的值A(chǔ)時(shí),輸出高電平(或低電平),相反地,當(dāng)脈沖計(jì)數(shù)器的數(shù)值X大于或等于比較寄存器的值A(chǔ)時(shí),輸出低電平(或高電平)如此循環(huán),得到的輸出脈沖周期就為重載寄存器TIMx_ARR存儲的數(shù)值(N+1)乘以觸發(fā)脈沖的時(shí)鐘周期,其脈沖寬度則為比較寄存器TIMx_CCR的值A(chǔ)乘以觸發(fā)脈沖的時(shí)鐘周期,即輸出PWM的占空比為A/(N+1)如果不想看的

17、可以直接看我標(biāo)注的紅色字體,就大體可以理解。F面我們來編寫具體代碼和講解:voidTIM3GPIOConfig(void)配置TIM3復(fù)用輸出PWM的10GPIOInitTypeDefGPIOnitStructure;打開TIM3的時(shí)鐘RCCAPB1PeriphClockCmd(RCCAPB1PeriphTIM3,ENABLE);打開GPIOA和GPIOB的時(shí)鐘RCCAPB2PeriphClockCmd(RCCAPB2PeriphGPIOA|RCCAPB2PeriphGPI0B,ENABLE);配置PA6.PA7的工作模式GPIOInitStructure.GPIOPin=GPIOPin6|G

18、PIOPin7;GPIOInitStructure.GPIOMode=GPIOModeAFPP;配置PB0.PB1的工作模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPI0_Pin_1;GPIOInit(GPIOB,&GPIOInitStructure);voidTIM3ModeConfig(void)TIMTimeBaselnitTypeDefTIMTimeBaseStructure;/初始化TIM3的時(shí)間基數(shù)單TIMOCInitTypeDefTIMOCInitStructure;/初始化TIM3的外設(shè)u16CCR1Val=500;u16CCR2

19、Val=375;u16CCR3Val=250;u16CCR4Val=125;PWM信號電平跳變值(即計(jì)數(shù)到這個(gè)數(shù)值以后都是低電平之前都是高電平)TIM3的時(shí)間基數(shù)單位設(shè)置(如計(jì)數(shù)終止值:999,從0開始;計(jì)數(shù)方式:向上計(jì)數(shù))TIMTimeBaseStructure.TIMPeriod=999;TIMTimeBaseStructure.TIMPrescaler=0;TIMTimeBaseStructure.TIMCounterMode=TIMCounterModeUp;TIM3的外設(shè)的設(shè)置TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;/TIM脈沖寬

20、度調(diào)制模式1TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;/這個(gè)暫時(shí)不知道,stm32固件庫里沒有搜到。為該是定時(shí)器輸出金明使能的意度TIMOCInitStructure.TIMPulse=CCR1Val;設(shè)置了待裝入捕獲比較寄存器的脈沖TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;/TIM輸出比較極性高TIMOC1Init(TIM3,&TIMOCInitStructure);TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);/使能或者失能TIMx在CCR1上的預(yù)裝載寄存器F面3路PWM輸出和上面的一樣不再解說TIMOCInitStructure.TIMOutputState=TIMOutputStateEnable;TIMOCInitStructure.TIMPulse=CCR2Val;TIMOC2Init(TIM3,&am

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論