蓝桥杯G4-定时器输入捕获测量频率占空比

相关配置

原理图

Cubemx配置

keil代码

中断代码

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM2)
    {
        if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
        {
            ccr1a=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);
            ccr1b=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
            __HAL_TIM_SetCounter(&htim2,0);
            ccr_duty1=((float)ccr1b/ccr1a)*100;
            frq1=80000000/80/ccr1a;
            HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_1);
            HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);
        }
    }
    if(htim->Instance==TIM3)
    {
        if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
        {
            ccr2a=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_1);
            ccr2b=HAL_TIM_ReadCapturedValue(&htim3,TIM_CHANNEL_2);
            __HAL_TIM_SetCounter(&htim3,0);
            ccr_duty2=(float)ccr2b/ccr2a*100;
            frq2=80000000/80/ccr2a;
            HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_1);
            HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_2);
        }
    }
}

需要注意的是在这段代码中计算占空比时,由于ccra和ccrb都是uint类型,ccrb比ccra小,ccrb/ccra根据c语言计算规则会计算为0,所以我们要在前面加一个(float)强制类型转换

主函数

HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
    __HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,10);
    __HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,10);
    //输入捕获NE555
    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
    HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);

开启PWM,开启捕获中断。

这里也有一点需要注意,在CubeMX中配置PWM的时候,最好设置一下占空比,或者在初始化阶段设置占空比,不然如果占空比为0的话检测不到上升沿或者下降沿,也就检测不出频率来。


我的板子不知道为什么PB4选择TIM3可以通过杜邦线可以测量其他引脚的PWM频率和占空比,但它本身通过J9跳线帽连接的引脚却测不出俩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值