STM32 定时器输入捕获2——捕获高电平时长

        由上图我们可以知道,高电平时间=t2-t1。在代码中,可以记录此时t1的时间然后再记录t2的时间,t2-t1,就是我们所想要的答案。

        但是,还有更简单一点点的,当到达t1的时候,我们把定时器清零,然后直接读出t2,就是这个高电平的时间。

  • 1.当TIM3的TIM_FLAG_CC1==1时,清除TIM3
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_FLAG_CC1)==SET){TIM_SetCounter(TIM3,0);}TIM_ClearITPendingBit(TIM3,TIM_FLAG_CC1);
}
  • 2.从波形图可以看出,刚开始检测的是上升沿,所以检测TIM_FLAG_CC1的时候是SET,到了第二步,波形开始下降,变为下降沿,此时我们就要更改一下检测的方式了,我们可以用到下面这个函数。

TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_Low);
//更改下次检测的极性为low(低电平)
void TIM3_IRQHandler(void)
{static unsigned char high_flag = 0;if(TIM_GetITStatus(TIM3,TIM_FLAG_CC1)==SET){if(high_flag == 0)//上升沿{high_flag = 1;TIM_SetCounter(TIM3,0);TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_Low);}else//下降沿{high_value = TIM_GetCounter(TIM3);TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_High);high_flag = 0;}}TIM_ClearITPendingBit(TIM3,TIM_FLAG_CC1);
}
  • 3.每次到下一个波形的时候,都重新初始化一下high_value.
if(high_flag == 0)//上升沿
{high_flag = 1;high_value = 0;TIM_SetCounter(TIM3,0);TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_Low);
}
  • 4.如果在main中,去使用了high_value,此时高电平还在不断输出,定时器也在运行,high_value仍会该改变,对于high_value的使用就不方便。所以我们需要限制一个条件,当我们使用high_value的时候,不要去重新写high_value了。
