STM32定时器完全指南:从基础原理到高级应用 | 零基础入门STM32第九十六步

主题 内容 教学目的/扩展视频
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)

你可能感兴趣的:(STM32入门教程(100步),stm32,驱动开发,嵌入式硬件,单片机,物联网)