这里我们已PB4为例:





开启定时器

代码部分:
double fpinlv_jieshou;
uint zhankongbi_jieshou;
uint fpinlv;
float zhankongbi;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) //输入捕获回调函数
{
if(htim->Instance == TIM3) // tim3中断
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) //通道检测
{
fpinlv_jieshou = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1); //获取通道一的直接测量值,用于计算频率
zhankongbi_jieshou = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);//获取通道二的直间接量值,用于计算占空比
__HAL_TIM_SetCounter(htim,0); //清零计数值
fpinlv = (80000000/80)/fpinlv_jieshou; 计算频率
zhankongbi = (zhankongbi_jieshou/fpinlv_jieshou)*100; 计算占空比,因为占空比就等于上升沿的计数值比上整个周期的值再乘以100
HAL_TIM_IC_Start(htim,TIM_CHANNEL_1); //开启通道一
HAL_TIM_IC_Start(htim,TIM_CHANNEL_2); //开启通道二
}
}
}
主函数初始化两个通道:
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
最终fpinlv变量存放的值即为我们的频率
zhankongbi变量存放的值即为我们的占空比
版权声明:本文为qq_63856395原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。