蓝桥杯嵌入式输入捕获(频率、占空比)

  • Post author:
  • Post category:其他

这里我们已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 版权协议,转载请附上原文出处链接和本声明。