这里是测开发板自带的信号发生器的频率。
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); //重新开启定时器通道二
}
}
}