您当前的位置: 首页 > 

正点原子

暂无认证

  • 0浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用CubeMX实现定时器捕获脉冲频率

正点原子 发布时间:2021-11-03 17:57:09 ,浏览量:0

以下文章来源于:公_众_号开源电子网 读取更多技术文章,请扫码关注 在这里插入图片描述

使用CubeMX实现定时器捕获脉冲频率

定时器捕获高电平持续时间,相信大家都比较熟悉,在我们的例程里边就有,很多客户会问有没有检查脉冲频率的呀,还真没有,但是现在有啦。 本文使用STM32F407,外设TIM5通道一(PA0),实现对外部输入脉冲的频率检测。 那我们知道捕获一个完整脉冲频率,就是需要捕获两次上升沿所用时间,或者两次下降沿所用的时间。本文使用的检测方法为检测两次上升沿的时间。注意TIM5是32位的计数器。

原理讲解 在这里插入图片描述

当捕获到第一个上升沿时,清空计数值,使其从0开始计数,之后分成两种情况: 情况①:比较特殊就是两个上升沿之间的间隔时间太长了,需要计数溢出好几次才捕获到第二次的上升沿,此时需要加上溢出次数的用时才是整个脉冲的周期。 **情况②:**比较常规,两个上升沿在一个计数周期内完成采集,此时第二次上升沿所得到的计数值就为整个脉冲周期所计数次数 CubeMX配置 那我们知道这个情况了就可以设计我们的代码了,首先cubemx配置选择TIM5通道一(PA0)为输入捕获模式,设置ARR ,PSC等参数,以及上升沿捕获等,如图: 在这里插入图片描述

并开启全局中断 在这里插入图片描述

设置好即可生成代码,来到代码设计部分 代码设计 首先定义两个变量,一个代表捕获状态,一个捕获值 在这里插入图片描述

/* 捕获状态 / / [7]:0,没有成功的捕获;1,成功捕获到一次,也就是捕获到第二次上升沿 / / [6]:0,还没捕获到第一次上升沿;1,已经捕获到第一次上升沿了 / / [5:0]:捕获低电平后溢出的次数(对于32位定时器来说,1us计数器加1,溢出时间:4294秒) */ 当捕获到第一次上升沿时,把位6置一 在这里插入图片描述

捕获到第一次上升沿后,继续捕获到第二次上升沿,代表已经捕获到一个完整脉冲,把最高位置一 在这里插入图片描述

这就是捕获状态最高两位的作用,我们只需要判断高2位就知道当前是否捕获完成,后面六位是用来记录溢出次数的,也就是我们前面所说的情况①。

接着就是中断处理:捕获中断 在这里插入图片描述

更新中断,用来记录溢出次数 在这里插入图片描述

完成了前面几部分我们的核心部分就解决了,接着就是来到主函数main.c,首先初始化各外设,这里用到串口打印所以串口部分也需初始化,并开启定时器各中断等 在这里插入图片描述

最后就是到我们的计算频率: 在这里插入图片描述

首先定义一个变量temp,记录总的计数次数,然后TIM5挂载在APB1上所以定时器时钟乘2,就是84M,预分频设置84分频,也就是:1M计数频率,所以除以计数总次数,就为脉冲的频率。

实验现象 使用波形发生器输出方波波形接入板子PA0引脚(注意共地),打开串口助手看现象,如图:

设置脉冲输出10HZ 在这里插入图片描述

串口打印: 在这里插入图片描述 设置脉冲输出100HZ在这里插入图片描述 串口打印:在这里插入图片描述 可以看到实验是很精确的,好那我们今天就讲到这里!!!喜欢可以多点赞或留言你们想要看的内容。

关注
打赏
1665308814
查看更多评论
立即登录/注册

微信扫码登录

0.0345s