蓝桥杯嵌入式 定时器的输入捕获

其实这一部分在历年的省赛题中是没有考过的,而且在国赛中考的也不是我们主板上的55芯片发出的PWM信号。但我们可以将这一个做成一个检测频率以及占空比的东西,当作一个示波器。这样我们就可以知道在实验过程中我们输出的PWM的频率了。

开发板上使用了一个信号发生器,使用的是55芯片,如下图所示:

55芯片通过一个跳线帽分别连接到芯片上的PA15和PB4引脚上,接着就可以去配置cubemax,PA15选TIM2_CH1,PB4选TIM3_CH1。

接着配置时钟的通道1为输入模式,通道2为间接模式

接着让直接通道测上升沿,间接的去测下降沿。

后续将分频系数设置为80-1,重装载值默认就可以,然后使能NVIC时钟,PB4的TIM3也同样的操作,接着就可以生成代码了。

接着直接放下源码

//测量频率+占空比//
double ccrl_val1a=0,ccrl_val2a=0;
uint ccrl_val1b=0,ccrl_val2b=0;
uint frq=0,frq2=0;//频率
float duty1=0,duty2=0;//占空比
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM2)//判断是来自定时器3的
    {
        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);//定时器清零
            frq=(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);
        }

    }
    if(htim->Instance==TIM3)//判断是来自定时器3的
    {
        if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)//中断消息来源 选择直接输入的通道
        {
            ccrl_val2a=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);//直接
            ccrl_val2b=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);//间接
            __HAL_TIM_SetCounter(htim,0);//定时器清零
            frq2=(80000000/80)/ccrl_val2a;
            duty2=(ccrl_val2b/ccrl_val2a)*100;
            HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
            HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);
        }
    }
}

但是别忘了在main函数中将定时器打开

    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);//频率测量捕获定时器开启
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);//频率测量捕获定时器开启 间接通道
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值