STM32定时捕获详解
好的,我们来详细解释一下 STM32 微控制器中的定时器捕获(Timer Capture)功能。这是定时器模块中非常强大且实用的功能,常用于精确测量外部信号的频率、周期、占空比或脉冲宽度。
核心概念:
定时器捕获的核心思想是利用定时器的计数器(CNT)作为时间基准。当外部信号发生指定的边沿事件(上升沿、下降沿或双边沿)时,捕获单元会瞬间锁存当前定时器计数器 (CNT) 的值到一个专用的捕获/比较寄存器 (CCRx) 中,并可能触发中断或 DMA 请求。通过读取两次(或多次)捕获事件发生时锁存的 CCRx 值,结合定时器的计数频率 (CK_CNT),就可以计算出两次事件之间的时间间隔。
涉及的定时器资源:
- 定时器计数器 (
CNT): 核心的时间基准,通常由内部时钟源 (CK_INT) 或外部时钟源 (ETR) 驱动递增(向上计数模式最常见)。 - 捕获/比较通道: 每个定时器通常有多个捕获/比较通道(如 TIMx_CH1, TIMx_CH2, ...)。捕获发生时,当前
CNT值会被复制到对应的CCRx寄存器。 - 捕获输入: 外部信号连接到特定的定时器通道引脚(如 PA0, PA1, ... 映射到 TIMx_CHx)。
- 输入滤波器: 用于滤除输入信号上的高频毛刺,防止误触发。
- 边沿检测器: 检测输入信号的上升沿、下降沿或双边沿。
- 预分频器 (
PSC): 用于降低输入到计数器 (CNT) 的时钟频率 (CK_CNT = CK_PSC / (PSC + 1)),从而扩大定时器的测量范围。 - 自动重装载寄存器 (
ARR): 定义计数器CNT计数到多少后自动归零(向上计数模式),决定了计数器溢出前的最大计数值。 - 中断/DMA 控制: 捕获事件可以配置为产生中断或触发 DMA 传输,通知 CPU 有新数据 (
CCRx) 需要处理。
工作原理详解:
-
配置定时器基础:
- 选择时钟源 (
CK_PSC)。 - 设置预分频器 (
PSC) 值,得到计数器时钟CK_CNT。 - 设置自动重装载值 (
ARR),决定计数器溢出周期。 - 启动计数器 (
CEN=1)。
- 选择时钟源 (
-
配置捕获通道:
- 输入映射: 通过
CCMRx寄存器配置该通道为输入捕获模式 (CCxS[1:0] = 01或10,选择有效的输入源 TIx)。 - 边沿选择: 通过
CCER寄存器设置捕获极性 (CCxP和CCxNP)。例如:CCxP=0, CCxNP=0: 上升沿捕获。CCxP=1, CCxNP=0: 下降沿捕获。CCxP=0, CCxNP=1: 双边沿捕获。
- 输入滤波: 通过
CCMRx寄存器设置ICxF位,选择输入滤波器参数(采样频率和采样次数)。这对于滤除信号抖动非常关键。 - 分频: 通过
CCMRx寄存器设置ICxPSC位,可以选择每 N 个有效的边沿事件才进行一次捕获(在测量低频信号且关注事件次数时有用)。 - 中断/DMA 使能: 在
DIER寄存器中使能捕获完成中断 (CCxIE=1) 或捕获 DMA 请求 (CCxDE=1),以便在捕获发生后及时读取CCRx值。 - 使能捕获: 在
CCER寄存器中设置CCxE=1,使能该通道的捕获功能。
- 输入映射: 通过
-
捕获流程:
- 计数器
CNT在CK_CNT驱动下不断计数。 - 当配置好的外部信号边沿事件(如上升沿)发生在捕获通道的输入引脚上时...
- 边沿检测器检测到该事件。
- 锁存动作: 瞬间将当前计数器
CNT的值复制到对应的捕获/比较寄存器CCRx中。 - 标志位置位: 状态寄存器 (
SR) 中的捕获/比较标志CCxIF被置1。 - 触发中断/DMA (可选): 如果相应中断 (
CCxIE) 或 DMA (CCxDE) 被使能,则触发中断服务程序 (ISR) 或 DMA 传输请求。 - 在 ISR 或 DMA 传输的目标缓冲区中,程序可以读取
CCRx的值(读取CCRx通常会自动清除CCxIF标志,具体看参考手册)。
- 计数器
-
测量计算:
- 周期/频率测量:
- 配置为上升沿捕获。
- 第一次捕获(时间点 T1):读取
CCRx1。 - 第二次捕获(时间点 T2):读取
CCRx2。 - 两次上升沿之间的计数差值:
Delta = CCRx2 - CCRx1(假设CCRx2 > CCRx1且CNT未溢出)。 - 实际时间间隔:
Period = Delta * (1 / CK_CNT) = Delta * ( (PSC + 1) / CK_PSC ) - 信号频率:
Frequency = 1 / Period - 注意计数器溢出: 如果两次捕获之间
CNT发生了溢出(Delta看起来会是负值),实际差值应为Delta = (ARR + 1) - CCRx1 + CCRx2。通常需要软件记录溢出次数 (Update事件中断) 来计算Delta = (OverflowCount * (ARR + 1)) + CCRx2 - CCRx1。
- 脉冲宽度测量 (占空比):
- 配置为双边沿捕获。
- 上升沿捕获:读取
CCRx_rising。 - 下降沿捕获:读取
CCRx_falling。 - 高电平时间:
HighTime = (CCRx_falling - CCRx_rising) * (1 / CK_CNT)(同样需处理溢出)。 - 周期:
Period = (Next_CCRx_rising - CCRx_rising) * (1 / CK_CNT)(同样需处理溢出)。 - 占空比:
DutyCycle = (HighTime / Period) * 100%.
- 外部事件间隔: 测量任意两个指定边沿事件之间的时间差,原理与周期测量类似。
- 周期/频率测量:
关键配置点与注意事项:
- 时钟配置:
CK_CNT的频率 (CK_PSC和PSC) 直接决定测量的精度和范围。频率越高,精度越高,但计数器溢出更快,测量范围变小;频率越低,范围越大,精度越低。需要根据待测信号的频率范围权衡。 - 输入滤波: 对于有噪声或抖动的信号,必须配置适当的输入滤波器 (
ICxF),否则会导致多次误触发,测量结果严重错误。滤波参数要根据信号特性和噪声情况选择。 - 溢出处理: 这是编写捕获程序最容易出错的地方。必须考虑计数器在两次捕获事件之间发生溢出的情况。通常需要:
- 使能定时器的更新中断
UIE(DIER寄存器)。 - 在更新中断 (
UpdateISR) 中维护一个溢出计数器变量 (OverflowCount)。 - 在捕获中断 (
CCxISR) 中计算差值时,结合OverflowCount和CCRx的值来计算真实的计数跨度Delta。
- 使能定时器的更新中断
- 双边沿捕获模式: 使用双边沿捕获测量脉冲宽度非常方便。STM32 的定时器通道可以在一次配置下自动捕获连续的上升沿和下降沿,交替更新
CCRx的值(每次捕获事件都会翻转预设的捕获极性和标志位)。 - 捕获分频 (
ICxPSC): 用于捕获事件本身的分频。例如ICxPSC=3表示每 4 个边沿才触发一次捕获锁存和中断。这在只需要统计事件次数或测量低频信号时可以减少中断负担。 - 读取顺序: 在 ISR 中读取
CCRx的值通常是安全的。如果需要在主循环中轮询CCxIF标志,读取CCRx后应确保及时清除标志(通常读取CCRx会清除标志,但需确认参考手册)。 - 引脚复用与配置:
- 确保外部信号连接到正确的定时器通道引脚。
- 配置 GPIO 为复用功能模式 (
AF),并选择正确的复用功能映射 (AFx)。 - 根据信号特性配置 GPIO 速度、上/下拉电阻(通常设置为浮空输入或带上拉/下拉即可)。
- 库的使用:
- 标准外设库 (SPL): 需要用
TIM_ICInitTypeDef结构体配置通道,然后调用TIM_ICInit()。需要手动编写中断服务函数。 - HAL/LL 库: 提供了更高级的封装函数 (如
HAL_TIM_IC_Start_IT())。使用回调函数机制 (HAL_TIM_IC_CaptureCallback())。
- 标准外设库 (SPL): 需要用
总结:
STM32 的定时器捕获功能通过精确锁存外部信号边沿到来时刻的计数器值,为高精度时间测量提供了硬件支持。其核心是配置捕获通道(输入映射、边沿、滤波)、理解计数器溢出机制和处理捕获中断(或 DMA)。合理配置时钟、滤波器和处理溢出是获得准确测量结果的关键。该功能广泛应用于编码器接口、PWM输入分析、超声波测距、频率计、脉冲宽度测量等各种需要时间检测的场景。
通用定时器的输入捕获实验
STM32的输入捕获,简单的说就是通过检测TIMx_CHx(定时器X的通道X)上的边沿信号,在边沿信号发生跳变(上升沿/下降沿)的时候,将
资料下载
佚名
2022-01-12 19:53:55
MSP430 定时捕获模式
关于定时器本章就不详解了,大家可以参考之前的文章或者直接查阅用户手册进行学习关于定时器何时选用溢出中断还是比较
资料下载
duke刘
2021-11-19 17:51:08
从应用方面详解STM32的定时器输入捕获模式
,或者说测信号频率。关于输入捕获的知识,网上的内容太多了,所以我就不贴出数据手册上的电路图解,还有各种寄存器的解释了。大家可自行了解,本文将从应用方面详解ST
STM32的定时器输入捕获使用步骤
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用步骤1.STM32 CUBEMX 配置(1) 新建STM32 CUBEMX工程(2)时钟配置(3)
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机