【STM32】通用定时器基本原理

发布于:2025-07-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

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、蜂鸣器的核心技术。

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!


网站公告

今日签到

点亮在社区的每一天
去签到