STM32 通用定時器基本原理(基于 STM32F1)
參考資料:STM32F1xx官方資料:《STM32中文參考手冊V10》-第14章通用定時器
STM32 定時器分類
STM32F103 系列共有三類定時器:
🔎 通用定時器(TIM2~TIM5)是我們學習和使用最多的定時器。
STM32定時器:STM32F10x系列總共最多有8個定時器:
通用定時器主要特點
STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5) 定時器功能特點包括:
位于低速的APB1總線上(APB1)16位計數器(TIMx_CNT): [計數模式靈活:向上、向下、中心對齊]16 位向上、向下、向上/向下(中心對齊)計數模式,自動裝載計數器(TIMx_CNT)。可配置預分頻器(TIMx_PSC):1~65535 :16 位可編程(可以實時修改)預分頻器(TIMx_PSC),計數器時鐘頻率的分頻系數 為 1~65535 之間的任意數值。4個捕獲/比較通道(TIMx_CH1~CH4):4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:1. 輸入捕獲 2. 輸出比較3. PWM 生成(邊緣或中間對齊模式) 4. 單脈沖模式輸出 支持外部觸發(ETR、ITRx):可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。支持中斷/DMA :如下事件發生時產生中斷/DMA(6個獨立的IRQ/DMA請求生成器): ① 更新:計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發) ② 觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數) ③ 輸入捕獲 ④ 輸出比較 ⑤ 支持針對定位的增量(正交)編碼器和霍爾傳感器電路 ⑥ 觸發輸入作為外部時鐘或者按周期的電流管理
STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲) 或者 產生輸出波形 (輸出比較和 PWM) 等。
使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
計數模式詳解
通用定時器可以向上計數、向下計數、向上向下雙向計數模式。
① 向上計數模式:計數器從0計數到自動加載值(TIMx_ARR),然后重新從0開始計數并且產生一個計數器溢出事件。
② 向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然后從自動裝入的值重新開始,并產生一個計數器向下溢出事件。
③ 中央對齊模式(向上/向下計數):計數器從0開始計數到自動裝入的值-1,產生一個計數器溢出事件,然后向下計數到1并且產生一個計數器溢出事件;然后再從0開始重新計數。
模式 | 描述 |
---|---|
向上計數模式 | CNT 從 0 計到 ARR,溢出后回到 0,觸發更新事件 |
向下計數模式 | CNT 從 ARR 計到 0,再跳回 ARR |
中心對齊模式 | CNT ↑ 到 ARR,再 ↓ 到 0,形成對稱三角波計數 |
更新事件(UEV)在溢出/下溢時觸發,可以用于控制中斷、PWM更新等等。
通用定時器工作過程:
通用定時器結構圖:
各個寄存器功能匯總
定時器結構主要包括以上幾個模塊:
1. 時基單元(定時器核心)計數器(CNT)預分頻器(PSC)自動重裝載寄存器(ARR)更新事件(UEV)
用于產生周期性事件(如中斷、PWM更新等)2. 輸入捕獲單元(IC)檢測外部引腳電平變化(上升/下降沿)記錄 CNT 值,實現精確計時3. 輸出比較單元(OC)當 CNT = CCRx 時,產生比較事件可輸出特定脈沖、PWM、高低電平等4. PWM輸出單元通過改變 ARR(周期)和 CCRx(占空比)實現 PWM 波形輸出核心寄存器有:
TIMx_CNT 當前計數值
TIMx_PSC 預分頻值(決定定時器時鐘頻率)
TIMx_ARR 自動重裝載值(決定計數上限)
TIMx_CCRx 捕獲/比較寄存器,用于輸入捕獲或 PWM 輸出占空比
TIMx_CR1 控制寄存器,配置使能、計數模式等
TIMx_DIER 中斷使能寄存器
TIMx_SR 狀態寄存器,標志中斷源
通用定時器工作過程:
1?? 時鐘源選定
定時器時鐘 = 外設總線時鐘(APB1) × 倍頻因子(如2)
例如:APB1 = 36MHz,TIM2~5 定時器頻率為 72MHz
2?? 預分頻器(TIMx_PSC)
將定時器時鐘進一步分頻,比如設置為 7199,就變成了 10kHz
3?? 自動重裝載(TIMx_ARR)
決定了 CNT 的最大值。例如 ARR = 999,計數從 0~999,共 1000 次
4?? 更新事件(UEV)
每次 CNT 溢出都會觸發更新事件,可用于中斷、PWM刷新等
計數時鐘的選擇:
時基單元:
更新事件:
捕捉比較陣列:
PWM模式:
不同功能模塊分別適用的場景:
場景 | 功能模塊 | 說明 |
---|---|---|
周期中斷 | 時基單元 | 通過 CNT+ARR+PSC 實現 1ms、1s 等周期事件 |
PWM 輸出 | 輸出比較 | 控制電機、LED 亮度等 |
輸入捕獲 | 捕獲比較 | 測量波形周期、頻率、脈寬 |
單脈沖輸出 | 輸出比較 | 產生一次性脈沖(如超聲測距) |
STM32 通用定時器(TIM2~TIM5)是功能最強大、應用最廣泛的定時器模塊之一,支持定時、PWM、捕獲、比較等多種功能,是嵌入式開發中不可或缺的核心外設。其中,STM32 定時器支持多達 8 種計數時鐘來源,通過靈活配置選擇器、觸發器、濾波器等模塊,能夠實現豐富的定時、計數、同步、捕獲等復雜功能;配置 STM32 的 TIM2 定時器 進入 輸入捕獲模式, 用于 測量脈沖寬度(高電平時間、低電平時間或整個周期);而時基單元是定時器的“心跳引擎”,通過 PSC、ARR 和 CNT 控制定時器的計數行為與中斷頻率,是實現周期性任務的基礎;STM32 的更新事件(UEV)是控制定時器影子寄存器同步、觸發中斷、啟動 DMA 和外設同步的核心機制,支持自動、軟件、從模式等多種觸發方式,并可通過 URS 精細控制;STM32 通用定時器的捕捉比較陣列(Capture/Compare Array,簡稱 CC 陣列) :捕捉比較陣列是定時器功能的核心模塊,支持靈活配置為輸入捕獲或輸出比較,通過濾波器、分頻器、比較器等子模塊實現精準的信號測量與控制輸出;最后,STM32 的 PWM 模式通過定時器的輸出比較功能實現,ARR 控制周期,CCRx 控制占空比,通過邊沿/中心對齊實現不同波形特性,是控制電機、LED、蜂鳴器的核心技術。
以上,歡迎有從事同行業的電子信息工程、互聯網通信、嵌入式開發的朋友共同探討與提問,我可以提供實戰演示或模板庫。希望內容能夠對你產生幫助!