Skip to main content

TIM定时器

我们用去控制小风扇和舵机转起来!

up的视频讲解:

1 定时器 原理

1.1 定时器简介

定时器 即用来定时的器件,在STM32单片机定时器是一种外设。STM32F103C8T6总共有4个定时器,分别是

  • 1个高级定时器(TIM1)- 挂载在 APB2总线上

  • 3个通用定时器(TIM2、TIM3、TIM4)- 挂载在 ABP1总线上

定时器

定时器主要有一下3大功能, 本教程都安排了对应的实验

  • 定时中断 用于麦克风 ADC采集实验

  • PWM输出 用于电机, 舵机 PWM控制实验

  • 输入捕获 用于编码器 实验

我们需要掌握定时器的哪些知识呢?

  • 工作模式

    • 溢出模式:计数器计满最大值,清零并产生 中断/事件

    • 比较模式:计数器数值 = 预设比较值 时触发 中断/事件

软件定时器
  • 利用系SysTick(系统滴答定时器),在主循环里轮询时间差,纯软件判断是否超时

  • 优点:不占用硬件外设、数量不限、配置简单

  • 缺点:依赖主循环,程序阻塞时计时不准

1.2 什么是PWM?

PWM(Pulse Width Modulation,脉冲宽度调制),简单说就是用 “固定频率、可变占空比” 的方波

PWM

  • CNT计数值随着时间的推进会不断经历从0到ARR,清零复位再到ARR的这一过程

  • 通过调节ARR(Auto-Reload Register自动重装载寄存器)的值可以调节PWM的周期

  • 调节CCR(Capture/Compare Register捕获/比较寄存器)的值大小可以调节PWM占空比

1.2 计数模式 与 对齐模式

计数模式是 “计数器怎么数”,对齐模式是 “PWM 脉冲和周期起点的相对位置”,两者是因果关系

计数模式

计数模式

  • 中央对齐模式:计数器从0开始计数到自动重装载值ARR-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件, 然后再从0开始重新计数

  • 向上计数模式:计数器从0计数到自动重装载值ARR,然后重新从0开始计数并且产生一个计数器溢出事件

  • 向下计数模式:计数器从自动装入的值ARR开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件

对齐模式

对齐模式决定 PWM 脉冲的位置

  • 边沿对齐:PWM 脉冲的一个边沿(上升沿 / 下降沿)和周期起点(CNT=0 或 CNT=ARR)对齐

  • 中心对齐:PWM 脉冲以周期中点为中心,左右对称分布

1.4 定时器计算公式

  1. 定时器频率

定时器频率CK_CNT = 定时器输入时钟 / (PSC + 1)

  • 定时器输入时钟:APB1 或 APB2 时钟(常用72MHz)

  • PSC:预分频器(0~65535)

  1. 定时周期

定时周期 = (PSC + 1) * (ARR + 1) / 定时器输入时钟

  • ARR:自动重装载值
  1. PWM 频率

PWM频率 = 定时器频率CK_CNT / (ARR + 1)

PWM频率 = 定时器输入时钟 / [(PSC + 1) * (ARR + 1)]

  1. PWM 占空比

占空比 = CRR / (ARR + 1)

tip

中心对齐时,周期会变长一倍

2 高级定时器

高级定时器

高级定时器是最复杂的, 通用定时器基本定时器都是对它功能的裁剪,我们可以把它分为四个部分来看

2.1 时钟来源

时钟来源

  • 内部时钟(CK_INT):由 RCC 外设提供, 所有定时 / PWM 功能默认都用它。

  • 外部触发时钟(ETR): 把外部 ETR 引脚的脉冲作为时钟源

  • 内部互联触发(ITR0~ITR3):来自其他定时器(比如 TIM2、TIM3 等)的内部触发信号, 实现定时器级联,

  • 编码器接口时钟(TI1FP1/TI2FP2): 直接支持正交编码器输入,把编码器的 A/B 相脉冲转换成计数时钟,实现电机位置 / 速度测量

  • 同步输出(TRGO)把定时器的溢出 / 比较事件同步触发给外设

