STM32輸入捕獲簡介

2021-06-23 00:49:28 字數 1620 閱讀 8110

輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。stm32的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。stm32的輸入捕獲,簡單的說就是通過檢測timx_chx上的邊沿訊號,在邊沿訊號發生跳變(比如上公升沿/下降沿)的時候,將當前定時器的值(timx_cnt)存放到對應的通道的捕獲/比較寄存(timx_ccrx)裡面,完成一次捕獲。同時還可以配置捕獲時是否觸發中斷/dma 等.

例如:我們用到tim5_ch1來捕獲高電平脈寬,也就是要先設定輸入捕獲為上公升沿檢測,記錄發生上公升沿的時候tim5_cnt的值。然後配置捕獲訊號為下降沿捕獲,當下降沿到來時,發生捕獲,並記錄此時的tim5_cnt值。這樣,前後兩次tim5_cnt之差,就是高電平的脈寬,同時tim5的計數頻率我們是知道的,從而可以計算出高電平脈寬的準確時間。

首先timx_arr和timx_psc,這兩個暫存器用來設自動重裝載值和timx的時鐘分頻。

再來看看捕獲/比較模式暫存器1:timx_ccmr1,這個暫存器在輸入捕獲的時候,非常有用;timx_ccmr1明顯是針對2個通道的配置,低八位[7:0]用於捕獲/比較通道1的控制,而高八位[15:8]則用於捕獲/比較通道2的控制,因為timx還有ccmr2這個暫存器,所以可以知道ccmr2是用來控制通道3和通道4(詳見《stm32參考手冊》290頁,14.4.8節)。

這裡用到tim5的捕獲/比較通道1,我們重點介紹timx_cmmr1的[7:0]位(其實高8位配置類似)。

再來看看捕獲/比較使能暫存器:timx_ccer;

接下來我們再看看dma/中斷使能暫存器:timx_dier,我們需要用到中斷來處理捕獲資料,所以必須開啟通道1的捕獲比較中斷,即cc1ie設定為1。

控制暫存器:timx_cr1,我們只用到了它的最低位,也就是用來使能定時器的;

最後再來看看捕獲/比較暫存器1:timx_ccr1,該暫存器用來儲存捕獲發生時,timx_cnt的值,我們從timx_ccr1就可以讀出通道1捕獲發生時刻的timx_cnt值,通過兩次捕獲(一次上公升沿捕獲,一次下降沿捕獲)的差值,就可以計算出高電平脈衝的寬度。  

使能捕獲和更新中斷(設定tim5的dier暫存器) 

因為我們要捕獲的是高電平訊號的脈寬,所以,第一次捕獲是上公升沿,第二次捕獲時下降沿,必須在捕獲上公升沿之後,設定捕獲邊沿為下降沿,同時,如果脈寬比較長,那麼定時器就會溢位,對溢位必須做處理,否則結果就不准了。這兩件事,我們都在中斷裡面做,所以必須開啟捕獲中斷和更新中斷。

(說明:以下**未做驗證,使用時需要先驗證--author)

1

void

init_tim2_cam(u16 psc, u16 arr, u8 way, u8 dir)225

26 timer->psc =psc;

27 timer->arr =arr;

2829

switch

(way)

3065 timer->dier |= 1

<< 0; //

允許更新中斷

66 my_nvic_init(1, 2, tim2_irqchannel, 2); //

中斷67 timer->cr1 = 0x01; //

使能定時器

68 timer->sr &= ~(1

<< 0

);69 }

STM32輸入捕獲簡介

輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。stm32的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。stm32的輸入捕獲,簡單的說就是通過檢測timx chx上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 ...

stm32 輸入捕獲

根據定時器的計數頻率,我們就可以算出t1 t2的時間,從而得到高電平脈寬 計算公式 n arr ccrx2首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2...

stm32 輸入捕獲

stm32f1 除了基本定時器 tim6 和 tim7,其他定時器都具有輸入捕 獲功能。輸入捕獲可以對輸入的訊號的上公升沿,下降沿或者雙邊沿進行捕獲,通 常用於測量輸入訊號的脈寬 測量 pwm 輸入訊號的頻率及占空比 原理 輸入捕獲模式下,u8 tim5 ch1 capture sta 輸入捕獲狀態...