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

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

使用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在这里插入图片描述
串口打印:在这里插入图片描述
可以看到实验是很精确的,好那我们今天就讲到这里!!!喜欢可以多点赞或留言你们想要看的内容。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值