實驗目的:
在串列埠除錯助手上列印出按鍵按下的時間
實驗步驟:
實驗程式:
/*******************************timer.c********************************/
#include "sys.h"
#include "stm32f4xx.h"
extern u8 tim5cha1_capture_sta;
extern u16 tim5cha1_capture_val;
/*本示例的作用就是,
當按鍵按下時,每次輸入捕獲的時間差,
然後從串列埠除錯助手中列印出其時間差;
*//*
關於輸入捕獲的操作可參考暫存器版的步驟
*//*
定時器輸入捕獲的初始化函式:
主要是關於暫存器的相關配置
*//*初始化定時器5為輸入捕獲*/
void tim5_init(void)
/*每次在按鍵按下時,輸入捕獲按鍵,
然後每產生兩次中斷,就在在中斷裡邊
算出兩次捕獲之間的時間差;
*/void tim5_irqhandler(void)
else}}
if((tim5->sr &
0x2) ==
0x2)
else}}
/*在中斷裡邊最後記得清中斷標誌:
*/tim5->sr &= ~(
0x3);
}
/*******************************timer.h*********************************/
#ifndef _exti_h
#define _exti_h
void
tim5_init
(void)
;
#endif
實驗分析:1.定時器的框圖及輸入捕獲框圖的放大版/*******************************test.c***********************************/
#include
"sys.h"
#include
"delay.h"
#include
"beep.h"
#include
"exti.h"
#include
"led.h"
#include
"uart.h"
#include
"usart.h"
u8 tim5cha1_capture_sta;
u32 tim5cha1_capture_val;
intmain
(void)}}
注:通過檢測timx_chx上的邊沿訊號,在邊沿訊號發生跳變(比如上公升沿/下降沿)的時候,
將當前定時器的值(timx_cnt)存放到對應的捕獲/比較暫存器(timx_ccrx)裡面,完成一次捕獲。
2.輸入捕獲的工作流程分析:
3.中斷處理函式部分的提示
注意事項:
1.只要涉及到中斷,在最後一定都要記得使能中斷
2.按鍵那塊,處理不是很好,有時會一連打出好幾串數字;
更準確的說是按鍵有時會有些抖動,就相當於按了好幾下,但沒有濾掉波段較小的那一部分;
stm32 輸入捕獲
根據定時器的計數頻率,我們就可以算出t1 t2的時間,從而得到高電平脈寬 計算公式 n arr ccrx2首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2...
stm32 輸入捕獲
stm32f1 除了基本定時器 tim6 和 tim7,其他定時器都具有輸入捕 獲功能。輸入捕獲可以對輸入的訊號的上公升沿,下降沿或者雙邊沿進行捕獲,通 常用於測量輸入訊號的脈寬 測量 pwm 輸入訊號的頻率及占空比 原理 輸入捕獲模式下,u8 tim5 ch1 capture sta 輸入捕獲狀態...
stm32輸入捕獲
輸入捕獲模式可以用來測量脈衝寬度或者測量頻率。除tim6和tim7其他定時器都有輸入捕獲功能。工作過程 簡單的說就是通過檢測 timx chx 上的邊沿訊號,在邊沿訊號發生跳變 比如上公升沿 下降沿 的時候,將當前定時器的值 timx cnt 存放到對應的通道的捕獲 比較暫存器 timx ccrx ...