版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、通用定時器輸入捕獲通用定時器作為輸入捕獲的使用。我們用TIM5的通道1(PA0)來做輸入捕獲,捕獲PA0上高電平的脈寬(用KEY_UP按鍵輸入高電平),通過串口來打印高電平脈寬時間。輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。 我們以測量脈寬為例,用一個簡圖來說明輸入捕獲的原理:如圖所示,就是輸入捕獲測量高電平脈寬的原理,假定定時器工作在向上計數(shù)模式,圖中t1t2時間,就是我們需要測量的高電平時間。測量方法如下:首先設(shè)置定時器通道x為上升沿捕獲,這樣,t1時刻,就會捕獲到當(dāng)前的CNT值,然后立即清零CNT,并設(shè)置通道x為下降沿捕獲,這樣到t2時刻,又會發(fā)生捕獲事件,得到此時的CNT值,記為C
2、CRx2。這樣,根據(jù)定時器的計數(shù)頻率,我們就可以算出t1t2的時間,從而得到高電平脈寬。在t1t2之間,可能產(chǎn)生N次定時器溢出,這就要求我們對定時器溢出,做處理,防止高電平太長,導(dǎo)致數(shù)據(jù)不準(zhǔn)確。如圖所示,t1t2之間,CNT計數(shù)的次數(shù)等于:N*ARR+CCRx2,有了這個計數(shù)次數(shù),再乘以CNT的計數(shù)周期,即可得到t2-t1的時間長度,即高電平持續(xù)時間。 STM32F4的定時器,除了TIM6和TIM7,其他定時器都有輸入捕獲功能。STM32F4的輸入捕獲,簡單的說就是通過檢測TIMx_CHx上的邊沿信號,在邊沿信號發(fā)生跳變(比如上升沿/下降沿)的時候,將當(dāng)前定時器的值(TIMx_CNT)存放到對
3、應(yīng)的通道的捕獲/比較寄存器(TIMx_CCRx)里面,完成一次捕獲。同時還可以配置捕獲時是否觸發(fā)中斷/DMA等。這里我們用TIM5_CH1來捕獲高電平脈寬。=捕獲/比較通道(例如:通道 1 輸入階段)=接下來介紹我們需要用到的一些寄存器配置,需要用到的寄存器:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1 (這里的x=5)。首先TIMx_ARR和TIMx_PSC,這兩個寄存器用來設(shè)自動重裝載值和TIMx的時鐘分頻。-捕獲/比較模式寄存器1:TIMx_CCMR1,這個寄存器在輸入捕獲的時候,非常有用:TIMx
4、 捕獲/比較模式寄存器 1 (TIMx_CCMR1)TIMx capture/compare mode register 1 偏移地址: 0x18 復(fù)位值: 0x0000當(dāng)在輸入捕獲模式下使用的時候,對應(yīng)圖的第二行描述,從圖中可以看出,TIMx_CCMR1是針對2個通道的配置,低八位7:0用于捕獲/比較通道1的控制,而高八位15:8則用于捕獲/比較通道2的控制,因為TIMx還有CCMR2這個寄存器,所以可以知道CCMR2是用來控制通道3和通道4(詳見STM32F4xx中文參考手冊435頁,15.4.8節(jié))。這里我們用到的是TIM5的捕獲/比較通道1,我們重點(diǎn)介紹TIMx_CCMR1的7:0位(
5、其高8位配置類似),TIMx_CCMR1的7:0位詳細(xì)描述見圖所示:位7:4 IC1F:輸入捕獲1濾波器(Input capture 1 filter)此位域可定義TI1輸入的采樣頻率和適用于TI1的數(shù)字濾波器帶寬。數(shù)字濾波器由事件計數(shù)器組成,每N個事件才視為一個有效邊沿:0000:無濾波器,按fDTS頻率進(jìn)行采樣1000:fSAMPLING=fDTS/8, N=6 0001:fSAMPLING=fCK_INT,N=2 1001:fSAMPLING=fDTS/8, N=8 0010:fSAMPLING=fCK_INT,N=4 1010:fSAMPLING=fDTS/16,N=5 0011:fS
6、AMPLING=fCK_INT,N=8 1011:fSAMPLING=fDTS/16,N=6 0100:fSAMPLING=fDTS/2, N=6 1100:fSAMPLING=fDTS/16,N=8 0101:fSAMPLING=fDTS/2, N=8 1101:fSAMPLING=fDTS/32,N=5 0110:fSAMPLING=fDTS/4, N=6 1110:fSAMPLING=fDTS/32,N=6 0111:fSAMPLING=fDTS/4, N=8 1111:fSAMPLING=fDTS/32,N=8 注意:在當(dāng)前硅版本中,當(dāng)ICxF3:0= 1、2或3時,將用CK_INT代
7、替公式中的fDTS。輸入捕獲1濾波器IC1F3:0,這個用來設(shè)置輸入采樣頻率和數(shù)字濾波器長度。其中,fCK_INT是定時器的輸入頻率(TIMxCLK),一般為84Mhz/168Mhz(看該定時器在哪個總線上),而fDTS則是根據(jù)TIMx_CR1的CKD1:0的設(shè)置來確定的,如果CKD1:0設(shè)置為00,那么fDTS=fCK_INT。N值就是濾波長度,舉個簡單的例子:假設(shè)IC1F3:0=0011,并設(shè)置IC1映射到通道1上,且為上升沿觸發(fā),那么在捕獲到上升沿的時候,再以fCK_INT的頻率,連續(xù)采樣到8次通道1的電平,如果都是高電平,則說明卻是一個有效的觸發(fā),就會觸發(fā)輸入捕獲中斷(如果開啟了的話)
8、。這樣可以濾除那些高電平脈寬低于8個采樣周期的脈沖信號,從而達(dá)到濾波的效果。這里,我們不做濾波處理,所以設(shè)置IC1F3:0=0000,只要采集到上升沿,就觸發(fā)捕獲。位3:2 IC1PSC:輸入捕獲1預(yù)分頻器(Input capture 1 prescaler)此位域定義CC1輸入(IC1)的預(yù)分頻比。只要CC1E=0(TIMx_CCER寄存器),預(yù)分頻器便立即復(fù)位。00:無預(yù)分頻器,捕獲輸入上每檢測到一個邊沿便執(zhí)行捕獲01:每發(fā)生2個事件便執(zhí)行一次捕獲10:每發(fā)生4個事件便執(zhí)行一次捕獲11:每發(fā)生8個事件便執(zhí)行一次捕獲輸入捕獲1預(yù)分頻器IC1PSC1:0,我們是1次邊沿就觸發(fā)1次捕獲,所以選擇
9、00。位1:0 CC1S:捕獲/比較1選擇 (Capture/Compare 1 selection)此位域定義通道方向(輸入/輸出)以及所使用的輸入。00:CC1通道配置為輸出01:CC1通道配置為輸入,IC1映射到TI1上10:CC1通道配置為輸入,IC1映射到TI2上11:CC1通道配置為輸入,IC1映射到TRC上。此模式僅在通過TS位(TIMx_SMCR寄存器)選擇內(nèi)部觸發(fā)輸入時有效注意:僅當(dāng)通道關(guān)閉時(TIMx_CCER中的CC1E = 0),才可向CC1S位寫入數(shù)據(jù)。其中CC1S1:0,這兩個位用于CCR1的通道配置,這里我們設(shè)置IC1S1:0=01,也就是配置IC1映射在TI1上
10、。-TIMx 捕獲/比較使能寄存器 (TIMx_CCER)TIMx capture/compare enable register 偏移地址: 0x20 復(fù)位值: 0x0000位1 CC1P:捕獲/比較1輸出極性 (Capture/Compare 1 output Polarity)。CC1通道配置為輸出:0:OC1高電平有效1:OC1低電平有效CC1 通道配置為輸入:CC1NP/CC1P位可針對觸發(fā)或捕獲操作選擇TI1FP1和TI2FP1的極性。00:非反相/上升沿觸發(fā)電路對TIxFP1上升沿敏感(在復(fù)位模式、外部時鐘模式或觸發(fā)模式下執(zhí)行捕獲或觸發(fā)操作),TIxFP1未反相(在門控模式或編碼
11、器模式下執(zhí)行觸發(fā)操作)。01:反相/下降沿觸發(fā)電路對TIxFP1下降沿敏感 (在復(fù)位模式、外部時鐘模式或觸發(fā)模式下執(zhí)行捕獲或觸發(fā)操作),TIxFP1反相(在門控模式或編碼器模式下執(zhí)行觸發(fā)操作)。10:保留,不使用此配置。11:非反相/上升沿和下降沿均觸發(fā)電路對TIxFP1上升沿和下降沿都敏感(在復(fù)位模式、外部時鐘模式或觸發(fā)模式下執(zhí)行捕獲或觸發(fā)操作)位0 CC1E:捕獲/比較1輸出使能 (Capture/Compare 1 output enable)。CC1通道配置為輸出:0:關(guān)閉OC1未激活1:開啟在相應(yīng)輸出引腳上輸出OC1信號CC1通道配置為輸入:此位決定了是否可以實際將計數(shù)器值捕獲到輸入
12、捕獲/比較寄存器 1 (TIMx_CCR1) 中。0:禁止捕獲1:使能捕獲所以要使能輸入捕獲,必須設(shè)置CC1E=1,而CC1P則根據(jù)自己的需要來配置。-接下來我們再看看DMA/中斷使能寄存器:TIMx_DIER,該寄存器的各位描述見圖TIMx_ DIER 寄存器各位描述我們需要用到中斷來處理捕獲數(shù)據(jù),所以必須開啟通道1的捕獲比較中斷,即CC1IE設(shè)置為1。-控制寄存器: TIMx_CR1,我們只用到了它的最低位,也就是用來使能定時器的。u 控制寄存器1(TIMx_CR1)位 9:8 CKD:時鐘分頻 (Clock division)此位域指示定時器時鐘 (CK_INT) 頻率與數(shù)字濾波器所使用
13、的采樣時鐘(ETR、 TIx之間的分頻比,00: tDTS = tCK_INT 01: tDTS = 2 × tCK_INT 10: tDTS = 4 × tCK_INT 11:保留-最后再來看看捕獲/比較寄存器 1:TIMx_CCR1,該寄存器用來存儲捕獲發(fā)生時,TIMx_CNT的值,我們從TIMx_CCR1就可以讀出通道1捕獲發(fā)生時刻的TIMx_CNT值,通過兩次捕獲(一次上升沿捕獲,一次下降沿捕獲)的差值,就可以計算出高電平脈沖的寬度(注意,對于脈寬太長的情況,還要計算定時器溢出的次數(shù))。=輸入捕獲庫函數(shù)配置:1)開啟TIM5時鐘,配置PA0為復(fù)用功能(AF2),并開
14、啟下拉電阻。要使用TIM5,我們必須先開啟TIM5的時鐘。同時我們要捕獲TIM5_CH1上面的高電平脈寬,所以先配置PA0為帶下拉的復(fù)用功能,同時,為了讓PA0的復(fù)用功能選擇連接到TIM5,所以設(shè)置PA0的復(fù)用功能為AF2,即連接到TIM5上面。開啟 IM5時鐘的方法為:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); /TIM5 時鐘使能當(dāng)然,這里我們也要開啟PA0對應(yīng)的GPIO的時鐘。配置PA0為復(fù)用功能,所以我們首先要設(shè)置PA0引腳映射AF2,方法為:GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPI
15、O_AF_TIM5); 最后,我們還要初始化GPIO的模式為復(fù)用功能,同時這里我們還要設(shè)置為開啟下拉。方法為:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /GPIOA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/復(fù)用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; /速度 100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /推挽復(fù)用輸出GPIO_InitStructure.GPIO_PuPd = G
16、PIO_PuPd_DOWN; /下拉GPIO_Init(GPIOA,&GPIO_InitStructure); /初始化 PA0跟上一講PWM輸出類似,這里我們使用的是定時器5的通道 1,所以我們從STM32F4對應(yīng)的數(shù)據(jù)手冊可以查看到對應(yīng)的IO口為PA0:2)初始化TIM5,設(shè)置TIM5的ARR和PSC。在開啟了TIM5的時鐘之后,我們要設(shè)置ARR和PSC兩個寄存器的值來設(shè)置輸入捕獲的自動重裝載值和計數(shù)頻率。 這在庫函數(shù)中是通過TIM_TimeBaseInit函數(shù)實現(xiàn)的, TIM_TimeBaseStructure.TIM_Prescaler=psc; /定時器分頻TIM_TimeB
17、aseStructure.TIM_CounterMode=TIM_CounterMode_Up; /向上計數(shù)模式TIM_TimeBaseStructure.TIM_Period=arr; /自動重裝載值TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);/初始化TIM53)設(shè)置TIM5的輸入捕獲參數(shù),開啟輸入捕獲。TIM5_CCMR1寄存器控制著輸入捕獲1和2的模式,包括映射關(guān)系,濾波和分頻等。這里我們需要設(shè)置通道1為輸入模式,且IC1映射到
18、TI1(通道1)上面,并且不使用濾波器(提高響應(yīng)速度)。 庫函數(shù)是通過TIM_ICInit函數(shù)來初始化輸入比較參數(shù)的:void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)同樣,我們來看看參數(shù)設(shè)置結(jié)構(gòu)體 TIM_ICInitTypeDef 的定義:typedef structuint16_t TIM_Channel; /通道uint16_t TIM_ICPolarity; /捕獲極性uint16_t TIM_ICSelection;/映射uint16_t TIM_ICPrescaler;/分頻系數(shù)uint1
19、6_t TIM_ICFilter; /濾波器長度 TIM_ICInitTypeDef;參數(shù)TIM_Channel很好理解,用來設(shè)置通道。我們設(shè)置為通道1,為TIM_Channel_1。參 數(shù)TIM_ICPolarit是用來設(shè)置輸入信號的有效捕獲極性,這里我們設(shè)置為TIM_ICPolarity_Rising,上升沿捕獲。同時庫函數(shù)還提供了單獨(dú)設(shè)置通道1捕獲極性的函數(shù)為:TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);這表示通道1為上升沿捕獲,我們后面會用到,同時對于其他三個通道也有一個類似的函數(shù),使用的時候一定要分清楚使用的是哪個通道該調(diào)用哪
20、個函數(shù),格式為TIM_OCxPolarityConfig()。參數(shù)TIM_ICSelection是用來設(shè)置映射關(guān)系,我們配置IC1直接映射在TI1上,選擇TIM_ICSelection_DirectTI。參 數(shù)TIM_ICPrescaler用來設(shè)置輸入捕獲分頻系數(shù),我們這里不分頻,所以選中TIM_ICPSC_DIV1,還有2,4,8分頻可選。參數(shù)TIM_ICFilter設(shè)置濾波器長度,這里我們不使用濾波器,所以設(shè)置為0。我們的配置代碼是:TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; /選擇輸入端IC1 映射到TI1上TIM5_ICInitS
21、tructure.TIM_ICPolarity = TIM_ICPolarity_Rising; /上升沿捕獲TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; /映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; /配置輸入分頻,不分頻TIM5_ICInitStructure.TIM_ICFilter = 0x00;/IC1F=0000 配置輸入濾波器不濾波TIM_ICInit(TIM5, &TIM5_ICInitStructure);
22、4)使能捕獲和更新中斷(設(shè)置TIM5的DIER寄存器)因為我們要捕獲的是高電平信號的脈寬,所以,第一次捕獲是上升沿,第二次捕獲時下降沿,必須在捕獲上升沿之后,設(shè)置捕獲邊沿為下降沿,同時,如果脈寬比較長,那么定時器就會溢出,對溢出必須做處理,否則結(jié)果就不準(zhǔn)了,不過,由于STM32F4的TIM5是32位定時器,假設(shè)計數(shù)周期為1us,那么需要4294秒才會溢出一次,這基本上是不可能的。這兩件事,我們都在中斷里面做,所以必須開啟捕獲中斷和更新中斷。這里我們使用定時器的開中斷函數(shù)TIM_ITConfig即可使能捕獲和更新中斷:TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT
23、_CC1,ENABLE);/允許更新中斷和捕獲中斷5)設(shè)置中斷優(yōu)先級,編寫中斷服務(wù)函數(shù)因為我們要使用到中斷,所以我們在系統(tǒng)初始化之后,需要先設(shè)置中斷優(yōu)先級分組,這里方法跟我們前面講解一致,調(diào)用NVIC_PriorityGroupConfig()函數(shù)即可,我們系統(tǒng)默認(rèn)設(shè)置都是分組2。 設(shè)置中斷優(yōu)先級的方法前面多次提到這里我們不做講解,主要是通過函數(shù) NVIC_Init()來完成。設(shè)置優(yōu)先級完成后,我們還需要在中斷函數(shù)里面完成數(shù)據(jù)處理和捕獲設(shè)置等關(guān)鍵操作,從而實現(xiàn)高電平脈寬統(tǒng)計。在中斷服務(wù)函數(shù)里面,跟以前的外部中斷和定時器中斷實驗中一樣,我們在中斷開始的時候要進(jìn)行中斷類型判斷,在中斷結(jié)束的時候要清
24、除中斷標(biāo)志位。使用到的函數(shù)在上面的實驗已經(jīng)講解過,分別為TIM_GetITStatus()函數(shù)和TIM_ClearITPendingBit()函數(shù)。if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)/判斷是否為更新中斷if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)/判斷是否發(fā)生捕獲事件TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);/清除中斷和捕獲標(biāo)志位在我們實驗的中斷服務(wù)函數(shù)中,我們還使用到了一個設(shè)置計數(shù)器值的函數(shù)為:TIM_SetCo
25、unter(TIM5,0);上面語句的意思是將TIM5的計數(shù)值設(shè)置為0。這個相信是比較好理解的。6)使能定時器(設(shè)置TIM5的CR1寄存器)最后,必須打開定時器的計數(shù)器開關(guān), 啟動TIM5的計數(shù)器,開始輸入捕獲。TIM_Cmd(TIM5,ENABLE ); /使能定時器 5通過以上6步設(shè)置,定時器5的通道1就可以開始輸入捕獲了,同時因為還用到了串口輸出結(jié)果,所以還需要配置一下串口。我們在timer.c和timer.h 中主要是添加了輸入捕獲初始化函數(shù)TIM5_CH1_Cap_Init 以及中斷服務(wù)函數(shù) TIM5_IRQHandler。接下來我們來看看timer.c文件中,我們添加的兩個函數(shù)的內(nèi)
26、容:TIM_ICInitTypeDef TIM5_ICInitStructure;/定時器5通道1輸入捕獲配置/arr:自動重裝值(TIM2,TIM5 是 32 位的!) psc:時鐘預(yù)分頻數(shù)void TIM5_CH1_Cap_Init(u32 arr,u16 psc)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENAB
27、LE); /TIM5 時鐘使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); /使能 PORTA 時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; /GPIOA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;/復(fù)用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; /速度 100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /推挽復(fù)用輸出GPIO_I
28、nitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; /下拉GPIO_Init(GPIOA,&GPIO_InitStructure); /初始化 PA0GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); /PA0 復(fù)用位定時器 5TIM_TimeBaseStructure.TIM_Prescaler=psc; /定時器分頻TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /向上計數(shù)模式TIM_TimeBaseStructure.TIM_P
29、eriod=arr; /自動重裝載值TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; /選擇輸入端 IC1 映射到 TI1 上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; /上升沿捕獲TIM5_ICInitStructure.TIM_ICSelection = TIM
30、_ICSelection_DirectTI; /映射到 TI1 上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; /配置輸入分頻,不分頻TIM5_ICInitStructure.TIM_ICFilter = 0x00;/IC1F=0000 配置輸入濾波器不濾波TIM_ICInit(TIM5, &TIM5_ICInitStructure); /初始化 TIM5 輸入捕獲參數(shù)TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);/允許更新和捕獲中斷TIM_Cmd(TIM5,ENAB
31、LE ); /使能定時器 5NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;/搶占優(yōu)先級 2NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;/響應(yīng)優(yōu)先級 0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ 通道使能NVIC_Init(&NVIC_InitStructure); /根據(jù)指定的參數(shù)初始化 VIC 寄存器、/捕獲狀態(tài)/
32、7:0,沒有成功的捕獲;1,成功捕獲到一次./6:0,還沒捕獲到低電平;1,已經(jīng)捕獲到低電平了./5:0:捕獲低電平后溢出的次數(shù)(對于32位定時器來說,1us計數(shù)器加1,溢出時間:4294秒)u8 TIM5CH1_CAPTURE_STA=0;/輸入捕獲狀態(tài) u32TIM5CH1_CAPTURE_VAL;/輸入捕獲值(TIM2/TIM5是32位)/定時器5中斷服務(wù)程序 void TIM5_IRQHandler(void) if(TIM5CH1_CAPTURE_STA&0X80)=0)/還未成功捕獲if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RES
33、ET)/溢出 if(TIM5CH1_CAPTURE_STA&0X40)/已經(jīng)捕獲到高電平了if(TIM5CH1_CAPTURE_STA&0X3F)=0X3F)/高電平太長了TIM5CH1_CAPTURE_STA|=0X80;/標(biāo)記成功捕獲了一次TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;else TIM5CH1_CAPTURE_STA+; if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)/捕獲1發(fā)生捕獲事件if(TIM5CH1_CAPTURE_STA&0X40)/捕獲到一個下降沿 TIM5CH1_CAPTUR
34、E_STA|=0X80;/標(biāo)記成功捕獲到一次高電平脈寬 TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);/獲取當(dāng)前的捕獲值. TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); /CC1P=0設(shè)為上升沿捕獲else /還未開始,第一次捕獲上升沿TIM5CH1_CAPTURE_STA=0;/清空TIM5CH1_CAPTURE_VAL=0;TIM5CH1_CAPTURE_STA|=0X40;/標(biāo)記捕獲到了上升沿TIM_Cmd(TIM5,DISABLE ); /關(guān)閉定時器5 TIM_SetCounter(TIM5,
35、0); TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);/CC1P=1設(shè)為下降沿捕獲TIM_Cmd(TIM5,ENABLE ); /使能定時器5 TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); /清除中斷標(biāo)志位此部分代碼包含兩個函數(shù),其中 TIM5_CH1_Cap_Init函數(shù)用于TIM5通道1的輸入捕獲設(shè)置,其設(shè)置和我們上面講的步驟是一樣的,這里就不多說, 特別注意:TIM5是32位定時器,所以arr是u32類型的。接下來,重點(diǎn)來看看第二個函數(shù)。TIM5_IRQHandler是
36、TIM5的中斷服務(wù)函數(shù),該函數(shù)用到了兩個全局變量,用于輔助實現(xiàn)高電平捕獲。其中TIM5CH1_CAPTURE_STA,是用來記錄捕獲狀態(tài),該變量類似我們在usart.c里面自行定義的USART_RX_STA 寄存器(其實就是個變量,只是我們把它當(dāng)成一個寄存器那樣來使用)。TIM5CH1_CAPTURE_STA 各位描述如表所示:TIM5CH1_CAPTURE_STAbit7 bit6bit50捕獲完成標(biāo)志捕獲到高電平標(biāo)志捕獲高電平后定時器溢出的次數(shù)另外一個變量TIM5CH1_CAPTURE_VAL,則用來記錄捕獲到下降沿的時候,TIM5_CNT的值?,F(xiàn)在介紹一下,捕獲高電平脈寬的思路:首先,設(shè)置TIM5_CH1捕獲上升沿,這在TIM5_Cap_Init 函數(shù)執(zhí)行的時候就設(shè)置
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度屋頂綠化草籽草坪工程合同3篇
- 二零二五年度教育培訓(xùn)機(jī)構(gòu)財務(wù)結(jié)算合同書4篇
- 2025年度公益廣告制作與傳播合同-@-1
- 2025年度紅磚綠色建材購銷及售后服務(wù)合同
- 2025年度孩子共同撫養(yǎng)責(zé)任與權(quán)益保障合同(創(chuàng)新合作版)
- 2025年度股東個人股份轉(zhuǎn)讓及股權(quán)變更登記服務(wù)合同
- 2025年度醫(yī)藥中間體化學(xué)品購銷合同樣本
- 2025年門面租賃合同范本全方位保障2篇
- 2025農(nóng)村房屋建造合同
- 《電子技術(shù)基礎(chǔ)(第二版)》中職技工全套教學(xué)課件
- 五年級上冊美術(shù)《傳統(tǒng)門飾》課件
- DL∕T 1309-2013 大型發(fā)電機(jī)組涉網(wǎng)保護(hù)技術(shù)規(guī)范
- 城鄉(xiāng)低保待遇協(xié)議書
- DL-T5153-2014火力發(fā)電廠廠用電設(shè)計技術(shù)規(guī)程
- 華為HCIA-Storage H13-629考試練習(xí)題
- 遼寧省撫順五十中學(xué)2024屆中考化學(xué)全真模擬試卷含解析
- 2024年中國科學(xué)技術(shù)大學(xué)少年創(chuàng)新班數(shù)學(xué)試題真題(答案詳解)
- 煤礦復(fù)工復(fù)產(chǎn)培訓(xùn)課件
- 眼科疾病與視覺健康
- 2024年九省聯(lián)考高考數(shù)學(xué)卷試題真題答案詳解(精校打?。?/a>
評論
0/150
提交評論