在嵌入式系統(tǒng)中,對外部信號的時序特性(如周期、脈沖寬度)進行精準測量是眾多應用的核心需求,從電機轉速檢測、紅外遙控信號解碼,到超聲波測距、通信協(xié)議同步,都需要實時獲取外部信號的時間維度信息。而定時器的輸入捕獲模式,正是通過硬件級別的信號檢測與時間鎖存,實現(xiàn)對外部信號邊沿(上升沿、下降沿或雙邊沿)的精準捕捉,為后續(xù)時序分析提供高可靠性的時間數據,其底層邏輯圍繞 “信號觸發(fā) - 硬件鎖存 - 時間計算” 展開,是嵌入式系統(tǒng)中實現(xiàn)高精度時序測量的關鍵技術之一。
輸入捕獲模式的本質,是利用定時器的計數功能與外部引腳的信號檢測能力,將外部信號的特定邊沿與定時器的當前計數值進行 “綁定”—— 當外部信號出現(xiàn)預設的邊沿(如上升沿)時,硬件電路會立即將定時器的當前計數值鎖存到專用的捕獲寄存器中,同時可觸發(fā)中斷通知 CPU 讀取該值。這種硬件級別的鎖存機制,避免了軟件查詢方式帶來的延遲誤差,確保捕獲到的計數值能真實反映信號邊沿發(fā)生的時刻,從而為時間差計算提供精準依據。從硬件架構來看,支持輸入捕獲模式的定時器通常包含外部信號輸入引腳(如 TIMx_CH1~CH4)、邊沿檢測電路、捕獲寄存器(如 TIMx_CCR1~CCR4)、計數器(TIMx_CNT)以及中斷生成邏輯:外部信號通過輸入引腳進入后,首先經過邊沿檢測電路,該電路可通過寄存器配置選擇檢測上升沿、下降沿或雙邊沿;當檢測到預設邊沿時,觸發(fā)信號會直接控制捕獲邏輯,將計數器當前值 “凍結” 并寫入捕獲寄存器,整個過程無需 CPU 干預,響應延遲僅為幾個時鐘周期,遠低于軟件層面的信號處理速度。
要理解輸入捕獲模式的完整工作流程,需結合具體的時序測量場景展開。以測量外部信號的脈沖寬度(高電平持續(xù)時間)為例,其底層邏輯可分為三個關鍵階段:首先是模式配置階段,CPU 需通過寄存器配置定時器的工作參數 —— 設定定時器的計數時鐘頻率(如由 APB 總線時鐘分頻得到),確保計數精度滿足測量需求;配置輸入捕獲引腳對應的通道(如 TIM2_CH1),并選擇捕獲邊沿為 “上升沿”;同時使能捕獲中斷,以便信號邊沿到來時 CPU 能及時讀取捕獲值。當配置完成后,定時器開始自由計數,計數器數值從 0 開始隨時鐘周期遞增(或遞減,具體取決于計數模式)。
第二階段是上升沿捕獲階段,當外部信號從低電平變?yōu)楦唠娖綍r,邊沿檢測電路檢測到上升沿,立即觸發(fā)捕獲操作,將此時計數器的當前值(記為 CNT1)鎖存到捕獲寄存器 TIMx_CCR1 中,同時生成捕獲中斷。CPU 響應中斷后,讀取 CNT1 的值并存儲,隨后通過寄存器重新配置該通道的捕獲邊沿為 “下降沿”,為后續(xù)捕獲信號的下降沿做準備 —— 這一步的核心是通過切換捕獲邊沿,實現(xiàn)對同一信號高電平起始與結束時刻的分別捕獲。
第三階段是下降沿捕獲與時間計算階段,當外部信號從高電平變?yōu)榈碗娖綍r,邊沿檢測電路檢測到下降沿,再次觸發(fā)捕獲操作,將此時計數器的當前值(記為 CNT2)鎖存到捕獲寄存器中,并再次生成中斷。CPU 響應中斷后讀取 CNT2 的值,此時需判斷計數器在兩次捕獲之間是否發(fā)生 “溢出”—— 若 CNT2 大于 CNT1,說明計數器未溢出,脈沖寬度對應的計數差值為 ΔCNT=CNT2 - CNT1;若 CNT2 小于 CNT1,說明計數器在兩次捕獲之間已溢出(即數值從最大值重置為 0 后繼續(xù)計數),此時需通過溢出中斷記錄的溢出次數(記為 N)計算總差值,即 ΔCNT=(N× 計數器最大值) + CNT2 - CNT1。最后,結合定時器的計數周期(T=1 / 計數頻率),即可計算出脈沖寬度的實際時間:脈沖寬度 =ΔCNT×T。例如,若定時器計數頻率為 1MHz(計數周期 1μs),ΔCNT=1000,則脈沖寬度為 1000×1μs=1ms。
在實際應用中,輸入捕獲模式的底層邏輯還需處理一些關鍵細節(jié),以確保測量精度與可靠性。首先是計數器溢出問題,由于定時器計數器的位數有限(如 16 位定時器最大值為 65535),當測量的信號周期或脈沖寬度超過計數器的最大計數值對應的時間時,必然會發(fā)生溢出,若未及時處理會導致計數差值計算錯誤。因此,需同時使能定時器的溢出中斷,在中斷服務函數中記錄溢出次數,確保兩次捕獲之間的總計數差值能準確反映實際時間。其次是信號噪聲濾波問題,外部信號可能因干擾產生毛刺(如短時間的虛假邊沿),若被誤檢測為有效邊沿,會導致捕獲值錯誤。為此,部分定時器外設集成了 “輸入濾波” 功能,可通過配置濾波系數,讓邊沿檢測電路僅識別持續(xù)時間超過一定時鐘周期的邊沿,過濾掉高頻毛刺,例如配置濾波系數為 8,意味著只有當外部信號的邊沿持續(xù) 8 個時鐘周期以上時,才會被判定為有效邊沿,從而提升捕獲的抗干擾能力。
此外,輸入捕獲模式還支持 “雙邊沿捕獲” 與 “多通道同步捕獲” 等擴展功能,進一步豐富其應用場景。雙邊沿捕獲模式下,無需軟件切換邊沿,硬件可自動捕獲信號的上升沿與下降沿,并分別鎖存對應的計數值,適用于需要快速測量信號周期(一次上升沿與一次下降沿的時間差為半周期)的場景;多通道同步捕獲則利用定時器的多個輸入通道,同時捕獲多個外部信號的邊沿,例如在電機控制中,通過兩個通道分別捕獲電機編碼器的 A、B 相脈沖,結合輸入捕獲值計算電機的轉速與轉向,其底層邏輯是通過硬件同步確保兩個通道的捕獲時刻具有嚴格的時間關聯(lián)性,避免軟件延遲導致的相位偏差。
從本質來看,輸入捕獲模式的底層邏輯是 “硬件實時響應” 與 “軟件精準計算” 的協(xié)同 —— 通過硬件電路實現(xiàn)對外部信號邊沿的無延遲捕獲,將時間信息轉化為計數器的數值,再通過軟件處理溢出、計算差值,最終還原為實際的時間數據。這種機制既發(fā)揮了硬件的高速響應優(yōu)勢,又借助軟件的靈活性解決了計數溢出、噪聲過濾等問題,使其在需要高精度時序測量的嵌入式場景中不可或缺。無論是工業(yè)領域的轉速監(jiān)測、消費電子的遙控解碼,還是汽車電子的傳感器信號處理,輸入捕獲模式都以其高可靠性與低 CPU 占用率,成為連接外部信號與嵌入式系統(tǒng)的關鍵橋梁,深刻體現(xiàn)了嵌入式技術中 “硬件為基、軟件賦能” 的核心思想。