在单片机和嵌入式开发中,经常会遇到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文章
5847浏览量
223818 -
定时器
+关注
关注
23文章
3360浏览量
121744 -
Systick
+关注
关注
0文章
67浏览量
13869
发布评论请先 登录
STM32 SYSTICK定时器常见问题
SysTick—系统定时器
SAM系列MCU中的定时器的可能应用场景
MCU中定时器的可能应用场景
STM32笔记(七)---Systick系统定时器
systick定时器 延时计时
【STM32】SysTick滴答定时器(delay延时函数讲解)

PWM、定时器、SysTick 区别及应用场景
评论