STM32——HAL库开发笔记23(定时器4—输入捕获)(参考来源:b站铁头山羊)

定时器有四个通道,这些通道既可以用来作为输入,又可以作为输出。做输入的时候,可以使用定时器对外部输入的信号的时间参数进行测量;做输出的时候,可以使用定时器向外输出精确定时的方波信号。

一、输入捕获 的基本原理

假如有一个从低电压到高电压变化的外部信号,当检测到信号发生变化的时候,计数器CNT的值就会被拍照保存到CCR寄存器中,然后在读取CCR寄存器里面的值,这样我们就知道输入信号在何时发生变化的了,这就是输入捕获的基本原理。

输入捕获也就是捕捉信号变化的时间点,并且保存。

例子:用输入捕获测量脉冲的宽度。

一个脉冲宽度有一个上升沿和一个下降沿。我们让定时器的通道一捕获上升沿,通道二捕获下降沿。首先,闭合时基单元的开关来启动定时器,在启动后CNT的值会递增,加入在递增到4时捕获到上升沿,4这个值会被拍照保存到CCR1中,在CNT = 7时捕获到下降沿,7这个值会被拍照保存到CCR2中,因此脉冲宽度 = (CCR2 - CCR1) *分辨率。分辨率 = CNT每跳一次所需要的时间。

二、其他细节

将画红线的这部分放大就得到了如下图

具体结构如下

以通道一为例,分为四个阶段

首先外部信号从CH1输入,输入滤波滤除输入信号所带的毛刺,从而在节点2得到纯正的信号。

在阶段二,有上升沿脉冲和下降沿脉冲,上升沿脉冲是每检测到一个上升沿就发送一个脉冲,下降沿脉冲类似。

在阶段三,TRC代表从模式控制器,直接:信号来自于通道本身;间接:信号来自于对侧通道

在阶段四,进行分频,分频系数为1,2,4,8。比如在节点5每遇到一个上升沿会产生一个脉冲,那么经过分频之后在节点6需要每遇到两个上升沿才会产生一个脉冲。

在节点6产生的脉冲会触发一个CCx的事件,这个事件发生的时候CNT的值会被拍照保存到CCR寄存器中。这个时候我们只需要把CCR寄存器里面的值读出来,我们就知道信号发生变化的时间点了。全部过程如下图

用输入捕获测量脉冲的宽度的具体过程如下图:

相关推荐
FFF团团员90910 小时前
树莓派学习笔记3:LED和Button
笔记·学习
偶像你挑的噻10 小时前
11-Linux驱动开发-I2C子系统–mpu6050简单数据透传驱动
linux·驱动开发·stm32·嵌入式硬件
碧海潮生_CC11 小时前
【CUDA笔记】04 CUDA 归约, 原子操作,Warp 交换
笔记·cuda
摇滚侠11 小时前
2025最新 SpringCloud 教程,从单体到集群架构,笔记02
笔记·spring cloud·架构
风123456789~12 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
Chat_zhanggong34512 小时前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法
强化学习与机器人控制仿真12 小时前
RSL-RL:开源人形机器人强化学习控制研究库
开发语言·人工智能·stm32·神经网络·机器人·强化学习·模仿学习
bai54593613 小时前
STM32 PWM驱动LED呼吸灯
stm32·单片机·嵌入式硬件
智者知已应修善业13 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
wdfk_prog13 小时前
[Linux]学习笔记系列 -- [block]bio
linux·笔记·学习