根據定時器的計數頻率,我們就可以算出t1-t2的時間,從而得到高電平脈寬
計算公式
n * arr + ccrx2
首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2
定時器復用功能重對映
輸入捕獲配置步驟
1.使能定時器時鐘舉例2.使能gpio時鐘,配置引腳模式
3.初始化定時器引數,預分頻器的值、自動重裝載的值等設定
4.設定通用定時器的輸入捕獲引數,開啟輸入捕獲功能
5.開啟捕獲和定時器溢位中斷
6.初始化nvic外設,設定定時器中斷優先順序
7.使能定時器
8.編寫定時器中斷處理函式
typedef
struct
tim_icinittypedef;
#define icpolarity_rising 0x40
#define icpolarity_falling 0x80
#define capture1_max 0x3f
void
tim5_irqhandler()
else}}
if(tim_getitstatus
(tim5, tim_it_cc1)
== set)
else
}tim_clearitpendingbit
(tim5, tim_it_update | tim_it_cc1);}
void
key_tim5_init
(u16 period, u16 prescaler)
; tim_icinittypedef tim_ic =
; nvic_inittypedef nvic =
; gpio_inittypedef gpio =
;rcc_apb1periphclockcmd
(rcc_apb1periph_tim5, enable)
;//使能定時器時鐘
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa, enable)
;gpio_init
(gpioa,
&gpio);
tim_tb.tim_prescaler = prescaler;
tim_tb.tim_countermode = tim_countermode_up;
//向上計數
tim_tb.tim_period = period;
tim_tb.tim_clockdivision = tim_ckd_div1;
tim_timebaseinit
(tim5,
&tim_tb)
;//初始化定時器
tim_icinit
(tim5,
&tim_ic)
;//設定通用定時器的輸入捕獲引數
tim_itconfig
(tim5, tim_it_update | tim_it_cc1, enable)
;//開啟捕獲和定時器溢位中斷
nvic_init
(&nvic)
;//初始化nvic
tim_cmd
(tim5, enable)
;//使能定時器
}int
main
(void)}
}
stm32 輸入捕獲
stm32f1 除了基本定時器 tim6 和 tim7,其他定時器都具有輸入捕 獲功能。輸入捕獲可以對輸入的訊號的上公升沿,下降沿或者雙邊沿進行捕獲,通 常用於測量輸入訊號的脈寬 測量 pwm 輸入訊號的頻率及占空比 原理 輸入捕獲模式下,u8 tim5 ch1 capture sta 輸入捕獲狀態...
stm32輸入捕獲
輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。除tim6和tim7其他定時器都有輸入捕獲功能。工作過程 簡單的說就是通過檢測 timx chx 上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 比較暫存器 timx ccrx ...
STM32輸入捕獲簡介
輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。stm32的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。stm32的輸入捕獲,簡單的說就是通過檢測timx chx上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 ...