void TIM3_IRQHandler(void)
{static unsigned char high_flag = 0;if(high_complete_flag == 0){if(TIM_GetITStatus(TIM3,TIM_FLAG_CC1)==SET){if(high_flag == 0)//上升沿{high_flag = 1;high_value = 0;TIM_SetCounter(TIM3,0);TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_Low);}else//下降沿{high_value = TIM_GetCounter(TIM3);TIM_OC1PolarityConfig(TIM3,TIM_OCPolarity_High);high_flag = 0;high_complete_flag = 1;}}}TIM_ClearITPendingBit(TIM3,TIM_FLAG_CC1);
}

在使用high_value之前,让high_complete_flag = 0;这样之后时,high_value就不会变了

main

int main(void)
{TIM2_PWM_Configuration();//PWM周期为20msTIM3_InputCaputure_Configuration();//PA1:发出《————》PA6:接收Uart1_Configuration();TIM_SetCompare2(TIM2,10000);//占空比为50%,即10ms高电平while(1){if(high_complete_flag == 1){printf("%d us",high_value);high_complete_flag = 0;}Delay_s(10);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代工程科技杂志现代工程科技杂志社现代工程科技编辑部2023年第21期目录

能源科技 配网故障停电原因及改进对策研究 上官安琪 110kV变电站电气自动化技术及应用策略 陈祥 变电运维误操作事故预控措施分析 高翔;韦婉 智能变电站变电运维安全与设备维护探究 温亮亮;覃万全 110kV变电站电气设计及其防雷保护案例研析 谢旭平 变电运维…

解决哈希冲突的几种方法

什么是hash冲突 哈希函数是一个映像,把任意长度的输入,通过Hash算法变换成固定长度的输出,这个输出就是Hash值; 当两个不同的输入,产生了同一个输出值即为哈希冲突 解决方式 开放定址法 开放寻址法的核心思想是&am…

Django登录注销视图

Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下,可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证: LoginView:处理登录表单并登录用户 LogoutView&a…

MySQL修炼手册6:子查询入门:在查询中嵌套查询

目录 写在开头1 子查询基础概念1.1 了解子查询的基本概念1.2 子查询与主查询的关系 2 标量子查询详细展开2.1 学会使用标量子查询2.1.1 在SELECT语句中使用2.1.2 在WHERE子句中使用2.1.3 在ORDER BY子句中使用 2.2 标量子查询在条件判断中的应用2.2.1 使用比较运算符2.2.2 使用…

微信小程序---如何创建分包

1.在项目根目录中,创建分包的根目录,名为subpkg,这个名字可以自己定义 2.在 pages.json 中,和 pages 节点平级的位置声明 subPackages 节点,用来定义分包相关的结构: 3.在分包目录,点击右键新建…

Docker容器运行多个php,一个正常另一个报502

问题是解决了,但是并不知道问题出在哪儿 docker-compse.yml文件并没有什么改动 在解决这个问题的过程中多次重新打包镜像配置运行容器,没有任何效果,最多就是原本正常的站点也变得不可用 我在看nginx的配置时,发现可以在locati…

Python UI框架库之kivy使用详解

概要 Python是一种广泛使用的编程语言,而Kivy是一个用于创建跨平台移动应用和多点触控应用的开源Python框架。Kivy的设计目标是提供一种简单而强大的方式来构建富有创意的用户界面和交互体验。本文将详细介绍Kivy的基本概念、核心特性、布局系统、用户界面设计和实…

手写webpack核心原理,支持typescript的编译和循环依赖问题的解决

主要知识点 babel读取代码的import语句算法:bfs遍历依赖图为浏览器定义一个require函数的polyfill算法:用记忆化搜索解决require函数的循环依赖问题 Quick Start GitHub:https://github.com/Hans774882968/mini-webpack npm install npm…

[zabbix] zabbix监控其他

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现(对于 agent2 是被动模式) zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver,是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢? 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…

安全帽/反光衣检测AI边缘计算智能分析网关V4如何修改IP地址?

智能分析网关V4是TSINGSEE青犀推出的一款AI边缘计算智能硬件,硬件采用BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz,INT8峰值算力高达17.6Tops,FB32高精度算力达到2.2T,硬件内置了近40种AI算法模型&…

MySQL索引和视图基础练习题

一、创建表的要求 学生表:Student (Sno, Sname, Ssex , Sage, Sdept) 学号,姓名,性别,年龄,所在系Sno为主键 课程表:Course (Cno, Cname,) 课程号,课程名Cno为主键 学生选课表:SC (S…

C++(1) —— 基础语法入门

目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子排行实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Redis实现全局唯一Id

一、全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析:如果我们的…

两整数之和

题目链接 两整数之和 题目描述 注意点 不使用 运算符 和 - ​​​​​​​&#xff0c;计算并返回两整数之和-1000 < a, b < 1000 解答思路 需要用位运算来模拟加法&#xff0c;关键是要找到相加的和以及进位1的部分。如果不考虑进位的话&#xff0c;相加可以运用异…

Redis内部数据结构Dict结构详解

目录 dict的数据结构定义 dict的创建&#xff08;dictCreate&#xff09; dict的查找&#xff08;dictFind&#xff09; dict的插入&#xff08;dictAdd和dictReplace&#xff09; dict的删除&#xff08;dictDelete&#xff09; 如果你使用过Redis&#xff0c;一定会像我一样对…

STM32F103标准外设库——GPIO 输入、输出 (五)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

高级 Python 面试问题与解答

文章目录 专栏导读1.什么是PIP&#xff1f;2.什么是 zip 函数&#xff1f;3.Python 中的 __init __ () 是什么&#xff1f;4.Python 中的访问说明符是什么&#xff1f;5.Python 中的单元测试是什么&#xff1f;6.Python全局解释器锁&#xff08;GIL&#xff09;&#xff1f;7.P…

浪花 - 搜索标签前后端联调

前传&#xff1a;浪花 - 根据标签搜索用户-CSDN博客 目录 一、完善后端搜索标签接口 二、前后端搜索标签接口的对接 1. 使用 Axios 发送请求 2. 解决跨域问题 3. Axios 请求传参序列化 4. 接收后端响应数据 5. 处理后端响应数据格式 6. 搜索结果为空的页面展示 附&am…