CubeMX配置定时器产生指定个数的脉冲

1、配置定时器PWM输出

image.png

2、配置定时参数并开启中断

image.png

3、生成工程并定义一个全局变量来保存要发送脉冲的个数

uint8_t PWMnum;

4、使用库函数封装一个设置脉冲个数并开启PWM输出的函数

void setPWMNum(uint8_t num) {

    PWMnum = num;

    HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_1);

}


5、重写PWM输出完成回调函数

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {

    static uint8_t cnt = 0;

    if(htim->Instance == htim1.Instance) {

        cnt++;

        if(cnt == PWMnum) {

            HAL_TIM_PWM_Stop_IT(&htim1, TIM_CHANNEL_1);

   PWMnum = 0;

        }

    }

}

6,在main函数中调用setPWMNum来启动PWM输出setPWMNum(5);设置为输出5个脉冲编译下载

7、image.png

通过逻辑分析仪捕获的波形可以看书其只输出我们程序中制定个数的脉冲,

另外可以将调整占空比,频率的代码也集成到一起这样更有实用性


5 个评论

不错,很详细, 你也还在用这个老版本的啊,哈

老版本看着简洁舒服些,之前升上去了用着不习惯又降下来了

多谢分享经验

请问htim->Instance == htim1.Instance有没有详细的解释呢?

还是老版本看着舒服,新版本看着真的是,反人类

要回复文章请先登录注册