STM32輸入捕獲TIM2四通道

2022-07-30 23:09:17 字數 1695 閱讀 2059

相比於一通道,原子的例程裡因為清了計數時間,所以要對程式進行修改。

記錄上公升沿后的計數,然後記錄下降沿的計數。相減後計算高電平時間,對於定時器中斷間隔的邊界要分開處理。

這裡因為我的接收機時間是1ms~2ms,而中斷時間設定為20ms。所以根本不需要考慮時間延遲超過計時器時間。

下面是我的**

//

arr:自動重灌值 psc:時鐘預分頻數

//定時器溢位時間計算:tout=((arr+1)*(psc+1))/ft us

//ft = 定時器工作頻率,單位mhz

//tim2在apb1上,為hclk/2 36mhz

void

tim2_cap_init(u16 arr, u16 psc)

然後是中斷處理函式

//

捕獲狀態

//[7]:0,沒有成功捕獲;1,成功捕獲到一次

//[6]:0,還沒捕獲到低電平;1,已經捕獲到低電平了.

//[5:0]:捕獲低電平後溢位第次數

u8 capture_sta_tim2ch[4] = ;

u16 capture_val_tim2ch[4];

u16 capture_up_tim2ch[

4], capture_down_tim2ch[4

];void tim2_irqhandler(void

) else

//capture_val_tim2ch[1]++;//}

//}//tim_clearitpendingbit(tim2, tim_it_update);//}

if((capture_sta_tim2ch[0]&0x80) == 0) else

tim_clearflag(tim2, tim_flag_cc1);

//清除狀態標誌

} }

if((capture_sta_tim2ch[1]&0x80) == 0) else

tim_clearflag(tim2, tim_flag_cc2);

//清除狀態標誌

} }

if((capture_sta_tim2ch[2]&0x80) == 0) else

tim_clearflag(tim2, tim_flag_cc3);

//清除狀態標誌

} }

if((capture_sta_tim2ch[3]&0x80) == 0) else

tim_clearflag(tim2, tim_flag_cc4);

//清除狀態標誌

} }

//處理幀資料

if(capture_sta_tim2ch[0]&0x80)

if(capture_sta_tim2ch[1]&0x80)

if(capture_sta_tim2ch[2]&0x80)

if(capture_sta_tim2ch[3]&0x80)

}

這些printf函式會極大的占用mcu資源,所以不在中斷中處理。

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