在單片機和嵌入式開發中,經常會遇到PWM(脈寬調制)、定時器、SysTick(系統滴答定時器)這幾個詞。很多初學者容易把它們混為一談,以為都是“定時相關的東西”。其實,它們在本質和應用上有明顯差別。下面我們來梳理清楚。
一、基本概念
定時器(Timer)
MCU 內最基礎的計數外設,通過計數時鐘周期實現定時、計數功能。多數 MCU 內部有多個通用定時器,可配置為定時中斷、事件觸發或輸入捕獲等。
示例:STM32 16 位定時器每 1ms 觸發一次中斷
- HAL_TIM_Base_Start_IT(&htim2);// 啟動定時器中斷
- voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){
- if(htim->Instance==TIM2){
- // 每 1ms 執行的任務
- }
- }
PWM(Pulse Width Modulation,脈寬調制)
嚴格來說,PWM 并非獨立硬件,而是基于定時器的一種輸出模式。它通過控制高電平與低電平的占空比,調節輸出信號的平均電壓,實現 LED 調光、馬達調速等。
示例:STM32 生成 1 kHz,50% 占空比 PWM
- HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
- __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,500);// 占空比 50%
SysTick(System Tick Timer,系統滴答定時器)ARM Cortex-M 系列內核自帶的24 位倒計時定時器,主要用于操作系統節拍(OS Tick),也可作為輕量級定時器使用。它獨立于通用定時器,硬件固定,配置簡單。、
示例:使用 SysTick 生成 1ms Tick
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);// 系統時鐘 1ms
- voidSysTick_Handler(void){
- HAL_IncTick();// 系統時間遞增
- }

- 三、應用場景舉例
- 定時器(Timer)系統定時中斷(如每 1 ms 觸發一次)
- 測量脈沖寬度(捕獲模式)
- 外部信號計數(計數模式)
- 與 PWM 配合生成復雜波形PWM電機調速(通過占空比控制速度)
- LED 調光(調節亮度,避免閃爍)
- 模擬電壓輸出(通過濾波電路平滑波形)
- 簡單音頻輸出(模擬 DAC 方案)
- SysTickRTOS 心跳定時(如 FreeRTOS 1ms Tick)
- 簡單延時函數(中斷或計數實現)
- 周期性任務調度(輕量級應用)
- 四、總結定時器:基礎硬件,功能靈活,可用于計數、比較、捕獲等。
- PWM:定時器的應用模式,用于波形輸出與占空比調節。
- SysTick:Cortex-M 內核自帶的簡化定時器,主要服務系統調度。
- 可以類比理解:定時器 = 萬能工具箱PWM = 工具箱里的電烙鐵(專門輸出“熱量”)SysTick = 內核贈送的小手表(簡單好用,但功能有限)
-
PWM
+關注
關注
116文章
5851瀏覽量
224072 -
定時器
+關注
關注
23文章
3362瀏覽量
121937 -
Systick
+關注
關注
0文章
67瀏覽量
13894
發布評論請先 登錄
STM32 SYSTICK定時器常見問題
SysTick—系統定時器
SAM系列MCU中的定時器的可能應用場景
MCU中定時器的可能應用場景
STM32筆記(七)---Systick系統定時器
systick定時器 延時計時
【STM32】SysTick滴答定時器(delay延時函數講解)

PWM、定時器、SysTick 區別及應用場景
評論