分享一个简单易懂的定时器测量脉冲周期频率的方法
在定时器中,如果有多个采集通道:
不知道为什么错误写法会有点小bug,知道的朋友可以在评论区解答一下
错误写法:
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1|TIM_CHANNEL_2);
//开启TIM3的捕获通道1、2,并且开启捕获中断
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);
正确写法:
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1); //开启TIM3的捕获通道1,并且开启捕获中断
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE); //使能更新中断
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2); //开启TIM3的捕获通道2,并且开启捕获中断
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE); //使能更新中断
采用定时器计数模式采集信号频率:
使用TIM4来产生定时器定时中断(10ms一次)
TIM3计数模式采集脉冲数
TIM4定时配置10ms
TIM3定时器计数模式采集脉冲数
//main.c
HAL_TIM_Base_Start(&htim3);
HAL_TIM_Base_Start_IT (&htim4 );
//tim.c
/* USER CODE BEGIN 1 */
uint16_t tim2_flag=0;
uint32_t tim3_count =0,tim3_F=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim4)//tim4:10ms
{
tim3_count += __HAL_TIM_GetCounter(&htim3);
__HAL_TIM_SetCounter(&htim3,0);
tim2_flag++;
if(tim2_flag==100){ //1s
tim3_F =tim3_count;
tim2_flag =tim3_count=0;
}
}
}
/* USER CODE END 1 */