蓝桥杯嵌入式(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)功能。它会使能定时器的输入捕获功能,并开始捕获外部信号的脉冲。

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 22:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 22:12:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 22:12:03       82 阅读
  4. Python语言-面向对象

    2024-04-12 22:12:03       91 阅读

热门阅读

  1. C语言入门算法——拼数

    2024-04-12 22:12:03       37 阅读
  2. 代码随想录算法训练营day36

    2024-04-12 22:12:03       38 阅读
  3. 机器人的基本概念

    2024-04-12 22:12:03       44 阅读
  4. MybatisPlus快速入门

    2024-04-12 22:12:03       36 阅读
  5. python django mvc

    2024-04-12 22:12:03       41 阅读
  6. 从零开始精通RTSP之请求与响应详解2

    2024-04-12 22:12:03       44 阅读
  7. 2024-W15

    2024-W15

    2024-04-12 22:12:03      51 阅读