蓝桥杯STM32G431RBT6学习——定时器输入捕获

蓝桥杯STM32G431RBT6学习——定时器输入捕获

前言

从省赛的题目来看,对于定时器输入捕获这块几乎不考,但是为了知识的完整性及避免万一,依旧有了解的必要。国信长天开发板上的定时器捕获主要针对于NE555波形发生器的方波进行频率、脉宽等测量计算,其硬件接口如下:
在这里插入图片描述
其中PA15可以复用为定时器2的通道一及定时器8的通道一,PB4可以复用为定时器3的通道一及定时器16的通道一,可以看情况选择对应的定时器进行配置。

输入捕获测量原理

所谓输入捕获,其实就是把定时器对应通道配置为捕获模式,会对外部向GPIO输入的脉冲信号进行特定边沿捕获,如:上升沿、下降沿等,当定时器的通道捕获到这些信号时,会产生一个特定的事件,我们可以通过该事件实现不同的处理。
一、频率测量:
所谓频率,其实就是周期的倒数,可以通过测量两个上升沿之间的时间t(即一个周期的时间),再对其取倒数就是频率
在这里插入图片描述
因为定时器每一次捕获到上升沿都会对计数值进行清空,因此除去第一次测量,后面的每一次得到的计数值即为时间t,通过定时器配置的预分频数(x)与时钟频率(F)得到其计数频率(f)。

计数频率(f=F/x)* 1/计数值(t)= 频率

二、脉宽测量:
脉宽测量方法与频率测量原理基本一致,以测量高电平脉宽为例:设定定时器初始捕获为上升沿捕获,触发中断后清空计数并将定时器设置为下降沿捕获,当下降沿捕获触发中断时获取其计数值即可计算出脉宽。

脉宽=1/计数频率(f)*计数值(t)
STM32CubeMX配置

将对应引脚设置为定时器相关通道后,对定时器进行配置,主要配置其分频系数及捕获边沿即可。
在这里插入图片描述

Keil代码编写

定时器捕获相关API如下:
定时器捕获启动及暂停

HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);

参数1:定时器编号(句柄),由CubeMX生成文件定义;
参数2:使用的定时器通道编号(例:TIM_CHANNEL_1)

定时器捕获中断回调函数

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

设置计数值函数

__HAL_TIM_SetCounter(TIM_HandleTypeDef *htim,unsigned int num)

参数1:定时器编号(句柄),由CubeMX生成文件定义;
参数2:设置的计数值,常为0,做清空计数使用

频率测量示例:
使用HAL_TIM_IC_Start_IT函数开启定时器捕获以后,找个合适的位置编写其回调函数即可。

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	//判断是否为定时器2产生中断
	if(htim->Instance == TIM2)
	{
		//读取计数值
		capValue = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
		//清空计数值,为下次计数准备
		__HAL_TIM_SetCounter(htim,0);
		//计算频率
		freq = 80000000 / capValue;
		//重启定时器(原理未了解)
		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
	}
}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值