STM32 微控制器內建功能強大的定時器系統,共有 8 個 16 位元定時器,依功能分為三大類:基本定時器、通用定時器與高級定時器。理解它們的差異與適用場景,是掌握 STM32 定時應用的關鍵。
TIM6 與 TIM7 為基本定時器,功能相對單純,主要用於產生 DAC 觸發訊號,或作為簡單的時間基準產生器。它們不具備輸入捕獲、輸出比較或 PWM 輸出功能,適合不需要複雜波形控制的定時任務。
通用定時器是最常用的類型,除基本計時功能外,還支援以下進階應用:
高級定時器擁有通用定時器所有功能,並新增關鍵特性專為電機控制設計:
相比通用定時器,高級定時器多出 BRK(剎車)與 DTG(死區產生器)兩個硬體模組,這正是其核心優勢所在。
以 TIM3 為例,展示標準庫下的定時中斷配置流程:
void TIM3_Init(u16 arr, u16 psc) {
TIM_TimeBaseInitTypeDef TIM_InitStruct;
// 1. 開啟 TIM3 時鐘(掛載於 APB1 總線)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 2. 時基單元配置
TIM_InitStruct.TIM_Period = arr; // 自動重裝載值 (ARR)
TIM_InitStruct.TIM_Prescaler = psc; // 預分頻值 (PSC)
TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上計數模式
TIM_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 時鐘分割:不分頻
TIM_TimeBaseInit(TIM3, &TIM_InitStruct);
// 3. 啟用更新中斷
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
// 4. 啟動定時器
TIM_Cmd(TIM3, ENABLE);
}
void NVIC_Config(void) {
NVIC_InitTypeDef NVIC_InitStruct;
// 設定中斷優先級分組:1 位搶佔優先級,3 位子優先級
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void TIM3_IRQHandler(void) {
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
LED0 = ~LED0; // 翻轉 LED 狀態
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除中斷標誌
}
}
typedef struct {
u16 TIM_Period; // ARR:自動重裝載值 (0x0000~0xFFFF)
u16 TIM_Prescaler; // PSC:預分頻係數 (0x0000~0xFFFF)
u16 TIM_ClockDivision; // 時鐘分割:TDTS 取樣頻率設定
u16 TIM_CounterMode; // 計數模式選擇
} TIM_TimeBaseInitTypeDef;
計數模式選項:
TIM_CounterMode_Up:向上計數(0 → ARR)TIM_CounterMode_Down:向下計數(ARR → 0)TIM_CounterMode_CenterAligned1/2/3:中央對齊模式,適合 PWM 相位正確控制時鐘分割選項:
TIM_CKD_DIV1:TDTS = Tck_tim(不分頻)TIM_CKD_DIV2:TDTS = 2 × Tck_timTIM_CKD_DIV4:TDTS = 4 × Tck_timTIM_ITConfig() 可啟用多種中斷源(可組合使用):
TIM_IT_Update:更新中斷(溢位/重裝載)TIM_IT_CC1~CC4:捕獲/比較 1~4 中斷TIM_IT_Trigger:觸發中斷輸出頻率 / 中斷頻率 = TIM_CLK / ((PSC + 1) × (ARR + 1))
其中 TIM_CLK 為定時器時鐘頻率(APB1 總線時鐘,通常為 36MHz 或 72MHz),PSC 為預分頻值,ARR 為自動重裝載值。
| 應用場景 | 推薦定時器 | 關鍵功能 |
|---|---|---|
| 簡單延時/時間基準 | TIM6/TIM7 | 基本定時、DAC 觸發 |
| PWM 輸出/輸入捕獲 | TIM2~TIM5 | 多通道 PWM、編碼器介面 |
| BLDC/PMSM 電機控制 | TIM1/TIM8 | 互補 PWM、死區、剎車、霍爾感測器介面 |
| 多通道同步 PWM | TIM1 + TIM8 | 主從模式同步 |
STM32 定時器系統靈活強大,選型關鍵在於明確應用需求:基本定時用 TIM6/7,通用控制用 TIM2~5,電機驅動必選 TIM1/8。掌握時基單元配置、中斷處理與 NVIC 設定三大核心步驟,即可靈活驅動各類定時應用。