☰
嵌入式开发分享(五):定时器全解析
2026/11/2 1:54:23 网站建设 项目流程

定时器是嵌入式开发中最常用的外设之一。

它可以实现精确定时、PWM 输出、输入捕获等功能。

本篇将全面解析 STM32 的定时器。

一、定时器简介

TIM 是 Timer 的缩写,意思是定时器。

定时器可以对输入的时钟进行计数。

并在计数值达到设定值时触发中断。

STM32 的定时器功能非常强大。

不仅具备基本的定时中断功能。

还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。

STM32F1 的定时器根据复杂度和应用场景分为三种类型。

第一种是高级定时器。

第二种是通用定时器。

第三种是基本定时器。

二、定时器类型详解

  1. 基本定时器

基本定时器是功能最简单的定时器。

它主要有以下特点。

第一,主模式触发 DAC,让内部硬件在程序控制之外自动运行。

第二,主模式可以把定时器更新事件映射到触发输出 TRGO,触发 DAC。

第三,基本定时器只能向上计数。

基本定时器适合简单的定时和计数应用。

  1. 通用定时器

通用定时器比基本定时器功能更丰富。

它具备以下功能。

第一,支持向上、向下、中央对齐三种计数模式。

第二,拥有 4 个独立通道,可用于输入捕获和输出比较。

第三,支持外部时钟输入。

第四,支持主从模式,可以级联多个定时器。

通用定时器是最常用的定时器类型。

  1. 高级定时器

高级定时器在通用定时器的基础上增加了以下功能。

第一,死区生成,用于电机控制等互补输出场景。

第二,互补输出,可以输出一对互补的 PWM 信号。

第三,刹车输入,用于紧急停止 PWM 输出。

高级定时器主要用于电机控制、开关电源等领域。

三、时基单元

定时器的核心是时基单元。

时基单元由预分频器、计数器和自动重装寄存器组成。

  1. 预分频器 PSC

预分频器用于对输入时钟进行分频。

计数器计数频率的计算公式是 CK_CNT 等于 CK_PSC 除以 PSC 加 1。

其中 CK_PSC 是定时器的预分频器输入时钟。

PSC 是预分频寄存器设置的数值。

CK_CNT 是计数器真正用来计数的时钟频率。

  1. 计数器 CNT

计数器是一个 16 位的计数器。

它根据计数频率递增或递减。

当计数值达到自动重装值时,产生更新事件。

  1. 自动重装寄存器 ARR

自动重装寄存器存储计数器的最大值。

计数器溢出频率的计算公式是 CK_CNT_OV 等于 CK_PSC 除以 PSC 加 1 再除以 ARR 加 1。

其中 ARR 是自动重载寄存器的值。

CK_CNT_OV 是定时器溢出的频率,也就是定时器中断的频率。

含义是 CNT 从 0 开始,一共要计数 ARR 加 1 个脉冲,才会溢出一次。

四、计数器模式

STM32 定时器支持三种计数模式。

第一种是向上计数。

计数器从 0 向上计数到自动重载值,然后产生更新中断。

第二种是向下计数。

计数器从自动重载值向下计数到 0,然后产生更新中断。

第三种是中央对齐。

计数器先向上计数到重载值,再向下计数到 0,上下都产生更新中断。

五、定时器中断配置

配置定时器中断需要以下步骤。

第一步,RCC 开启定时器时钟。

第二步,选择时基单元的时钟源,通常选择内部时钟源。

第三步,配置时基单元,设置预分频器和自动重装值。

第四步,配置输出中断,允许输出中断到 NVIC。

第五步,配置 NVIC,打开定时器中断通道,分配优先级。

第六步,运行控制,使能计数器。

六、PWM 输出

PWM 是 Pulse Width Modulation 的缩写,意思是脉冲宽度调制。

它通过对一系列脉冲的宽度进行调制,来等效获得所需要的模拟参量。

PWM 常用于电机控速、LED 调光、舵机控制等领域。

  1. PWM 参数

PWM 有三个重要参数。

第一个是频率。

频率等于 1 除以周期。

第二个是占空比。

占空比等于高电平时间除以周期。

第三个是分辨率。

分辨率等于占空比变化步距。

  1. PWM 频率计算

PWM 频率等于定时器原始时钟除以预分频值加 1 再除以自动重载值加 1。

也就是 PWM 频率等于 CK_PSC 除以 PSC 加 1 再除以 ARR 加 1。

  1. PWM 占空比计算

PWM 占空比等于捕获比较寄存器值除以自动重载值加 1。

也就是 Duty 等于 CCR 除以 ARR 加 1。

  1. PWM 分辨率计算

PWM 分辨率等于 1 除以自动重载值加 1。

也就是 Reso 等于 1 除以 ARR 加 1。

  1. 舵机控制

舵机是一种根据输入 PWM 信号占空比来控制输出角度的装置。

输入 PWM 信号要求周期为 20ms。

高电平宽度为 0.5ms 到 2.5ms。

通过改变高电平宽度,可以控制舵机转到不同角度。

  1. 直流电机控制

直流电机是一种将电能转换为机械能的装置。

有两个电极,当电极正接时电机正转,当电极反接时电机反转。

直流电机属于大功率器件,GPIO 口无法直接驱动。

需要配合电机驱动电路来操作。

TB6612 是一款双路 H 桥型的直流电机驱动芯片。

可以驱动两个直流电机并且控制其转速和方向。

七、输入捕获

输入捕获是定时器的另一个重要功能。

它可以用于测量 PWM 波形的频率、占空比、脉冲间隔、电平持续时间等参数。

  1. 输入捕获原理

输入捕获模式下,当通道输入引脚出现指定电平跳变时。

当前 CNT 的值将被锁存到 CCR 中。

通过计算两次捕获之间的 CNT 差值,就可以得到脉冲的宽度或周期。

每个高级定时器和通用定时器都拥有 4 个输入捕获通道。

  1. PWMI 模式

可配置为 PWMI 模式,同时测量频率和占空比。

PWMI 模式使用两个通道配合工作。

一个通道测量周期,另一个通道测量高电平宽度。

  1. 主从触发模式

可配合主从触发模式,实现硬件全自动测量。

主从触发模式可以让一个定时器的事件触发另一个定时器的操作。

这样可以减少 CPU 的干预,提高测量精度。

  1. 频率测量方法

测量频率有两种基本方法。

第一种是测频法。

在固定时间内计数脉冲个数,适合高频信号。

第二种是测周法。

测量一个脉冲的周期,然后取倒数得到频率,适合低频信号。

选择哪种方法取决于被测信号的频率范围。

八、术语汇总

以下是定时器相关的常用术语。

SYSCLK 是系统时钟。

CK_PSC 是预分频时钟。

PSC 是预分频寄存器。

CNT 是计数器。

CK_CNT 是计数器计数频率。

CK_CNT_OV 是计数器溢出频率。

ARR 是自动重装器。

CCR 是捕获比较寄存器。

ITR 是其他定时器。

TRGI 是触发输入。

TRGO 是触发输出。

ETR 是外部时钟。

小结

本篇我们全面解析了 STM32 的定时器。

包括定时器的三种类型、时基单元、PWM 输出和输入捕获。

定时器是嵌入式开发中最常用的外设之一。

掌握定时器的使用,可以实现精确定时、电机控制、频率测量等多种应用。

下一篇我们将学习嵌入式工程架构与代码规范。

敬请期待。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询