stm32 輸入捕獲

2021-08-06 03:22:00 字數 2024 閱讀 2522

根據定時器的計數頻率,我們就可以算出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 存放到對應的通道的捕獲 ...