STM32 輸入捕獲的簡單寫法

2021-09-13 01:23:47 字數 1312 閱讀 7790

之前對輸入捕獲大概原理了解,實際操作不會,我看網上基本都是正點原子的,這次自己寫了一次,感覺收穫很大,**送給大家,歡迎指正!!!

先給出**,最後把**解釋一波

#include#include#includeu8 buhuo_flag=0,update_flag=0;//前者用於標誌捕獲上公升沿下降沿,後者用於標誌溢位更新次數

unsigned int buhuo_up=0,buhuo_down=0,buhuo_num=0;//用於記錄捕獲到的高電平和低電平時刻

void timer_buhuo()

void key_test()

void tim3_irqhandler()

} if(tim_getitstatus(tim3,tim_it_cc1)==1)

else

buhuo_num=buhuo_up-buhuo_down;//計算時間

tim_oc1polarityconfig(tim3,tim_icpolarity_falling);//重置為下降沿檢測

buhuo_flag=0;//給捕獲標誌位置0,為下一次捕獲做準備

} } tim_clearitpendingbit(tim3,tim_it_update|tim_it_cc1);

}

注意:1、本次實驗使用的是引腳pa6,對應tim3_1.,使用對應引腳按鍵來測試2、初始檢測為下降沿沿檢測,因為我的按鍵低電平有效。3、由於本實驗知識點都在中斷部分,所以只解釋中斷部分**按鍵不按下,沒有產生下降沿,捕獲中斷不進入。按鍵按下,進入捕獲中斷,捕獲狀態標誌位(buhuo_flag)初始值為0,獲取當前下降沿出現時刻(buhuo_down),捕獲狀態標誌位置1,標誌我將要獲取的應該是上公升沿,並設定上公升沿檢測。此時的更新中斷也在執行,若是判斷到更新溢位,那麼溢位次數(update_flag)引數加1。鬆開按鍵,獲取到上公升沿,記錄上公升沿出現的時刻(buhuo_up),此時更新中斷已經發生過很多次,所以要使用溢位值乘溢位次數,我設定的溢位值為65535,然後用獲取到的當前的值加上溢位值乘溢位次數(buhuo_up=tim_getcapture1(tim3)+65535*update_flag;)。記錄結束後,別忘了給捕獲狀態標誌位和更新中斷標誌位置0,以便下次的檢測。接下來計算本次捕獲的高電平長度,這裡就很簡單了,上公升沿出現時刻減去下降沿出現時刻就是(buhuo_num=buhuo_up-buhuo_down;)。

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 ...