正點原子輸入捕獲實驗代碼筆記(HAL庫)


一、軟硬件環境

  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 .

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM