打印
[STM32G0]

再谈PWM中断踩坑

[复制链接]
155|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GlenX|  楼主 | 2024-6-24 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件:STM32G030F6P6

软件环境:STM32CubeIDE

实现功能:顶数量PWM输出

正常配置硬件,TIM1_CHANNEL2,ONE_Pulse Mode

主程序主动开启时钟、中断: (过去一直这么用!!!)

HAL_TIM_Base_Start(&htim1);             //这句有的说放在开启中断后,有的说在前,测试发现应该防止前面,否则输出脉冲数少了。

HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_2);

怎么都进不了下面的中断,但同样的程序,改成TIM3就可以

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

做了各种排列组合,结果发现需要同时(!!!!!?????)启用下列函数,才能正确进入中服务(重点是以前从来没这么用过!!!)

__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);

HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_2);

也许这就是研发——从一个又一个的坑里趴出来,外人看上去以为你在走平路。

另外发现一个好用的功能,给大家分享以下:

固定个数的脉冲输出,可以采用PWM 的 ONE_Pulse Mode 方式,

通过:

    TIM1->RCR = pulse 根据需要修改脉冲数量

    TIM1->ARR = 1/f  修改频率

    TIM1->CCR1 = du  修改脉宽

非常方便,也好记。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

498

帖子

2

粉丝