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

描述

在单片机和嵌入式开发中,经常会遇到 PWM(脉宽调制)、定时器、SysTick(系统滴答定时器) 这几个词。很多初学者容易把它们混为一谈,以为都是“定时相关的东西”。其实,它们在本质和应用上有明显差别。下面我们来梳理清楚。

 

一、基本概念

定时器(Timer)

MCU 内最基础的计数外设,通过计数时钟周期实现定时、计数功能。多数 MCU 内部有多个通用定时器,可配置为定时中断、事件触发或输入捕获等。

示例:STM32 16 位定时器每 1ms 触发一次中断

  1. HAL_TIM_Base_Start_IT(&htim2);// 启动定时器中断
  2.  
  3. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
  4. if(htim->Instance== TIM2){
  5. // 每 1ms 执行的任务
  6. }
  7. }

PWM(Pulse Width Modulation,脉宽调制)

严格来说,PWM 并非独立硬件,而是基于定时器的一种输出模式。它通过控制高电平与低电平的占空比,调节输出信号的平均电压,实现 LED 调光、马达调速等。

示例:STM32 生成 1 kHz,50% 占空比 PWM

  1. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  2. __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1,500);// 占空比 50%

SysTick(System Tick Timer,系统滴答定时器)ARM Cortex-M 系列内核自带的 24 位倒计时定时器,主要用于操作系统节拍(OS Tick),也可作为轻量级定时器使用。它独立于通用定时器,硬件固定,配置简单。、

示例:使用 SysTick 生成 1ms Tick

  1. HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);// 系统时钟 1ms
  2. voidSysTick_Handler(void){
  3.     HAL_IncTick();// 系统时间递增
  4. }
  5. PWM
  6. 三、应用场景举例
  7.  
  8. 定时器(Timer)系统定时中断(如每 1 ms 触发一次)
  9. 测量脉冲宽度(捕获模式)
  10. 外部信号计数(计数模式)
  11. 与 PWM 配合生成复杂波形PWM电机调速(通过占空比控制速度)
  12. LED 调光(调节亮度,避免闪烁)
  13. 模拟电压输出(通过滤波电路平滑波形)
  14. 简单音频输出(模拟 DAC 方案)
  15. SysTickRTOS 心跳定时(如 FreeRTOS 1ms Tick)
  16. 简单延时函数(中断或计数实现)
  17. 周期性任务调度(轻量级应用)
  18.  
  19. 四、总结定时器:基础硬件,功能灵活,可用于计数、比较、捕获等。
  20.  
  21. PWM:定时器的应用模式,用于波形输出与占空比调节。
  22. SysTick:Cortex-M 内核自带的简化定时器,主要服务系统调度。
  23. 可以类比理解:定时器 = 万能工具箱PWM = 工具箱里的电烙铁(专门输出“热量”)SysTick = 内核赠送的小手表(简单好用,但功能有限)
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分