第六章第一节 TIM 定时中断
一、TIM(Timer) 定时器简介
① 定时器可以对输入的时钟进行计数、并在计数值达到设定值时触发中断(定时触发中断)
② 16 位计数器、预分频器、自动重装寄存器的时基单元,在 72MHZ 计数时钟下可以实现最大 59.65s 的定时
③ 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
④ 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
二、基本定时器
1. 定时器核心工作流程
① 时钟输入:外部/内部高频率时钟信号输入(如 72MHz)
② 预分频器(PSC):
(1) 作用:降低时钟频率
(2) 公式:实际频率 = 输入频率 / (PSC + 1)
(3) 示例:
- PSC = 0 → 2分频(72MHz → 36MHz)
- PSC = 1 → 3分频(72MHz → 24MHz)
③ 计算器(CNT)
(1) 接收分频后的时钟(CK_CNT)
(2) 自动重装寄存器(ARR)
- 设定计数器的最大值(如65535)
- 计数达到此值时:自动重置计算器,触发“更新中断”
2. 主模式触发 DAC 的功能:能让内部的硬件在不受程序的控制下实现自动运行
三、通用定时器
1. 时钟源输入:
① 内部时钟(CK_INT):由 RCC 提供的 TIMxCLK 经系统总线驱动,为定时器默认计数基准,稳定且可控。
② 外部触发(ETR):支持外部引脚输入,可配置极性(上升 / 下降沿)、滤波(消抖)、预分频,适配外部异步信号(如编码器、脉冲触发)
③ 内部触发
2. 捕获 / 比较通道(CC1 - CC4)
① 输入捕获模式:
(1) 流程:通道引脚(TIMx_CHx)信号经滤波、边沿检测后、触发 CNT 值锁存至捕获 / 比较寄存器(CCR),用于频率测量(周期差法)、脉宽测量(上升沿 → 下降沿时间差),适配红外解码、编码器测速等场景。
(2) 预分频与滤波:支持通道级信号调理,消抖并控制捕获触发频率(如每 2 个边沿触发一次捕获),提升抗干扰能力。
② 输出比较模式:
(1) 原理:CNT 与 CCR 值实时比较,触发输出控制模块翻转电平、置位 / 复位,生成 PWM 波形(占空比 = CCR/ARR)、电平翻转信号,直接驱动电机、LED 等外设
(2) 极性与使能:可配置输出高 / 低有效,独立使能通道输出,灵活构建多路 PWM(如电机三相驱动)
四、时序
1. 预分频器时序
① 预分频缓冲器:
(1) 预分频缓冲器主要用于暂存分频器的有效配置参数,避免在写入新参数时,立即改变预分频器的工作状态,导致计数器工作出现紊乱。它保证了预分频器在参数更新时,能够按照一定的时序稳定切换工作模式,确保整个定时器系统稳定、有序地运行。
(2) 工作过程:
- 初始状态:假设一开始预分频控制寄存器的值为 PSC = 1,预分频缓冲器也加载了这个值,此时预分频器按照 CK_CNT = CK_PSC / (1+1) 的规则,对输入时钟
CK_PSC
进行分频,输出定时器时钟CK_CNT
,计数器在CNT_EN
使能的情况下,按照这个分频后的时钟频率进行计数。 - 写入新参数:当向预分频控制寄存器写入新的参数值(比如
PSC = 2
)时,新值并不会立即生效,而是先被存储在预分频控制寄存器中。这时候,预分频缓冲器依然保持原来的参数值(PSC = 1
),继续按照原有的分频规则输出CK_CNT
,保证计数器能够继续稳定地工作,不会因为新参数的写入而立即改变工作节奏。 - 更新事件触发: 当计数器的计数值达到自动重装载值(
ARR
)并产生溢出,从而触发更新事件(UEV)时,预分频缓冲器才会从预分频控制寄存器中加载新的参数值(PSC = 2
)。加载完成后,预分频器开始按照新的分频规则CK_CNT = CK_PSC / (2 + 1)
对输入时钟CK_PSC
进行分频,输出新频率的定时器时钟CK_CNT
,计数器也随之按照新的时钟频率进行计数。
2. 计数器时序
① 中断标志
(1) 定义与本质:中断标志是硬件在特定事件发生时,向软件主动发起通知的 “状态标记”,存储于定时器状态寄存器中(如 TIMx_SR 的 UIF 位 )。本质是硬件与软件交互的 “信号桥梁”,标志特定事件(如计数器溢出)已发生,需软件响应。
(2) 触发机制:当定时器满足预设条件(如计数器从自动重装值 ARR 溢出归 0 ),硬件自动将中断标志位(UIF)置 1。
(3) 关键特性:手动清零
- 自动保持性:UIF 置 1 后,会持续保持高电平,不会自动归 0 。若不手动清除,会导致:重复触发中断
- 清零方式:软件通过写操作清除
五、时钟树
1. 关键 “特殊规则” :
① APB 分频的 “倍频补偿”
如果 APB 总线分频器(如 APB1 分频 /2
),定时器时钟(TIMxCLK)会自动 ×2 。
→ 例:HCLK=72MHz,APB1 分频 /2
→ APB1 总线时钟是 36MHz,但定时器时钟是 72MHz(保证定时精度)。
② 低速时钟的独立用途:
(1) LSE:专给 RTC 实时时钟,断电也能走(靠电池),实现 “日历 / 闹钟” 功能。
(2) LSI:给 独立看门狗(IWDG),无需主时钟也能工作(防止程序跑飞)。