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