????????Prescaler預分頻,以筆者目前的學習程度來說,這個參數,一般來說是對主時鐘進行分頻后的計數器時鐘。這個預分頻后的時鐘主要是用于的計數的。
? ? ? ? 這個主時鐘,對于時基單元來說可以是內部時鐘,也可以是外部時鐘。一般來說我們的內部時鐘是72MHZ的,經過預分頻比如????Prescaler = 72-1;那么現在的計數時鐘是1MHZ。
????????對于外部時鐘來說,首先這個外部時鐘是通過GPIO口輸入來作為時基單元的主時鐘的,那么這個時候設置的PSC參數就是對外部時鐘分頻,舉個例子:比如我們把對射式光耦的觸發頻率作為主時鐘頻率,顯然這個時鐘是一個不穩定的偶發性時鐘,完全取決于它的光耦觸發頻率。然后呢我們再設置時基單元的PSC = 2-1;那么現在的時鐘頻率就是feq_CK_CNT = 光耦觸發頻率 / (2-1)+1; 相當于光耦觸發兩次,計數器就會加1.
? ? ? ? 那么對于CLockDivision,這個主要是對定時器的主時鐘進行分頻主要用于濾波,一般來說這個時鐘就是內部時鐘72MHZ,所以定時器濾波的采樣時鐘(目前筆者認為是針對外部觸發或者輸入捕獲的)可以直接是這個主時鐘頻率72MHZ也可以是分頻后的頻率比如2分頻是36MHZ,這個分頻后的頻率寫為fDTS。
????????舉個例子,假設主時鐘頻率是 72MHz,CKD 設置為分頻因子 2,那么 fDTS 的頻率就是 36MHz。此時,如果數字濾波器使用這個 fDTS 作為采樣時鐘,每個采樣周期的時間是 1/36MHz≈27.78ns。如果設置濾波器的采樣次數為 4 次,那么有效的濾波時間就是 4*27.78≈111ns,即只有信號穩定超過這個時間才會被確認。如果 CKD 設置為分頻因子 4,fDTS 為 18MHz,采樣周期為 55.56ns,四次采樣就是 222ns,這樣濾波時間更長,可以濾除更寬的脈沖噪聲,但信號變化的檢測會有更大的延遲。
STM32 定時器的外部時鐘輸入(如 ETR 引腳)最大頻率為?APB 時鐘的 1/4。若 APB 時鐘為 72MHz,則外部輸入信號最高為?18MHz。
看一下手冊上相關的部分的說明:
其實這個圖筆者看不太懂,如果這個tDTS代表頻率的話好像和上文的陳述相反的,如果tDTS代表的是采樣時間的話那確實是正確的,比如10:代表4分頻,4分頻后的采樣時間是不分頻的4倍。
這個主要是針對ETR設置的,具體操作庫函數是:
????????TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,?
? ?uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);第二個參數是PSC的設置聯系上下文,這個參數我們設置為2即TIM_ExtTRGPSC_DIV2,那代表光耦工作兩次計數器加1.
????????這個最后一項的參數就是寄存器ETF的相關設置,設置的就是外部觸發濾波的方式共16種,這里說明一下這個框圖里的描述“它記錄到N個事件后會產生一個輸出的跳變”,這里的N個事件指代的是什么意思?一開始筆者把它和PSC能混了,以為這個事件是指光耦的跳變電平信號,N個事件就是指N個跳變電平信號。其實不然,如果觸發電平是上升沿,那么N個事件就是說在上升沿往后的N個采樣周期內采樣到的電平都是高電平,同理如果觸發電平是下降沿,那么N個事件就是說在下降沿往后的N個采樣周期內采樣到的電平都是低電平。
? ? ? ? 0000的采樣頻率是fDTS,這個是分頻后的頻率。
? ? ? ? 0001的采用頻率是fCK_INT這個頻率應該是內部時鐘的頻率,一般來說是72MHZ
? ? ? ?0100的采樣頻率是fDTS/2這個是分頻后的頻率再分頻,它的采樣頻率更低了。這個fDTS筆者認為應該是在時基單元的結構體中設置了。
上圖的兩個PSC都可以對ETR的輸入時鐘分頻,但是建議用時基單元里的PSC預分頻,外部時鐘函數配置的預分頻,它的第一個觸發信號就會使計數器加1(4分頻也是如此),但是后續的還是按照分頻倍數觸發的。時基單元設置的PSC就不會有這個問題。 具體原因不清楚。
對于輸入信號的處理,區別分辯不同場景輸入信號的處理方式(下文來著deepseek)
一、功能對比
功能模塊 | ETR 外部觸發通道 | 定時器輸入通道(CH1-CH4) | 外部中斷(EXTI) |
---|---|---|---|
核心用途 | 外部時鐘同步或觸發定時器操作 | 輸入捕獲(頻率、脈寬測量)、PWM 輸入 | 快速響應外部電平 / 邊沿變化 |
信號處理能力 | 支持高頻信號(最高 APB/4) | 支持高頻信號(受定時器時鐘限制) | 低頻信號(依賴中斷響應速度) |
硬件資源 | 定時器專用引腳(如 TIMx_ETR) | 定時器復用引腳(TIMx_CH1~CH4) | 任意 GPIO(需配置為 EXTI) |
信號濾波 | 可配置數字濾波器(基于 tDTS) | 可配置數字濾波器(基于 tDTS) | 無硬件濾波,依賴軟件去抖 |
分頻 / 預分頻 | 支持外部時鐘預分頻(ETRPSC) | 支持輸入捕獲分頻(ICPSC) | 無分頻,直接響應邊沿 |
觸發事件類型 | 上升沿、下降沿、雙邊沿 | 上升沿、下降沿、雙邊沿 | 上升沿、下降沿、雙邊沿 |
中斷 / DMA 支持 | 支持觸發中斷或 DMA 請求 | 支持輸入捕獲中斷或 DMA | 僅支持中斷 |
二、應用場景對比
1. ETR 外部觸發通道
- 適用場景:
- 高頻外部時鐘輸入(如外部晶振、高速脈沖計數)。
- 定時器級聯(主從模式,同步多個定時器)。
- 精確觸發 ADC/DAC 等外設(通過定時器觸發輸出)。
- 示例:
使用 ETR 引腳接收 18MHz 外部時鐘,驅動定時器計數(PSC=0),實現高精度計時。
2. 定時器輸入通道(CH1-CH4)
- 適用場景:
- PWM 輸入模式測量占空比和頻率(如電機控制)。
- 編碼器接口(正交編碼信號解碼)。
- 輸入捕獲測量脈沖寬度(超聲波測距、紅外通信)。
- 示例:
配置 TIMx_CH1 為輸入捕獲模式,測量 10kHz PWM 信號的上升沿和下降沿時間差,計算占空比。
3. 外部中斷(EXTI)
- 適用場景:
- 按鍵檢測(低頻率、非精確時序需求)。
- 快速響應外部事件(如緊急停止信號)。
- 簡單電平狀態監控(如傳感器觸發)。
- 示例:
配置 EXTI13(連接按鍵 GPIO)為下降沿觸發,檢測按鍵按下事件并喚醒 MCU。
????
三、關鍵差異總結
-
信號處理能力
- ETR:專為高頻信號設計,支持外部時鐘輸入和復雜觸發邏輯。
- 定時器輸入通道:適合中高頻信號的時間參數測量(如脈寬、頻率)。
- EXTI:僅適合低頻事件響應,無法處理高頻或精確時序需求。
-
硬件集成度
- ETR / 定時器通道:與定時器深度集成,支持濾波、分頻等硬件預處理。
- EXTI:獨立于定時器,依賴軟件處理信號抖動和事件響應。
-
中斷響應速度
- ETR / 定時器通道:通過硬件自動記錄時間戳,中斷延遲對測量精度無影響。
- EXTI:中斷延遲(通常 1~2μs)直接影響事件響應實時性。
四、替代性分析
1. 何時可以互相替代?
- 低頻事件檢測(如按鍵檢測):
EXTI 和定時器輸入通道均可實現,但 EXTI 更節省資源。 - 邊沿觸發計數:
ETR 和輸入通道均可實現,但 ETR 適合高頻,輸入通道適合帶時間戳的計數。
2. 何時不可替代?
- 高頻信號處理(>100kHz):必須使用 ETR 或定時器輸入通道。
- 精確時間測量(如超聲波測距):必須使用定時器輸入捕獲。
- 硬件級信號同步(如 ADC 觸發):必須使用 ETR 或定時器觸發輸出。
5、配置建議
-
高頻信號(>1MHz)
- 首選 ETR 外部時鐘模式,配合預分頻器(ETRPSC)降低頻率至 APB/4 以內。
- 例:144MHz 信號 → 外部分頻 8 倍 → 18MHz → ETR 輸入。
- 這個其實外部搞一個分頻功能的芯片,把144MHZ的頻率降低到18MHZ再接入單片機
-
中頻信號(10kHz~1MHz)
- 使用定時器輸入捕獲通道,開啟數字濾波(ICF)抗噪聲。
- 例:測量 100kHz PWM 占空比,配置 ICPSC 分頻和雙邊沿捕獲。
-
低頻事件(<10kHz)
- 使用 EXTI,配合軟件去抖(如定時器輪詢或二次檢測)。
- 例:檢測按鍵按下,EXTI 觸發中斷后啟動防抖延時。
然后對這個濾波器筆者自己的一些猜想和看法,首先由DEEPSEEK指出,高頻信號適用的是ETR端口,但是ETR端口最大采樣頻率是18MHZ,為什么會這樣呢?
從濾波邏輯來說,72M的每個周期都用于檢測信號的話最大也只能能檢測72MHZ的外源波形 ,如果我們極端點外源信號是144MHZ,那么可見的無論你怎么挑選檢測周期,72M的每個周期內必然檢測到邊沿信號,一旦檢測到邊沿跳變信號,信號就會被濾波器認為不穩定而過濾掉,因此它就不會輸出任何信號。所以不同頻率的信號要采用合適的頻率濾波。
(筆者覺得濾波功能起碼包括三個階段,開始濾波,檢測信號,結束濾波,三部分最少要三個周期? 。如果加上等待周期什么的,因此72MHZ的主頻只能檢測18MHZ的信號是可以理解的,因為極限也就24MHZ。)這是根據I2C,UART,SPI通訊邏輯的時序聯想,沒有其它的依據額。
?????????