STM32F10x 利用定時器測量脈衝寬度

2022-08-25 17:03:22 字數 1949 閱讀 9069

硬體:stm32f103c8t6

平台: arm-mdk v5.11

前面一篇文章講過如何利用定時器測量訊號的頻率(見[stm32f10x] 利用定時器測量頻率),使用的是定時器的捕獲/比較單元(capture/compare),它也可以測量輸入訊號的脈衝寬度。

利用定時器測量脈衝寬度有兩種方法。

方法1:

在捕獲中斷函式裡改變捕獲訊號的觸發沿(上公升沿觸發改為下降沿觸發,或者下降沿觸發改為上公升沿觸發),通過兩次觸發得到的計數器的差值,來計算出脈衝寬度。這種

方法需要定時器的配置和[stm32f10x] 利用定時器測量頻率方法是一樣的,不同的地方在中斷函式裡修改觸發沿,以tim2, 捕獲通道2為例:

if(capstate ==0)

else

if(capstate ==1)

else

capstate = 0;

}

當然,在第一次捕獲的時候將計數器清零,然後第二次捕獲直接讀取捕獲值也是乙個不錯的選擇,如下,

if(capstate == 0

)

else

if(capstate == 1

)

觸發沿的配置在ccer這個暫存器裡面,這裡直接對暫存器進行操作,具體請查閱stm32f10x的參考說明書。

方法2:

利用定時器的pwm輸入模式(pwm input mode)。所謂的pwm模式,其實就是利通了定時器捕獲單元對映功能,定時器捕獲單元1(ic1)和捕獲單元2(ic2)可以對映

到同乙個捕獲通道,乙個捕獲單元配置成捕獲上公升沿訊號,另乙個捕獲單元配置成捕獲下降沿訊號,那麼兩個捕獲值的差就是脈衝寬度的值。還是以tim2, 捕獲通道2

為例,配置**如下:

1

void captureconfig(void)2

各行**的意思:

l2:  指定捕獲單元的對映方式,tim_icselection_indirectti 說明捕獲單元1(ic1)和捕獲單元2(ic2)對映到捕獲通道2(ti2,這裡是指捕獲通道2,區別

定時器tim2),假如該值為tim_icselection_directti,則捕獲單元1(ic1)和捕獲單元2(ic2)對映到捕獲通道1(ti1)。

l8, l9:  指定捕獲單元觸發的訊號沿(上公升沿還是下降沿)。tim_channel_1對應捕獲單元1(ic1),tim_channel_2對應捕獲單元2(ic2)注意這裡

只需要指定乙個捕獲單元,另乙個捕獲單元將會在呼叫初始化函式tim_pwmicconfig時設定為相反的邊沿。

l16:  允許捕獲單元1和捕獲單元2的中斷。

這樣,當捕獲通道2(ti2)檢測到上公升沿時,捕獲單元1(ic1)將會記錄下計數器的值,同時捕獲單元1的中斷標誌位(cc1if)將置位;

當捕獲通道2(ti2)檢測到下降沿時,捕獲單元2(ic2)將會記錄下計數器的值,同時捕獲單元2的中斷中斷標誌位(cc2f)將置位。

中斷處理函式示例**如下:

if(tim_getitstatus(demod_capture_tim, tim_it_cc1) ==set)

else

if(tim_getitstatus(demod_capture_tim, tim_it_cc2) ==set)

總結:

stm32f10x系列的定時器是乙個很靈活的東西,想靈活應用它首先要理解它的原理和運作的過程。定時器的捕獲單元和捕獲通道是比較容易混淆的兩個東西

簡單來說,stm32f10x的每個通用定時器有4個捕獲通道(ti1, ti2, ti3, ti4, 對應4個gpio口),每個捕獲通道對應乙個捕獲單元,即ic1, ic2, ic3, ic4,

其中捕獲單元1和捕獲單元2可以對映到同乙個捕獲通道,ti1或者ti2。

STM32F10x 學習筆記之基本定時器

大容量的stm32f101xx stm32f103xx系列和互聯型產品中包含了兩個基本定時器,tim6和tim7。這兩個定時器功能非常簡單,基本上和systick 定時器相當。但是我在使用的時候確是費了一番周折才除錯通過,所以還是應該將這兩個定時器的使用方法好好的寫一寫。基本定時器tim6和tim7...

STM32F10x系列 中斷

概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...

STM32F10X入門 流水燈

2019 3 16 2019 3 19 core cm32.c stdin.h中定義了字元型 stm32f10x.h stm32f10x conf.h中定義了引用的外設標頭檔案 庫檔案之間的依賴呼叫關係 pngstm32f10x.h檢視位址對映 比如define gpioa base apb2per...