蓝桥杯嵌入式(G431)备赛笔记——频率捕获

cubeMX配置: 

选用PB4, PA15为定时器通道ch1

配置预分频,重装载值(设为最大,防止溢出),启用中断

关键代码:

计算频率:

//频率捕获

u32 cp_value1=0; // 定义变量cp_value1,用于存储捕获寄存器的值,初始化为0
u32 frq1=0; // 定义变量frq1,用于存储频率值,初始化为0
u32 cp_value2=0; // 定义变量cp_value2,用于存储捕获寄存器的值,初始化为0
u32 frq2=0; // 定义变量frq2,用于存储频率值,初始化为0

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2) // 判断定时器实例是否为TIM2
	{
		cp_value1=HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1); // 读取TIM2通道1的捕获值并赋给cp_value1
		__HAL_TIM_SetCounter(&htim2, 0); // 重置TIM2的计数器为0
		frq1=(80000000/80)/cp_value1; // 计算频率值并赋给frq1,假设时钟频率为80MHz
		HAL_TIM_IC_Start(htim, TIM_CHANNEL_1); // 启动TIM2通道1的捕获功能
	}
	
	if(htim->Instance==TIM3) // 判断定时器实例是否为TIM3
	{
		cp_value2=HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1); // 读取TIM3通道1的捕获值并赋给cp_value2
		__HAL_TIM_SetCounter(&htim3, 0); // 重置TIM3的计数器为0
		frq2=(80000000/80)/cp_value2; // 计算频率值并赋给frq2,假设时钟频率为80MHz
		HAL_TIM_IC_Start(htim, TIM_CHANNEL_1); // 启动TIM3通道1的捕获功能
	}
}

主要注意这四个函数: 

HAL_TIM_IC_CaptureCallback(),输入捕获(IC)功能的回调函数。它在输入捕获中断触发时被调用,用于处理捕获到的输入信号。

HAL_TIM_ReadCapturedValue(),用于读取输入捕获寄存器的值。它可以用来获取定时器捕获到的输入信号的计数值。

__HAL_TIM_SetCounter(),用于设置定时器的计数器值。它可以用来手动设置定时器的计数器,从而改变定时器的计数状态。

HAL_TIM_IC_Start(),用于启动定时器的输入捕获(IC)功能。它会使能定时器的输入捕获功能,并开始捕获外部信号的脉冲。

主函数中,需要记得先开启输入捕获中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄奕子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值