【STM32嵌入式系统设计与开发拓展】——14_定时器之输入捕获
参考哔站:链接: 铁头山羊
一、微控制器的高级定时与控制功能集合
1、时基单元
2、输入捕获
3、输出比较
4、从模式控制器
5、高级定时器的输出控制

二、问题集合
1、什么是定时器
定时器是一种专门负责定时功能的片上外设GPI0AFI0EXTIUSART RCC I2C)

2、定时器基本结构框图


什么是通道?


CCRx:(Capture/Compare Register 捕获/比较寄存器
三、输入捕获
什么是输入捕获(就像通过获取通道的输入,进行拍照并存储到CCRx这个寄存器中)

拍照?

输入捕获的环节
1、输入滤波 ----> 边沿检测 ----> 信号选择 ---->分频



什么是输入滤波?

只有采集到一定次数的才能检测确定为高低电平,否则过滤掉

什么是边缘检测?

信号选择是什么?

分频是什么?
检测到N个信号变化拍一次照。

什么是CCx事件?

四、代码实现步骤


/* TIM配置 */ TIM_TimeBaseStructure.TIM_Period = arr; // 自动重装值 TIM_TimeBaseStructure.TIM_Prescaler = psc; // 时钟预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); // 初始化TIM5输入捕获

/* 输入捕获配置 */ TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; // IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; // 下降沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // 映射到TI1TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 不分频 TIM5_ICInitStructure.TIM_ICFilter = 0x00; // 不滤波TIM_ICInit(TIM5, &TIM5_ICInitStructure); // 初始化TIM5输入捕获
/* 允许中断 */TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE); // 允许更新中断、CC1IE捕获中断 /* 使能TIMx */TIM_Cmd(TIM5,ENABLE);

/* NVIC 配置 */NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; // 中断向量表为TIM5NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 先占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 从优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断NVIC_Init(&NVIC_InitStructure); // 初始化NVIC
中断服务函数

步骤 1:检查是否成功捕获
通过 if((TIM5CH1_CAPTURE_STA&0X80)==0) ,若未成功捕获则继续。
例:如果 TIM5CH1_CAPTURE_STA 的值是 0011 0010 ,与 1000 0000 进行按位与运算的结果是 0 ,就表示捕获未成功。
如果 TIM5CH1_CAPTURE_STA 的值是 1011 0010 ,按位与运算结果不为 0 ,就表示捕获成功。
步骤 2:检查更新中断标志位
若 TIM_GetITStatus(TIM5,TIM_IT_Update)!= RESET 且已捕获低电平,进行后续处理。
if(TIM5CH1_CAPTURE_STA&0X40) // 如果已经捕获到低电平
如: TIM5CH1_CAPTURE_STA 的值是 0011 0010,与 0100 0000 按位与运算结果为 0,表明未捕获到低电平。
TIM5CH1_CAPTURE_STA 的值是 0111 0010,按位与运算结果不为 0,就表示已经捕获到低电平。
步骤 3:处理低电平持续情况
若低电平过长((TIM5CH1_CAPTURE_STA&0X3F)==0X3F),标记捕获成功并设捕获值最大;否则累加低电平时间。
步骤 4:检查捕获 1 事件
若 TIM_GetITStatus(TIM5, TIM_IT_CC1)!= RESET ,根据捕获沿情况处理。
步骤 5:处理已捕获上升沿
若已捕获上升沿和下降沿,标记捕获成功、记录值并设为下降沿捕获。
步骤 6:处理首次捕获下降沿
若首次捕获下降沿,进行初始化,包括清空状态和值、清计数器、标记下降沿并设为上升沿捕获。
步骤 7:清除中断标志位
通过 TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update) 清除标志位。
主函数实现

