STM32 通用定时器基本原理(基于 STM32F1)
参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器
STM32 定时器分类
STM32F103 系列共有三类定时器:
🔎 通用定时器(TIM2~TIM5)是我们学习和使用最多的定时器。
STM32定时器:STM32F10x系列总共最多有8个定时器:
通用定时器主要特点
STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5) 定时器功能特点包括:
位于低速的APB1总线上(APB1)16位计数器(TIMx_CNT): [计数模式灵活:向上、向下、中心对齐]16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。可配置预分频器(TIMx_PSC):1~65535 :16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。4个捕获/比较通道(TIMx_CH1~CH4):4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:1. 输入捕获 2. 输出比较3. PWM 生成(边缘或中间对齐模式) 4. 单脉冲模式输出 支持外部触发(ETR、ITRx):可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。支持中断/DMA :如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): ① 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ② 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ③ 输入捕获 ④ 输出比较 ⑤ 支持针对定位的增量(正交)编码器和霍尔传感器电路 ⑥ 触发输入作为外部时钟或者按周期的电流管理
STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获) 或者 产生输出波形 (输出比较和 PWM) 等。
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
计数模式详解
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
① 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
② 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
③ 中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
模式 | 描述 |
---|---|
向上计数模式 | CNT 从 0 计到 ARR,溢出后回到 0,触发更新事件 |
向下计数模式 | CNT 从 ARR 计到 0,再跳回 ARR |
中心对齐模式 | CNT ↑ 到 ARR,再 ↓ 到 0,形成对称三角波计数 |
更新事件(UEV)在溢出/下溢时触发,可以用于控制中断、PWM更新等等。
通用定时器工作过程:
通用定时器结构图:
各个寄存器功能汇总
定时器结构主要包括以上几个模块:
1. 时基单元(定时器核心)计数器(CNT)预分频器(PSC)自动重装载寄存器(ARR)更新事件(UEV)
用于产生周期性事件(如中断、PWM更新等)2. 输入捕获单元(IC)检测外部引脚电平变化(上升/下降沿)记录 CNT 值,实现精确计时3. 输出比较单元(OC)当 CNT = CCRx 时,产生比较事件可输出特定脉冲、PWM、高低电平等4. PWM输出单元通过改变 ARR(周期)和 CCRx(占空比)实现 PWM 波形输出核心寄存器有:
TIMx_CNT 当前计数值
TIMx_PSC 预分频值(决定定时器时钟频率)
TIMx_ARR 自动重装载值(决定计数上限)
TIMx_CCRx 捕获/比较寄存器,用于输入捕获或 PWM 输出占空比
TIMx_CR1 控制寄存器,配置使能、计数模式等
TIMx_DIER 中断使能寄存器
TIMx_SR 状态寄存器,标志中断源
通用定时器工作过程:
1️⃣ 时钟源选定
定时器时钟 = 外设总线时钟(APB1) × 倍频因子(如2)
例如:APB1 = 36MHz,TIM2~5 定时器频率为 72MHz
2️⃣ 预分频器(TIMx_PSC)
将定时器时钟进一步分频,比如设置为 7199,就变成了 10kHz
3️⃣ 自动重装载(TIMx_ARR)
决定了 CNT 的最大值。例如 ARR = 999,计数从 0~999,共 1000 次
4️⃣ 更新事件(UEV)
每次 CNT 溢出都会触发更新事件,可用于中断、PWM刷新等
计数时钟的选择:
时基单元:
更新事件:
捕捉比较阵列:
PWM模式:
不同功能模块分别适用的场景:
场景 | 功能模块 | 说明 |
---|---|---|
周期中断 | 时基单元 | 通过 CNT+ARR+PSC 实现 1ms、1s 等周期事件 |
PWM 输出 | 输出比较 | 控制电机、LED 亮度等 |
输入捕获 | 捕获比较 | 测量波形周期、频率、脉宽 |
单脉冲输出 | 输出比较 | 产生一次性脉冲(如超声测距) |
STM32 通用定时器(TIM2~TIM5)是功能最强大、应用最广泛的定时器模块之一,支持定时、PWM、捕获、比较等多种功能,是嵌入式开发中不可或缺的核心外设。其中,STM32 定时器支持多达 8 种计数时钟来源,通过灵活配置选择器、触发器、滤波器等模块,能够实现丰富的定时、计数、同步、捕获等复杂功能;配置 STM32 的 TIM2 定时器 进入 输入捕获模式, 用于 测量脉冲宽度(高电平时间、低电平时间或整个周期);而时基单元是定时器的“心跳引擎”,通过 PSC、ARR 和 CNT 控制定时器的计数行为与中断频率,是实现周期性任务的基础;STM32 的更新事件(UEV)是控制定时器影子寄存器同步、触发中断、启动 DMA 和外设同步的核心机制,支持自动、软件、从模式等多种触发方式,并可通过 URS 精细控制;STM32 通用定时器的捕捉比较阵列(Capture/Compare Array,简称 CC 阵列) :捕捉比较阵列是定时器功能的核心模块,支持灵活配置为输入捕获或输出比较,通过滤波器、分频器、比较器等子模块实现精准的信号测量与控制输出;最后,STM32 的 PWM 模式通过定时器的输出比较功能实现,ARR 控制周期,CCRx 控制占空比,通过边沿/中心对齐实现不同波形特性,是控制电机、LED、蜂鸣器的核心技术。
以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!