STM32 學習之旅 輸入捕獲

2021-09-23 22:37:47 字數 1057 閱讀 8522

捕獲輸入,按字面意思便是捕獲輸入的訊號,它可以用來測量脈衝寬度或者測量頻率,通過檢測 timx_chx 上的邊沿訊號,在邊沿訊號發生跳變(比如上公升沿/下降沿)的時候,將當前定時器的值(timx_cnt)存放到對應的通道的捕獲/比較暫存器(timx_ccrx)裡面,完成一次捕獲。同時還可以配置捕獲時是否觸發中斷/dma 等。通俗點形容,最簡單的:某個gpio口一直是低電平,突然來了乙個高電平,你想要知道高電平的時間到底有多長,這就是輸入捕獲。stm32裡面,除開基本定時器tim6和tim7外,其他的定時器都有輸入捕獲功能,接下來開始捕獲實驗。

實驗思路:初始化計數器,定時器向上或向下開始計數,設定某通道為上公升沿捕獲,等待高電平的到來,高電平一來,把計數器的值記錄下來,再設定為下降沿捕獲,等低電平一來,記錄此時的計數器的值,這樣,兩次的差值就是脈寬了,同時定時器的計數頻率我們是知道的,所以時間也可以求。

附上通道一捕獲輸入的工作圖:

timx_ccmr1的icf【3:0】:輸入捕獲 1 濾波器,用來設定輸入取樣頻率和數字濾波器長度。

timx_ccer的cc1p:設定極性,0為上公升沿捕獲,1為下降沿捕獲

timx_ccmr1的cc1s【1:0】:這兩個位用於 ccr1 的通道方向配置, 這裡我們設定 ic1s[1:0]=01,即是配置為輸入,且 ic1 對映在 ti1 上, cc1 即對應 timx_ch1。

timx_ccmr1的icps【1:0】:輸入捕獲 1 預分頻器。這裡是 1 次邊沿就觸發 1 次捕獲,所以選擇 00 就是了。

timx_ccer的cc1e位:通道使能,0關閉輸出通道,1開啟輸出通道

附上**:

#include 「time.h」

void time_init()

void tim2_irqhandler()

}if( (tim_getitstatus(tim2,tim_it_cc1)) ==set )//訊號來,觸發捕獲中斷

}我做的實驗並沒有去計算高電平的時間,只是簡單的用led0和led1燈各自閃爍一下,表示已經完成了高電平的捕獲。

stm32 輸入捕獲

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

stm32 輸入捕獲

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

stm32輸入捕獲

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