前言:最近做一個小玩意又用到了單片機的輸入捕獲功能,這裏記錄下配置過程(以便以後照搬)
1、輸入捕獲原理
在輸入捕獲模式下,當檢測到ICx信號上相應的邊沿後,計數器的當前值被鎖存到捕獲/比較寄存器(TIMx_CCRx)中。當發生捕獲事件時,相應的CCxIF標誌(TIMx_SR寄存器)被置1,如果開放了中斷或者DMA操作,則將產生中斷或者DMA請求。如果發生捕獲事件時CCxIF標誌已經爲高,那麼重複捕獲標誌CCxOF(TIMx_SR寄存器)被置1。寫CCxIF=0可清除CCxIF,或讀取存儲在TIMx_CCRx寄存器中的捕獲數據也可清除CCxIF。寫CCxOF=0可清除CCxOF。
簡單解釋:定時器在計數,如果檢測到設置的極性邊沿信號,觸發中斷。
2、主要問題
1)怎麼使用輸入捕獲功能檢測輸入信號脈寬
在最開始設置爲上升沿捕獲,當捕獲到一個上升沿後,把當前計數器的值記錄下來,然後把極性設置爲下降沿捕獲,當檢測到下降沿信號時候再記下當前寄存器的計數值,然後用兩個值融合即可得到脈寬時間。
這裏有一個問題要注意:比如上升沿時間點在上一個週期,下降沿時間點在下一個週期,那麼在下降沿-上升沿之前還要再加上一個定時器週期。
實現過程:
分頻係數和 計數值可以根據自己情況設定,之後代碼與之配合即可。
主要函數:
1】定義一些標誌位以及存儲數組
2】輸入捕獲中斷回調函數:
3】調用實現及數據處理
調用上面函數即可實現脈寬捕獲功能。
2)怎麼實現脈衝計數功能(先放這裏,這個在以後使用再遇到的時候再補充記錄)