TIM控制器原理

一、介绍

1.1 对信号进行计时

定时器可以测量外部输入信号的时间参数,包括:

功能 说明 应用场景
输入捕获 测量信号上升沿或下降沿到来的时刻 计算脉冲宽度、频率测量
PWM输入捕获 同时捕获周期和占空比 测量PWM信号的高电平时间和低电平时间
测量脉宽 记录两个边沿之间的时间差 解码遥控器信号(如红外、接收机PWM)
测频率 在固定时间内统计脉冲个数 测量电机转速编码器反馈、外部脉冲计数

举例:

  • 测量电机编码器输出脉冲的频率 → 计算出转速

  • 测量舵机控制信号的脉宽(1ms~2ms) → 转换为角度


1.2 读取信号时间

定时器可以按固定的时间间隔去读取外部信号状态,并做出响应:

功能 说明 应用场景
输出比较 定时到达设定值时翻转或改变IO口状态 产生PWM波(舵机、电机调速、LED调光)
周期中断 每次计数溢出时产生中断 固定时间间隔采样、系统心跳、按键扫描
单脉冲模式 到达设定时间后输出一个单次脉冲 触发其他设备动作、延时控制

举例:

  • 设定每1ms产生一次中断 → 读取传感器数据(如加速度计)

  • 输出比较产生50Hz、占空比可调的PWM → 控制舵机角度

1.3 软件定时缺陷

1.定时不准:涉及到入栈和出栈

2.CPU死等:浪费资源

1.4 核心组成

组成部分 作用
时钟 提供稳定的计数脉冲(如1MHz、1kHz),决定计数速度
计数器 在每个时钟脉冲到来时,计数值加1(或减1)(可能有多种计数方式)
重装载值 设定计数器的计数目标(计到多少时产生事件)
中断 计数器达到重装载值时触发,通知CPU执行任务

1.5 工作流程

复制代码
时钟脉冲 → 计数器不断累加 → 计数值 == 重装载值 → 触发中断 → 计数器清零重来
  1. 时钟 提供稳定的脉冲信号

  2. 计数器 每来一个脉冲就加1

  3. 当计数值达到 重装载值 时

  4. 产生 中断(或触发事件)

  5. 计数器清零,重新开始计数

1.6 定时器分类

1.6.1 常规定时器

定时器类型 核心功能 特有功能 典型应用
基本定时器 只有计数功能,无输入捕获和输出比较 结构简单,可触发DAC 基础定时、DAC触发
通用定时器 计数 + 输入捕获 + 输出比较 + PWM 功能灵活,可测信号、可输出PWM 信号捕获、PWM生成(电机、背光)
高级定时器 通用定时器的全部功能 死区时间控制、刹车机制 电机控制、复杂功率信号、需要安全机制的应用

二、基本定时器

2.1 基本定时器

STM32F4xx 系列的基本定时器有 TIM6 和 TIM7,两者相互独立,不共享资源。


2.2 两大核心功能

功能 说明
生成时基(定时) 提供精准的时间基准,实现定时功能
驱动 DAC 内部连接到 DAC,可通过触发输出驱动数模转换器

2.3 主要特性

特性 说明
计数器 16 位,递增计数
自动重装载 计到设定值后自动清零重新开始
预分频器 16 位可编程,分频系数 1~65536,运行时可修改; 降低时钟频率,让定时时间可以更长
触发输出 可触发 DAC 进行数模转换
中断/DMA 计数器上溢(计满)时,可产生中断或 DMA 请求

基本定时器结构框图

2.4 基本定时器组成

2.4.1 时钟源

基本定时器(TIM6/TIM7)的时钟源(CK_INT)来源于 APB1 总线时钟。

2.4.2 预分频器(PSC)

对定时器输入时钟(CK_INT)进行分频,降低频率,实现更灵活的时间控制。

关键规则

项目 说明
时钟源 APB1 总线时钟
寄存器 TIMx_PSC
实际分频值 TIMx_PSC + 1
分频范围 1 ~ 65536
PSC = 0 不分频,时钟最快
PSC 越大 时钟越慢,定时时间越长
一句话 预分频器对 APB1 时钟进行分频,实际分频值 = PSC寄存器值 + 1

影子寄存器

项目 说明
分频范围 1 ~ 65536
控制方式 TIMx_PSC 寄存器的 16 位值
实时更改 支持(因为有缓冲)
生效时机 下一更新事件发生时,预分频器的值先更新到影子寄存器,实际输出分频 = 影子寄存器值 + 1

