微控制器內定时器基础知识:入门指南

在嵌入式系统中,定时器(Timer)是一个非常重要的外设模块。它不仅用于实现精确的延时,还常常用来生成脉宽调制(PWM)信号、捕捉外部事件以及执行周期性任务。本文将从定时器的基本概念、常见模式、配置方法及应用实例等方面为您详细讲解定时器的基础知识。

1. 定时器的基本概念

1.1 什么是定时器?

定时器是一种硬件模块,用于计数时钟脉冲或外部信号,从而实现时间控制功能。与依赖软件实现延时不同,硬件定时器具有更高的精度和更低的 CPU 负载。

2. 定时器的主要功能

计时与计数

定时器通过累加时钟脉冲来计时,可以用来测量经过的时间或统计事件次数。

周期性中断

当定时器计数达到预设值时,它可以触发中断,从而让微控制器执行某个周期性任务(例如刷新显示或采集传感器数据)。

PWM 波形生成

利用定时器可以产生具有可调占空比的脉宽调制信号,这在电机控制、LED 调光等应用中非常常见。

3. 定时器常见工作模式

不同的定时器模块支持多种工作模式,下面列举几种常见模式:

自由运行模式

定时器在自由运行模式下会不断计数,当计数达到预设周期时自动复位,并可触发中断。适用于实现精确的定时中断和周期性任务。

单次触发模式

在单次触发模式中,定时器计数到达预设值后停止工作,通常用于产生一次性延时或者生成固定宽度的脉冲。

输入捕捉模式

输入捕捉模式允许定时器捕捉外部事件(如外部信号的上升沿或下降沿)发生时的定时器值,常用于测量信号频率、脉宽和周期。

脉宽调制(PWM)模式

在 PWM 模式下,定时器生成的输出信号可用于控制电机、调节 LED 亮度等。不同的 PWM 模式(例如快速 PWM、相位和频率校正 PWM)提供了不同的输出特性,满足各种应用需求。

4. 定时器在实际应用中的作用

在实践中常见的定时器应用包括:

延时和周期性中断

利用定时器产生精确的时间延时,或定期触发中断执行任务,如采集传感器数据、更新显示内容等。

PWM 信号生成

通过定时器生成不同占空比的 PWM 信号,控制直流电机转速或 LED 的亮度。

输入信号测量

使用输入捕捉模式来测量外部信号的频率、脉宽或占空比,这在通信和控制系统中十分常见。

5. 如何快速上手定时器

对于刚接触定时器的工程师,可以从开发板入手,如何快速上手定时器。比如利用开发板(如 Microchip、STM32 或 Silicon Labs 提供的评估板)进行实验。尝试配置一个简单的定时器中断或 PWM 输出,观察实际效果。

更多产品:

嵌入式 MCU、DSP 评估板 | 评估板 | 电子元器件分销商 DigiKey

更多内容:

看了这篇定时器入门指南真的很实用。之前刚接触嵌入式时,总搞不懂为啥非要用硬件定时器,用软件延时多简单。后来试了才发现,软件延时占着 CPU 啥都干不了,定时器触发中断既精准又不耽误事。
我最近在调 STM32 的 PWM 控制 LED,按文章说的从开发板入手,先配了个简单中断,现在终于能流畅调光了。不过有个疑问,不同定时器模式切换时,会不会有计数偏差呀?有没有啥小技巧能避免呢?

定时器啊,使用最多的外设了,是基础也是重要的设备,可以实现很多功能

很多使用STM32 定时器,出现计数偏差的主要根源是,定时器的影子(shadow )寄存器机制—— 关键寄存器(ARR、PSC、CCR、CMS 模式控制位等)存在 “主寄存器” 和 “影子寄存器” 两个物理实例:

  • 主寄存器:软件直接读写的寄存器,修改后不会立即生效;
  • 影子寄存器:定时器逻辑实际使用的寄存器,仅在 “Update 事件(UEV)” 触发时,才会同步主寄存器的新值。

若模式切换时不主动同步,会出现两种偏差场景:

  1. 旧影子值残留:比如从 “自由运行模式” 切 “PWM 模式” 时,ARR/CCR 的旧影子值未更新,导致首次计数按旧参数运行(如 PWM 占空比异常);
  2. 时序冲突:若在定时器 “使能状态(CEN=1)” 下修改寄存器,主寄存器与影子寄存器的同步会延迟到下一次自然溢出,中间会出现计数 “跳变” 或 “少计”。

可以尝试利用 Update 事件 (UEV) 强制同步

当你改变 ARR / PSC / CCR / CMS(模式)这些关键寄存器时,可以通过触发一个软件 “更新事件” (UG bit in EGR register) 来强制同步。也就是说:

  • 停止定时器
  • 修改寄存器
  • 置 EGR.UG = 1
  • 启动定时器

这样做能保证影子(shadow )寄存器 → 主寄存器的切换在你可控的时机发生,减少意外跳变。

更多内容,请看这篇STM32应用笔记

定时原理
首先,时钟信号(CLK)输入到预分频器(PSC),在此降低频率以适应不同的定时需求。降频后的时钟信号送入定时器时钟(TIM CLK),再驱动计数器(CNT)。计数器根据自动重装载寄存器(ARR)设定的值进行计数,一旦计数值达到ARR设定的值,定时器便完成一个周期,产生中断或其他预设的定时事件,如输出比较信号或重置计数器。通过调整PSC和ARR的值,可以精确控制定时周期和定时器的输出

定时是控制器最重要的功能了,时序也是通讯重要的组成部分。像用得最多的外设串口也有个波特率定时器。其实定时器就是像是一个闹钟,最基础的延时就是设置闹钟响的时间,PWM是设置一个周期闹钟,还有占空比闹钟,外部捕捉就是用计算外部IO触发的时间。

当然像STM32这类的32位单片机,资源比较多,定时器循环模式下,定时时间也不用软件介入,有自动重载寄存器,硬件模块会把时间自动重新加载,理论上时钟准确度很高。