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 存放到對應的通道的捕獲 ...