图说定时器原理、工作模式

定时器

1. 定时器简介

想象一下这样的场景,我们需要每隔 1s 通过 UART 外设发送数据、1s 内通过 ADC 模数转换器对外部信号等间隔采样 100 次、在执行两个功能函数之间需要延时 10ms 或获取当前的日期和时间。所有这些需要追踪时间流逝并在设定的时间点执行对应操作的任务,均需要使用MCU中的定时器外设。

你可能会说"我可以不用定时器而仅通过以下步骤实现定时效果啊"​,例如:假设 CPU 执行循环内指令需要 1us 时间,我们可以设置一个 while 循环并定义一个计时变量初始值为 0,在循环中执行以下操作:

  1. 计时变量递增;
  2. 判断计时变量是否到达预设时间点;
  3. 若是到达执行对应操作。

这个方法的主要问题是它占用了 CPU 的全部资源去检测是否到达预设时间点而无法执行其他操作,同时不够灵活,例如我们可能需要设置多个预定时间执行不同操作或需要自定义时间增量。

简单来说,定时器就是一个用于定时处理事件的计数器:每隔一个固定时间定时器递增/递减,当到达预设的计数值时,产生定时器中断执行用户预设的操作。 常见的定时器可以分为以下几种:

  • ​通用定时器:​功能最灵活的定时器,既可以用来测量外部信号的频率 / 时长(比如检测按键按下的持续时间),也可以定时执行重复任务(比如每隔 1 秒读取一次传感器数据);
  • ​PWM​定时器: 专门用于生成 PWM(脉宽调制)信号的定时器,这类信号可以用来控制设备的功率或位置,最典型的场景是伺服电机、舵机的角度控制;
  • ​Systick 系统滴答定时器:​属于 CPU 内核自带的定时器,是系统的 “基础时间基准”,用来生成周期性的中断,是操作系统任务调度、系统延时功能的核心依赖;
  • ​RTC​实时时钟: 专门用于记录 “真实时间 / 日期” 的定时器,区别于其他仅负责 “间隔计时” 的定时器,它可以直接设置、读取年 / 月 / 日 / 时 / 分 / 秒,可用于时间记录、事件时间戳、闹钟提醒等场景;
  • ​WDT 看门狗定时器:​用于系统故障恢复的特殊定时器,会持续监测 CPU 的运行状态,如果 CPU 因为程序失控而停止响应,看门狗定时器会触发系统复位,帮系统恢复正常运行。

这里,RTC 实时时钟和 WDT 看门狗定时器的功能和应用较其他定时器比较特殊,我们会在后面章节中讲到。

2. 定时器工作原理

这里,我们总结了不同定时器的通用特征,对定时器工作原理进行讲解。

2.1 定时器的基本构成

image.png
简单来说,定时器可以分为以下一个部分:

  • ​时钟输入单元:​每个定时器都需要一个时钟源或时基。通常有多种可能的时钟源,例如内部时钟和外部信号,可以通过开关或多路复用器选择一个;

  • ​预分频器:​为了增加计数器的计数范围(计数器的最大计数值是有上限的,时钟输入一个脉冲计数器的计数值会改变一个单位,当输入时钟频率降低,则计数器的最大计数时间会相应增大),所选时钟进入“预分频器”,它主要用于调整时钟速率。预分频器的分频因子通常限制为 2 的幂。例如,20 到 27 提供 1、2、4、8、16、32、64 或 128 的选择。一些预分频器高达 216 或 65536;

  • ​计数器:​用于计数时钟脉冲的寄存器;

  • ​时钟控制单元:​可以用于配置定时器的工作模式(例如是递增计数还是递减计数、是在输入时钟的上升沿计数还是下降沿计数等)、启停控制、中断使能等操作;

  • ​相关寄存器:​主要包括比较寄存器和计数寄存器:

    • ​计数寄存器:​存储当前计数值
    • ​比较寄存器:​存储与计数寄存器比较的值,当计数器的值达到比较寄存器的值时,触发相应的事件
  • ​触发输入单元:​简单地讲就是从外部引入到本定时器的信号,定时器可以针对外部输入信号实行边沿捕捉,产生捕捉事件,并可以触发中断或 DMA 请求,同时记录捕捉时刻计数器的值。基于这个原理,配合计数器实时计数功能可以对捕捉信号进行脉冲宽度的测量,进而实现对周期性波形测量其周期或占空比,或者用来做通信解码

  • ​触发输出单元:​当计数器的值达到比较寄存器的值时,输出触发信号给到其它定时器或外设

  • ​连接的中断和 DMA:​当定时器计数值达到预设值时,可以触发中断或 DMA。常见应用场景为 ADC 定时采样,我们设置定时器定时周期和 ADC 的 DMA,当定时器到达设定时间时触发 DMA,DMA 将 ADC 外设采集的数据从寄存器搬运至内存单元。
    image.png

    常见的中断事件包括:
    
    • ​计数器溢出中断(Overflow Interrupt):​计数器从最大值回到零时触发
    • ​比较匹配中断(Compare Match Interrupt):​计数器值与比较寄存器值相等时触发

2.2 定时器的工作模式

定时器常见的几种工作模式为定时模式、计数模式和 PWM 模式。

2.2.1 定时模式

首先,我们需要明确的一点是主程序和定时器任务二者是异步执行的,定时器任务执行流独立于主程序流程。

所谓定时模式指的是定时器在设定的时间间隔后产生中断,常常用于周期性任务的执行。
image.png

定时模式常用于以下场景:

  • ​定时数据采集:​定时触发 DMA 将 ADC 的寄存器中采集的传感器数据传输到内存
  • ​任务调度:​在多任务系统中,定时器用于调度任务的执行,确保各任务在指定的时间间隔内执行
  • ​输入信号检测:​检测按键、传感器等是否有信号输入
2.2.2 计数模式

在计数模式下,定时器可以用于计数外部事件的发生次数,如脉冲计数、步进电机步数计数等。

2.2.3 PWM 模式

通过 PWM 模式,定时器可以生成具有特定频率和占空比的 PWM 信号,用于控制电子设备,如调节 LED 亮度、控制伺服电机位置等。


image.png


posted @ 2026-08-31 17:29  FreakStudio  阅读(17)  评论(0)    收藏  举报