相关文章:
【STM32嵌入式系统设计与开发拓展】——14_定时器之输入捕获
参考哔站:链接: 铁头山羊 一、微控制器的高级定时与控制功能集合 1、时基单元 2、输入捕获 3、输出比较 4、从模式控制器 5、高级定时器的输出控制 二、问题集合 1、什么是定时器 定时器是一种专门负责定时功能的片上外设GPI0AFI0EXTIUSART RCC I2C) 2、定时器…...
docker swarm如何让两个副本分别跑在两台不同的主机上
虽然 docker swarm 支持自动扩容部署,但是为了服务的稳定性、可靠性,有的时候甲方巴巴会要求一定要服务分散部署在不同的服务器上。 使用默认的部署方式,虽然副本为 N,但是部署的 N 个服务可能落在同一台服务器上。 在 Docker Swa…...
GPT助手的训练流程四个主要阶段( GPT Assistant training pipeline )
GPT助手的训练流程四个主要阶段( GPT Assistant training pipeline ) flyfish 四个阶段 预训练(pre-training) 监督微调(supervised fine tuning, SFT) 奖励建模(reward modeling)…...
网络如何发送一个数据包
网络如何发送一个数据包 网络消息发送就是点一点屏幕。 骚瑞,这一点都不好笑。(小品就是我的本质惹) 之前我就是会被这个问题搞的不安宁。是怎么知道对方的IP地址的呢?怎么知道对方的MAC呢?世界上计算机有那么多&…...
【Harmony OS 4.0】向上滑动加载案例
// 自定义class类对象类型 class Article {public id: numberpublic title: stringpublic content: stringconstructor(id: number, title: string, content: string) {this.id idthis.title titlethis.content content} }// 子组件 Component struct ArticleComponent {Pro…...
SQL基础教程(八)SQL高级处理
※食用指南:文章内容为《SQL基础教程》系列学习笔记,该书对新手入门非常友好,循序渐进,浅显易懂,本人主要用来补全学习MySQL中未涉及的部分,便于刷题和做项目。 官方电子书:《SQL基础教程》第2…...
[论文笔记] Data-Juicer: A One-Stop Data Processing System for Large Language Models
https://arxiv.org/pdf/2309.02033 GitHub - modelscope/data-juicer: A one-stop data processing system to make data higher-quality, juicier, and more digestible for (multimodal) LLMs! 🍎 🍋 🌽 ➡️ ➡️🍸 🍹 🍷为大模型提供更高质量、更丰富、更易”…...
期末速成复习资料——操作系统
体型:选择20判断10填空10*2简答4*5计算2*10 第一章 在一个计算机系统中,通常都含有多种硬件和软件资源。归纳起来可将这些资源分为四类:处理机、存储器、I/O设备以及文件(数据和程序)。相应地,OS的主要功能…...
Android之Service与IntentService区别
目录 Service特点使用场景示例 IntentService特点使用场景示例 区别总结线程管理:生命周期:使用场景:自动停止: 总结 在Android开发中,Service是一个可以在后台执行长时间运行操作的组件。主要有两种类型的Service&…...
【MySQL】表的设计
系列文章目录 第一章 数据库基础 第二章 数据库基本操作 第三章数据库约束 文章目录 系列文章目录前言一、表的设计二、表的关系总结 前言 在前文中,我们学会了基本的CRUD操作,对数据库中的数据进行约束以提高数据库的准确性。接下来介绍的表的设计就是…...
NC 用两个栈实现队列
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 用两个栈来实…...
用后端实现一个简单的登录模块2 前端页面
该模块能做到的功能: 1阶:输入账号和密码,输入正确即可返回登录成功的信息,反之则登录失败 2阶:有简单的前端页面,有登录成功和失败的弹窗,还有登录成功的主页面 3阶:前端页面的注…...
MySQL慢查询的查找语法
一、引言 数据库查询快慢是影响项目性能的一大因素,对于数据库,我们除了要优化SQL,更重要的是得先找到需要优化的SQL语句。 性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句其次使用explain命令去查…...
SQL中的聚合方法与Pandas的对应关系
在SQL和Pandas中,聚合方法是用来对数据进行汇总统计的重要工具。下面是SQL中的各种聚合方法及其与Pandas中相应操作的对应关系: 1. COUNT SQL: COUNT(*) 返回表中的行数。COUNT(column) 返回指定列中非空值的数量。 Pandas: count() 方法用于计算非空值…...
计算机毕业设计选题推荐-计算中心高性能集群共享平台-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
仿RabbitMq实现简易消息队列基础篇(future操作实现异步线程池)
TOC 介绍 std::future 是C11标准库中的一个模板类,他表示一个异步操作的结果,当我们在多线程编程中使用异步任务时,std::future可以帮助我们在需要的时候,获取任务的执行结果,std::future 的一个重要特性是能…...
经典算法题总结:数组常用技巧(双指针,二分查找和位运算)篇
双指针 在处理数组和链表相关问题时,双指针技巧是经常用到的,双指针技巧主要分为两类:左右指针和快慢指针。所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行…...
版本控制基础理论
一、本地版本控制 在本地记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用,如RCS. 二、集中式版本控制(代表SVN) 所有的版本数据都保存在服务器上,协同开发者从…...
微分方程(Blanchard Differential Equations 4th)中文版Section1.4
1.4 NUMERICAL TECHNIQUE: EULER’S METHOD 上一节中讨论的斜率场的几何概念与近似微分方程解的基本数值方法密切相关。给定一个初值问题 d y d t = f ( t , y ) , y ( t 0 ) = y 0 , \frac{dy}{dt}=f(t,y), \quad y(t_0) = y_0, dtdy=f(t,y),y(t0)=y0, 我们可以通过首…...
求职Leetcode算法题(7)
1.搜索旋转排序数组 这道题要求时间复杂度为o(log n),那么第一时间想到的就是二分法,二分法有个前提条件是在有序数组下,我们发现在这个数组中存在两部分是有序的,所以我们只需要对前半部分和后半部分分别…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
