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

定时器中断学习汇总

TIM简介
  • TIM(Timer)定时器
  • 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
  • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

定时器类型

STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

高级定时器

通用定时器

基本定时器

定时器中断基本结构

预分频器时序

计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

计数器时序

计数器无预装时序

计数器有预装时序

RCC时钟树

编码器接口介绍

Encoder Interface编码器接口
编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
每个高级定时器和通用定时器都拥有1个编码器接口两个输入引脚借用了输入捕获的通道1和通道2

正交编码器

输入捕获
  • IC(Input Capture)输入捕获
  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量

频率测量

输入捕获通道

“输入捕获通道”,一般是指 定时器(TIM)的输入捕获功能所用的通道


1. 输入捕获通道的概念

在 STM32(或 GD32、其他 MCU)里,定时器(TIM)有很多 通道(CH1、CH2、CH3、CH4)
这些通道既可以用来 输出比较(PWM 输出),也可以用来 输入捕获

  • 输入捕获:就是把外部信号的上升沿/下降沿“捕获”到定时器里,并记录下那个时刻的计数值(CNT)。

  • 这样 MCU 就能通过 比较两个捕获值的差值,来计算信号的周期、频率、占空比等。

2. 输入捕获通道的基本组成

每个定时器有若干个通道,例如 TIM2 有 4 个通道:

  • TIM2_CH1

  • TIM2_CH2

  • TIM2_CH3

  • TIM2_CH4

这些通道就叫 输入捕获通道

作用:

  • 通过 GPIO 引脚接收外部信号 → 输入到定时器的某个通道 → 硬件自动把计数器的值保存到捕获寄存器(CCR1、CCR2、CCR3、CCR4)。


3. 输入捕获通道的应用举例

测量外部信号频率

  • 比如用 TIM2_CH1 捕获上升沿信号,记录 t1、t2 两次的 CNT 值。

  • 周期 = t2 - t1

  • 频率 = 定时器时钟 / (t2 - t1)

测量脉宽(占空比)

  • 配置一个通道捕获上升沿,另一个通道捕获下降沿。

  • 两个捕获值相减就得到高电平持续时间。

  • 再结合周期就能得到占空比。

4. 举个具体的 STM32 例子

假如用 TIM3_CH2 (PB5) 做输入捕获:

  1. 配置 GPIO:

    • PB5 → 复用功能 → TIM3_CH2。

  2. 配置 TIM3:

    • 预分频器设置好,保证定时器计数频率合适。

    • 设置 TIM3_CH2 为输入捕获模式,捕获上升沿。

  3. 中断:

    • 当有外部信号输入时,中断触发,CCR2 自动存储捕获到的 CNT 值。

  4. 软件读取 CCR2 值进行计算。


5. 关键寄存器(以 STM32 为例)

  • CCMRx:通道模式寄存器 → 设置输入捕获模式/滤波器/分频

  • CCER:通道使能寄存器 → 选择上升沿/下降沿捕获

  • CCR1~CCR4:捕获寄存器 → 保存捕获的 CNT 值



总结:
输入捕获通道就是定时器的一个功能引脚,用来捕获外部信号的时刻,从而实现频率、周期、占空比等的测量。

主从触发模式

输入捕获基本结构

PWMI基本结构

编码器接口基本结构

工作模式

定时器编码器配置

http://www.dtcms.com/a/344680.html

相关文章:

  • 从快递运输与排队办事,看实时通信的MVP方案与增强方案
  • V380E telnet远程连接导致rce漏洞复现(CVE-2025-7503)
  • 【解决办法】wps的word文档编辑时字体的下方出现灰色的底色如何删除
  • 【字节拥抱开源】字节豆包团队开源豆包OSS大模型
  • 数学建模--Topsis
  • LLM实践系列:利用LLM重构数据科学流程04 - 智能特征工程
  • Redis事务与锁的顺序抉择:事务里加锁 vs 先锁再事务的“微妙差异”分享
  • C#自定义工具类-时间日期工具类
  • 【python与生活】如何用Python写一个简单的自动整理文件的脚本?
  • 常用 CMake 内置变量合集与说明
  • Python 环境变量:从基础到实战的灵活配置之道
  • Logstash——输出(Output)
  • Jenkins自动化部署服务到Kubernetes环境
  • 云计算学习100天-第27天
  • python程序函数计时
  • unity资源领取反作弊工具加密器
  • 递归思路:从DFS到二叉树直径的实战(通俗易懂)
  • redis设置密码及配置conf
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|21th Aug. , 2025
  • 异常值检测:孤立森林模型(IsolationForest)总结
  • 并发编程:浅析LockSupport工具
  • 大数据世界的开拓者:深入浅出MapReduce分布式计算经典范式
  • MyBatis-Flex
  • 【中微半导体】嵌入式C语言,函数指针表驱动状态机( 代码风格抽象,在 C 里模拟了“对象“、“多态“的效果)
  • 【日常学习】2025-8-22 类属性和实例属性+小白学调试
  • 数据结构 -- 树
  • Vue3+Ant-design-vue+SSE实现实时进度条
  • 前端快讯看这里
  • 基于导频的OFDM系统的信道估计(使用LS估计算法)
  • 突击复习清单(高频核心考点)