完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前期准备
STM32CubeMX配置 首先新建工程后,配置系统时钟为48MHz。以TIM1为例,使能TIM1的时钟源为Internal Clock(即48MHz系统时钟),设置通道1为Input Capture direct mode,可以看到对应到PA8引脚自动被设置为TIM1_CH1功能。定时器基本参数的配置参考STM32CubeMx之TIM定时中断,其它具体配置如下图。 STM32的定时器通道可以设置上升沿捕获 、下降沿捕获或者上升沿下降沿都捕获。 当 捕获到 信号的上升沿或下降沿时, 产生一个捕获中断 。这里设置为上升沿捕获。 其中Prescaler Division ratio参数为可预置分频比,可设置为不分频或2/4/8分频,若设置为2分频,表示捕获到2个上升沿才产生一次中断。 Input Filter为输入滤波器参数,滤波器的功能简单来说就是多次检测视为一次有效,也就是说连续N次采样检测,如果都是高电平,则说明这是一个有效的电平信号,这样便可以过滤掉那些因为某些而干扰产生的一些信号。 设置完成后,打开定时器的溢出中断和捕获中断。 之所以需要打开溢出中断,是因为两次捕获之间,定时器可能会溢出,需要在中断中记录溢出次数,才能统计两次捕获之间的总时间。 点击 Generate Code生成代码。 程序编写 在初始化后添加以下代码: HAL_TIM_Base_Start_IT(&htim1);//启动定时器1中断 HAL_TIM_IC_Start_IT(&htim1,TIM_CHANNEL_1);//开启定时器1通道1捕获中断 编写两个中断回调函数,定时器溢出中断用于统计溢出次数,在捕获中断中记录当前的捕获值,两次捕获的总计数值=溢出次数*65535+两次捕获的差值。程序如下: 第二次捕获完成后,可以计算信号的频率: 采用这种计数方式测量频率属于测周法(测量周期),存在±1误差,当信号的频率较高时,TIM1_Counter值会变小,±1误差的影响将会被放大。因此,被测信号的频率越高,这种方法的测量误差越大。 另外一种方法为 测频法,用定时器设定一个确定的闸门时间(比如1秒),在1秒内记录捕获到的上升沿的次数。捕获次数/闸门时间即为被测信号的频率。这种方式同样 存在±1误差,被测信号频率越低,误差的影响就越大。 两种方法互补,工程师可根据被测信号的频率范围决定使用哪种方法。下一章将介绍另外一种频率测量的方法, 等精度测频。顾名思义,该方法的测量误差不受被测信号的影响,在全频率段内精度一致。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:42 , Processed in 1.181623 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号