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

【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) 清除标志位。

主函数实现

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用关系图和示例解释异步/等待
  • c++动态数组new和delete
  • kubernetes k8s Daemonset 控制器 原理 讲解 配置
  • 微前端架构下的多租户支持:实现与最佳实践
  • Android app安装第三方应用
  • Linux服务器运维管理面板1panel
  • 【技术方案】技术解决方案过程文件(Word原件)
  • 【二分查找】--- 初阶题目赏析
  • HarmonyOS NEXT - Toast和Loading使用
  • IndexError: list index out of range | 列表索引超出范围完美解决方法
  • 【STM32 FreeRTOS】软件定时器
  • C/C++ 数学运算与数学函数
  • 【MySQL】表的设计
  • ECMAScript6语法:类
  • 常见编码形式特征汇总(1)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【5+】跨webview多页面 触发事件(二)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ➹使用webpack配置多页面应用(MPA)
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CentOS 7 修改主机名
  • flask接收请求并推入栈
  • Gradle 5.0 正式版发布
  • KMP算法及优化
  • linux安装openssl、swoole等扩展的具体步骤
  • MySQL-事务管理(基础)
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • webgl (原生)基础入门指南【一】
  • 检测对象或数组
  • 模型微调
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 责任链模式的两种实现
  • postgresql行列转换函数
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​如何在iOS手机上查看应用日志
  • #include到底该写在哪
  • #laravel 通过手动安装依赖PHPExcel#
  • #Ubuntu(修改root信息)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)JPA - JQPL 实现增删改查
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转载)Linux网络编程入门
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .htaccess配置重写url引擎
  • .libPaths()设置包加载目录
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)