蓝桥杯嵌入式——输入捕获

时间:2023-03-18
本文章向大家介绍蓝桥杯嵌入式——输入捕获,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

配置

由图可知需要配置PA15和PB4

然后tim2的参数配置如下

tim3的配置如下,因为TIM3也被用作按键中断,可能存在一定的问题(重装载值不够),建议按键换一个定时器

 编程(中断部分)

首先还是中断函数的编写,ccrl_val有点像重装载值的意思,具体的含义暂时不知道怎么表述,就像是在记录重装载值是多少

这里首先记忆有一个回调函数(用作输入捕获的),void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

然后是得到ccrl的一个函数HAL_TIM_ReadCapturedValue(____, _____)

得到之后要将计时器置零__HAL_TIM_SetCounter(htim,0)

然后计算frq1 = (80000000/80)/ccrl_val1;

然后再开启定时器HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);

 1 uint ccrl_val1=0,ccrl_val2=0;
 2 uint frq1=0,frq2=0;
 3 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
 4 {
 5         if(htim->Instance == TIM2)
 6         {
 7                 ccrl_val1 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
 8             __HAL_TIM_SetCounter(htim,0);
 9             frq1 = (80000000/80)/ccrl_val1;
10             HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
11         }
12         if(htim->Instance == TIM3)
13         {
14                 ccrl_val2 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
15             __HAL_TIM_SetCounter(htim,0);
16             frq2 = (80000000/80)/ccrl_val2;
17             HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
18         }
19 }

  编程(初始化部分)

一定要记得初始化

1     HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
2     HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);

原文地址:https://www.cnblogs.com/Euphonium611/p/17229134.html