一、軟硬件環境
STM32F1精英版 ,MDK5
二、輸入捕獲原理

如上圖所示,t1時刻輸入高電平,發生中斷,在中斷里將計數值置0,開始記溢出次數N,其中每計數0xFFFF次溢出一次,直到t2時刻跳變回低電平,獲取最后一次溢出時到t2時刻的計數值TIM5CH1_CAPTURE_VAL,則 溢出總次數 = 溢出次數*65535+TIM5CH1_CAPTURE_VAL ;根據定時器初始化時的頻率即可計算出溢出總次數所占用的時間,即為高電平時間。
三、輸入捕獲重點代碼筆記
1、初始化TIM5 CH1為 1MHz ,即1us計數一次
TIM5_CH1_Cap_Init(0XFFFF,72-1);
2、第一次捕獲到高電平時,要清除計數寄存器里面的值
__HAL_TIM_SET_COUNTER(&TIM5_Handler,0);//設置計數寄存器的值變為0
3、清除並重設捕獲極性(上升沿或下降沿觸發)
TIM_RESET_CAPTUREPOLARITY(&TIM5_Handler,TIM_CHANNEL_1); //一定要先清除原來的捕獲極性!! TIM_SET_CAPTUREPOLARITY(&TIM5_Handler,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING);//定時器5通道1設置為下降沿捕獲(重設捕獲極性)
4、捕獲到下降沿后,獲取最后一次溢出到t2時刻的計數值
TIM5CH1_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&TIM5_Handler,TIM_CHANNEL_1);//獲取當前的捕獲值.
5、溢出次數
//捕獲狀態 //[7]:0,沒有成功的捕獲;1,成功捕獲到一次. //[6]:0,還沒捕獲到低電平;1,已經捕獲到低電平了. //[5:0]:捕獲低電平后溢出的次數 u8 TIM5CH1_CAPTURE_STA=0; //輸入捕獲狀態,每次溢出+1,最大值為0X3F
6、計算總溢出次數
temp=TIM5CH1_CAPTURE_STA&0X3F; temp*=65536; //溢出時間總和 temp+=TIM5CH1_CAPTURE_VAL; //得到總的高電平時間
that is all .