2.2 时基单元

定时器配置

这是定时器的 “心脏”,决定了定时周期、溢出频率,是所有功能的基础

  • PSC预分频器: 间的任意值进行分频,可在运行时改变其设置值

  • CNT 计数器: 核心计数寄存器,按 CK_CNT 脉冲计数 支持向上 / 向下 / 中央对齐计数

  • ARR自动重装载寄存器: 设定计数上限,CNT 计数到 ARR 时触发更新事件 决定定时周期的核心参数

  • REP 重复计数器(高级定时器特有): 设置 “每溢出 N 次才触发一次更新”,减少中断频率

  • 计数模式:

    • 向上计数:CNT 从 0 递增到 ARR,溢出后归零

    • 向下计数:CNT 从 ARR 递减到 0,下溢后回到 ARR

    • 中央对齐模式:CNT 从 0 递增到 ARR,再递减到 0

2.3 定时器输入

定时器输入

这部分是 “输入捕获” 通道,用于测量外部信号的频率、脉宽、周期等参数, 信号处理流程:

  • 外部信号从TIMx_CH引脚进入

  • 滤波与边沿检测, 生成TI1FP信号

  • 经过Prescaler分频,降低捕获触发频率;

  • 硬件自动将当前CNT的值锁存Capture/Compare Register

2.4 定时器输出

定时器输出

高级定时器的输出,核心是基于计数器 CNT 和捕获 / 比较寄存器 CCRx 的比较结果,来控制引脚电平

  • 当计数器 CNT 的值,和 CCRx 寄存器的值匹配时

  • 硬件会自动改变输出状态,从而生成 PWM 脉冲、定时信号等

  • DTG死区时间(高级定时器特有): 就是互补信号切换时,插入的一小段 “上下管都关断” 的时间,防止电源直通烧毁 MOS 管

  • BRK刹车保护(高级定时器特有): 是一个硬件引脚,当外部故障(过流、过温)触发时,会瞬间强制关闭所有 PWM 输出,把驱动管拉到安全电平

3 通用定时器

通用定时器

通用定时器和高级定时器只是缺少了一些部件, 整体框架结构都相同

  • REP 重复计数器(高级定时器特有): 设置 “每溢出 N 次才触发一次更新”,减少中断频率

  • DTG死区时间(高级定时器特有): 就是互补信号切换时,插入的一小段 “上下管都关断” 的时间,防止电源直通烧毁 MOS 管

  • BRK刹车保护(高级定时器特有): 是一个硬件引脚,当外部故障(过流、过温)触发时,会瞬间强制关闭所有 PWM 输出,把驱动管拉到安全电平

4 基本定时器

基本定时器

(F103C8T6型号没有)基本定时器就简单很多, 相当于将高级定时器裁剪到只留下 时钟来源 + 时基单元

  • 使能后,CNT从 0 开始,按CK_CNT脉冲递增计数

  • 当CNT的值等于ARR的值时,触发更新事件

  • CNT自动清零,重新开始计数

5 定时器相关外设

  • 实时时钟(RTC): 独立于主系统时钟的低功耗计数器,通常由 32.768kHz 晶振(LSE) 或内部低速 RC(LSI)驱动

  • 独立看门狗(IWDG): 由独立低速 RC 时钟(LSI, 40kHz)驱动的递减计数器,一旦启动就无法关闭。程序必须在规定时间内定期 “喂狗”(重置计数器),否则计数器归零后触发系统复位。

  • 窗口看门狗(WWDG): 由 APB1 时钟驱动,有一个 “喂狗窗口”—— 程序必须在计数器递减到指定上界和下界之间喂狗,提前或超时喂狗都会触发复位。

PWM 电机控制实验

PWM 舵机控制实验