stm32 輸入捕獲

2021-09-25 23:23:39 字數 1481 閱讀 4152

stm32f1 除了基本定時器 tim6 和 tim7,其他定時器都具有輸入捕 獲功能。輸入捕獲可以對輸入的訊號的上公升沿,下降沿或者雙邊沿進行捕獲,通 常用於測量輸入訊號的脈寬、測量 pwm 輸入訊號的頻率及占空比

原理: 輸入捕獲模式下,

u8 tim5_ch1_capture_sta; //輸入捕獲狀態

其最高位為1表示一次高電平時間捕獲完成

次高位(6)為0表示出現高電平,為1表示出現低電平

u8 tim5_ch1_capture_times; //定時器溢位次數

其0--5位來計數

u16 tim5_ch1_capture_val;//輸入捕獲值

道 icx 可以對映到 2 個 tix 上,比如 ic1 可以直接對映 到 ti1 上,也可以間接對映到 ti2 上,但是不能對映到 ti3 和 ti4 上。假如我們 直接對映在 ti1 上,引數為 tim_icselection_directti。

input.c

#include "input.h"

u8 tim5_ch1_capture_sta; //輸入捕獲狀態

u8 tim5_ch1_capture_times; //定時器溢位次數

u16 tim5_ch1_capture_val;//輸入捕獲值

void tim5_ch1_input_init(u16 per,u16 psc)

void tim5_irqhandler()

else

}//2*

if(tim_getitstatus(tim5,tim_it_update)==1) //發生溢位中斷

else}}

}tim_clearitpendingbit(tim5,tim_it_cc1|tim_it_update);

}

input.h

#ifndef _input_h

#define _input_h

#include "system.h"

extern u8 tim5_ch1_capture_sta; //輸入捕獲狀態

extern u16 tim5_ch1_capture_val;//輸入捕獲值

extern u8 tim5_ch1_capture_times;

void tim5_ch1_input_init(u16 per,u16 psc);

#endif

main.c

#include "systick.h"

#include "led.h"

#include "system.h"

#include "key.h"

#include "usart.h"

#include "input.h"

int main()

i++;

if(i%20==0)

delay_ms(10);

}}

stm32 輸入捕獲

根據定時器的計數頻率,我們就可以算出t1 t2的時間,從而得到高電平脈寬 計算公式 n arr ccrx2首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2...

stm32輸入捕獲

輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。除tim6和tim7其他定時器都有輸入捕獲功能。工作過程 簡單的說就是通過檢測 timx chx 上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 比較暫存器 timx ccrx ...

STM32輸入捕獲簡介

輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。stm32的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。stm32的輸入捕獲,簡單的說就是通過檢測timx chx上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 ...