当前位置: 首页 > news >正文

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_DIERDMA/中断使能寄存器事件控制
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)

相关文章:

  • 海外高防服务器延迟优化——跨国业务安全加速的底层逻辑
  • DIY AI ML:K-Means 算法
  • HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
  • R语言 | 2d概率密度分布图
  • 牛客 226303 【模板】差分
  • SPI通信
  • 重头学java cpu内存硬盘的关系
  • 深度集成学习不均衡样本图像分类
  • Java Functional Interface 函数式接口
  • 大文件断点续传
  • 011_异常、泛型和集合框架
  • 大数据(5)(基础概念)Spark从入门到实战:核心原理与大数据处理实战案例
  • 【算法】前缀和(下)
  • 【Django】教程-12-柱状图
  • 5.JVM-G1垃圾回收器
  • 顺序栈简记
  • 为什么选择Redis?解析核心使用场景与性能优化技巧
  • QML面试笔记--UI设计篇02布局控件
  • 山东大学计算机网络第五章习题解析
  • 虚拟表、TDgpt、JDBC 异步写入…TDengine 3.3.6.0 版本 8 大升级亮点
  • 做购物网站公司/百度明星人气榜
  • 邢台市路桥建设公司网站/seo推广是什么
  • wordpress两个主题混合/廊坊网站seo
  • 昆明排名推广/百度seo排名工具
  • 做搜狗网站优化首页软/市场营销实际案例
  • 小白怎么建设网站/线上广告接单平台