STM32定时器详解:从基本原理到高级应用实践,零基础入门指南(第96步)

主题 内容 教学目的/扩展视频
TIM定时器重点课程 定时器,捕获器,比较器,PWM,单脉冲。高级TIM。定时器中断。 了解TIM使用

师从洋桃电子,杜洋老师


📑文章目录

  • 一、定时器核心原理
  • 1.1 硬件架构解析
  • 1.2 核心参数公式
  • 二、定时器三大功能矩阵
  • 2.1 功能对比表
  • 2.2 应用场景拓扑图
  • 三、普通定时功能实践
  • 3.1 定时器工作流程
  • 3.2 配置要点说明
  • 四、输入捕获深度解析
  • 4.1 脉冲测量原理
  • 4.2 工业级应用案例
  • 五、输出比较与PWM实战
  • 5.1 PWM生成机制
  • 5.2 高级PWM应用
  • 六、程序架构解析
  • 6.1 初始化流程
  • 6.2 关键代码片段
  • 七、扩展应用与优化
  • 7.1 高级应用场景
  • 7.2 性能优化技巧
  • 八、常见问题解答
  • 附:定时器寄存器速查表
  • 九、相关资源

  • 一、定时器核心原理

    1.1 硬件架构解析

    溢出

    匹配

    捕获

    时钟源

    预分频器

    计数器

    中断/DMA

    输出比较

    输入捕获

    1.2 核心参数公式

    定时周期计算公式

    T = \frac{(ARR+1) \times (PSC+1)}{F_{CLK}}
    
  • ARR:自动重装载值(0-65535)
  • PSC:预分频系数(0-65535)
  • F_CLK:输入时钟频率(单位:Hz)
  • 二、定时器三大功能矩阵

    2.1 功能对比表

    功能类型 触发机制 典型应用场景 关键寄存器
    普通定时 计数器溢出触发 系统心跳/延时控制 TIMx_ARR, TIMx_PSC
    输入捕获 边沿触发捕获 脉冲宽度/频率测量 TIMx_CCR, TIMx_SR
    输出比较/PWM 比较匹配触发 电机控制/LED调光 TIMx_CCMR, TIMx_CCER

    2.2 应用场景拓扑图

    工业控制

    电机PWM驱动

    编码器信号解析

    机械臂控制

    转速测量

    消费电子

    呼吸灯效果

    触摸按键检测

    三、普通定时功能实践

    3.1 定时器工作流程

    MCU

    Timer

    配置ARR=9999, PSC=7199

    使能更新中断

    72MHz/7200=10KHz

    每次计数0.1ms

    10000次后溢出(1秒)

    触发TIM3中断

    执行LED翻转程序

    MCU

    Timer

    3.2 配置要点说明

  • 时钟源选择:APB1总线时钟(最大72MHz)
  • 计数模式:向上计数/向下计数/中央对齐
  • 中断优先级:需合理配置NVIC抢占优先级
  • 四、输入捕获深度解析

    4.1 脉冲测量原理

    graph LR
        A[信号输入] --> B{边沿检测}
        B -->|上升沿| C[记录T1]
        B -->|下降沿| D[记录T2]
        D --> E[脉宽=T2-T1]
        C -->|周期测量| F[记录T3]
        F --> G[频率=1/(T3-T1)]
    

    4.2 工业级应用案例

    1. 超声波测距:测量回波时间差
    2. 旋转编码器:解析正交信号
    3. 电源管理:检测电压过零时刻

    五、输出比较与PWM实战

    5.1 PWM生成机制

    CCR匹配

    计数器

    比较寄存器CCR

    电平翻转

    生成PWM波形

    ARR值

    决定周期

    决定占空比

    5.2 高级PWM应用

    模式类型 波形特点 适用场景
    边沿对齐 固定频率可变占空比 LED调光
    中央对齐 对称波形减少谐波 电机驱动
    互补输出 带死区控制的互补信号 H桥电路

    六、程序架构解析

    6.1 初始化流程

    使能时钟

    配置时基参数

    设置工作模式

    配置中断/DMA

    启动定时器

    6.2 关键代码片段

    // 定时器初始化示例
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_Period = 9999;       // 1秒周期
    TIM_InitStruct.TIM_Prescaler = 7199;    // 7200分频
    TIM_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_InitStruct);
    
    // 中断服务函数示例
    void TIM3_IRQHandler(void) {
        if(TIM_GetITStatus(TIM3, TIM_IT_Update)) {
            GPIO_WriteBit(LED_PORT, LED_PIN, !GPIO_ReadOutputDataBit(LED_PORT, LED_PIN));
            TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
        }
    }
    

    七、扩展应用与优化

    7.1 高级应用场景

  • 多定时器同步:主从模式实现精密时序控制
  • DMA传输:自动更新PWM参数无需CPU干预
  • 低功耗整合:在停机模式下保持定时器运行
  • 7.2 性能优化技巧

    优化方向 实施方法 效果提升
    中断效率 使用DMA替代中断 减少CPU负载
    精度提升 启用重复计数器 扩展定时范围
    功耗控制 动态调整预分频值 平衡性能与功耗

    八、常见问题解答

    Q1:定时器中断响应不及时?

  • 检查NVIC优先级设置
  • 优化中断服务程序长度
  • 确认未关闭全局中断
  • Q2:PWM输出频率偏差大?

  • 校准时钟源精度
  • 检查ARR和PSC计算
  • 使用示波器实际测量
  • Q3:输入捕获值跳变异常?

  • 增加数字滤波器
  • 检查信号边沿质量
  • 配置合适的触发极性
  • 附:定时器寄存器速查表

    寄存器 功能描述 访问方式
    TIMx_CR1 控制寄存器1 读写
    TIMx_SMCR 从模式控制寄存器 特殊配置
    TIMx_DIER DMA/中断使能寄存器 事件控制
    TIMx_CCMR1/2 捕获/比较模式寄存器 通道配置

    九、相关资源

    [1] 洋桃电子B站课程-STM32入门100步
    [2] STM32官方文档手册
    [3] STM32F103固件函数库用户手册(中文)
    [4] 定时器中断测试程序
    [5] 定时器原理与应用.pptx


    💬 技术讨论(请在评论区留言~)


    📌 下期预告:下一期将探讨CRC与芯片ID原理,欢迎持续关注!

    点击查阅🔍往期【STM32专栏】文章

    版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
    实测开发版:洋桃1号开发版(基于STM32F103C8T6)
    更新日志

  • v1.0 初始版本(2025-04-08)
  • 作者:触角01010001

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32定时器详解:从基本原理到高级应用实践,零基础入门指南(第96步)

    发表回复