2.4.3 计数器

项目 说明
时钟来源 预分频器输出 CK_CNT
计数模式 仅支持递增计数(基本定时器)
计数寄存器 TIMx_CNT
启动条件 TIMx_CR1 寄存器中的 CEN 位置 1
启动延迟 CEN 置 1 后,一个时钟周期后计数器才真正开始
计数范围 从 0 → 自动重载值(TIMx_ARR)(实际计数要减一,因为从0开始)
上溢事件 计到 ARR 后,下一时钟回到 0 并产生上溢事件

TIMx_CNT存放计数器的值;TIMx_ARR存放的是用户设计的目标值

时序图

CNT_EN 是计数器使能信号,CEN 置 1 后一个时钟周期有效,高电平期间计数器正常工作。

2.4.4 自动重载器

项目 说明
作用 控制计数器的最大计数值,决定溢出时间
寄存器 TIMx_ARR(预装载寄存器)
影子寄存器 实际生效的寄存器,预装载寄存器的值在更新事件时传入
溢出条件 TIMx_CNT = TIMx_ARR
溢出后 CNT 自动清零,产生更新事件(UEV)
预装载生效方式 由 TIMx_CR1 寄存器的 ARPE 位控制
ARPE = 0 或后为1;写入 ARR 后立即生效(直接进影子寄存器)
ARPE = 1 或后为0;写入 ARR 后,等**下一次更新事件(UEV)**时才生效
更新事件产生条件 计数器上溢 且 TIMx_CR1 寄存器中的 UDIS 位 = 0
软件更新 也可通过软件产生更新事件

2.5 UEV 事件的产生

项目 说明
UEV来源1 计数器上溢(CNT = ARR)
UEV来源2 软件手动触发(TIMx_EGR 寄存器的 UG 位置 1)
允许产生条件 TIMx_CR1 寄存器中的 UDIS = 0
禁止产生条件 TIMx_CR1 寄存器中的 UDIS = 1
UDIS = 0 时 上述两种来源都能正常产生 UEV
UDIS = 1 时 上述两种来源都无法产生 UEV

2.6 定时周期计算公式

2.7 单脉冲模式(OPM)

项目 说明
控制位 TIMx_CR1 寄存器的 OPM 位(位3)取决于 TIMx_CR1.OPM 位域
OPM = 0 计数器在发生更新事件时不会停止,继续循环计数(连续模式)
OPM = 1 计数器在发生下一更新事件时自动停止(CEN 位被清零),只运行一个周期

2.8 更新中断和DMA请求

项目 说明
控制位 TIMx_CR1 寄存器的 URS 位
URS = 1 只有计数器上溢时,才产生更新中断和DMA请求
URS = 0 以下所有 事件都会产生更新中断和DMA请求: ① 计数器上溢 ② 软件将 UG 位置 1 ③ 从模式控制器生成的更新事件
上溢时机 CNT = ARR 后,下一个时钟周期产生溢出(共计了 ARR+1 个数)
前提条件 UDIS = 0(允许产生更新事件)

URS = 1 时只有上溢才触发中断/DMA;URS = 0 时上溢、手动UG、从模式触发都能触发。

相关推荐
嵌入式分享16 小时前
嵌入式分#49:浅 8080,RGB,LVDS 与 MIPI 显口
嵌入式硬件·lcd
szarron16 小时前
VNA6 便携式矢量网络分析仪|1MHz‑6.3GHz 手持 VNA 真实应用场景全解析
前端·嵌入式硬件·信息可视化·数据挖掘·数据分析
゛凌乱的记忆づ17 小时前
50元从零到成品:一套AI辅助的嵌入式实战入门教程——ADC采集篇
stm32·单片机·嵌入式硬件
女神下凡17 小时前
芯参谋(31):SPI NOR Flash 电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
csg110718 小时前
上电没反应、运行中死机、现场“抽风”——单片机控制板异常排查六步法
单片机·嵌入式硬件
小程序设计18 小时前
基于单片机的恒温水箱设计
单片机·嵌入式硬件
小程序设计19 小时前
基于单片机的大棚温湿度自动监控系统
单片机·嵌入式硬件
XiHongShi20161 天前
STM32F407 CRC-循环冗余校验例程,建议保存学习
stm32·单片机
lhbweilai1 天前
结合手册调试各个功能的寄存器+最后通过寄存器编写SPI的初始化和读写函数
stm32·单片机
小程序设计1 天前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机