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 系列的基本定时器有 TIM6TIM7,两者相互独立,不共享资源。


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、从模式触发都能触发。

相关推荐
Tech_D8 小时前
微米级的精准魔法:激光微加工,解锁高端制造新可能
人工智能·单片机·机器人·自动化·制造
小+不通文墨8 小时前
在树莓派中用*C语言*实现MQTT通信
c语言·经验分享·笔记·嵌入式硬件·学习
保安大队王队长8 小时前
对于单片机以及单片机的应用,要学的还有涉及到的电路都有哪些
单片机·嵌入式硬件
大卡片9 小时前
时钟控制器原理
单片机·嵌入式硬件
神仙别闹9 小时前
基于C语言来实现图形界面画板的功能
c语言·开发语言·单片机
xu_wenming9 小时前
zephyr从会用走向精通
c语言·嵌入式硬件·物联网
fengfuyao9859 小时前
STM32 控制 SG90 舵机指南
stm32·单片机·嵌入式硬件
高翔·权衡之境10 小时前
主题11:分层思想——OSI模型的现实映射
人工智能·嵌入式硬件·物联网·软件工程·信息与通信
战族狼魂10 小时前
上位机软件开发完整学习路线与项目实战指南
单片机·c#·wpf