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.hqwc.cn/news/409833.html

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

相关文章

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…

Ansible Filter滤波器的使用(二)

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西,但是想来ansible不太可能有什么滤波操作,所以这个东西本质是一个数值筛选器,内置函数,本质是一个为了做区别化的工具…

【MapReduce】对员工数据按照部门分区并对每个分区排序

员工信息全部存储在emp.csv文件中,员工的属性有:员工id、名称、职位、领导id、雇佣时间、工资、奖金、部门号。 在MapReduce中想要使用员工的信息,需要对员工进行序列化处理。因为MapReduce是一个分布式框架数据会在不同节点之间进行传输&…

ZooKeeper 实战(五) Curator实现分布式锁

文章目录 ZooKeeper 实战(五) Curator实现分布式锁1.简介1.1.分布式锁概念1.2.Curator 分布式锁的实现方式1.3.分布式锁接口 2.准备工作3.分布式可重入锁3.1.锁对象3.2.非重入式抢占锁测试代码输出日志 3.3.重入式抢占锁测试代码输出日志 4.分布式非可重入锁4.1.锁对象4.2.重入…

R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_orig_ext (data, rank, temporal_extent…

Spark---累加器和广播变量

文章目录 1.累加器实现原理2.自定义累加器3.广播变量 1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后&…

【windows】右键添加git bash here菜单

在vs 里安装了git for windows 后,之前git-bash 右键菜单消失了。难道是git for windows 覆盖了原来自己安装的git ?大神给出解决方案 手动添加Git Bash Here到右键菜单(超详细) 安装路径:我老的 ? vs的gi…

Spring5深入浅出篇:Spring工厂设计模式拓展应用

Spring5深入浅出篇:Spring工厂设计模式拓展应用 简单工厂实现 这里直接上代码举例子 UserService.java public interface UserService {public void register(User user);public void login(String name, String password); }UserServiceImpl.java public class UserService…

Netty-Netty源码分析

Netty线程模型图 Netty线程模型源码剖析图 Netty高并发高性能架构设计精髓 主从Reactor线程模型NIO多路复用非阻塞无锁串行化设计思想支持高性能序列化协议零拷贝(直接内存的使用)ByteBuf内存池设计灵活的TCP参数配置能力并发优化 无锁串行化设计思想 在大多数场景下&#…

【计算机网络】网络层——详解IP协议

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 目录 🐱一、I…

【MATLAB源码-第113期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 POA(孔雀优化算法)是一种基于孔雀羽毛开屏行为启发的优化算法。这种算法模仿孔雀通过展开其色彩斑斓的尾羽来吸引雌性的自然行为。在算法中,每个孔雀代表一个潜在的解决方案,而…

linux驱动(六):input(key)

本文主要探讨210的input子系统。 input子系统 input子系统包含:设备驱动层,输入核心层,事件驱动层 事件处理层:接收核心层上报事件选择对应struct input_handler处理,每个input_handler对象处理一类事件,同类事件的设备驱动共用同一handler …