这里是测开发板自带的信号发生器的频率。

1.在cubeMX中配置引脚B4和A15,分别选择定时器2的通道1和定时器3的通道1。

使能定时器通道1作为直接输入模式,通道2作为间接输入模式,时钟源选择内部时钟。

通道1选择上升沿,通道二选择下降沿。

 3,分频系数(psc)80-1,ARR默认就可以。

4,NVIC中使能中断。

5,生成代码。 

6,在interrupt中写中断回调函数。

//main.c中调用
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);	//打开定时器输入捕获(中断启动)

float ccrl_val1a,ccrl_val1b = 0;
uint frq1,frq2 = 0;
float duty1,duty2 = 0;
//输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)			
{
	if(htim->Instance == TIM3)
	{
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//中断消息来源,选择直接输入通道
		{
			ccrl_val1a = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);	//直接	
			ccrl_val1b = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);	//间接
			__HAL_TIM_SetCounter(htim,0);		    //计数值清零
			frq1 = (80000000/80)/ccrl_val1a;		//计算频率
			duty1 = (ccrl_val1b/ccrl_val1a) * 100;  //计算占空比
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);	//重新开启定时器通道一(轮询启动)
			HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);	//重新开启定时器通道二
		}
	}
}


    

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