打印
[STM32G0]

再谈PWM中断踩坑

[复制链接]
781|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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  修改脉宽

非常方便,也好记。

使用特权

评论回复
沙发
kzlzqi| | 2024-7-29 15:37 | 只看该作者
如果仅调用 HAL_TIM_PWM_Start_IT,但未启用 TIM1 的更新中断,可能会导致中断回调函数无法被正确调用。

使用特权

评论回复
板凳
申小林一号| | 2024-7-29 22:42 | 只看该作者
感谢分享

使用特权

评论回复
地板
喂什么玩意| | 2024-7-31 11:40 | 只看该作者
STM32G030F6P6 微控制器上使用 PWM 的 ONE-Pulse 模式进行固定数量脉冲输出时,确实可能会遇到一些配置和中断的问题。

使用特权

评论回复
5
实际测量不符| | 2024-8-29 13:38 | 只看该作者
确保中断优先级正确设置,并且中断服务程序(ISR)能够处理相应的中断。

使用特权

评论回复
6
星辰大海不退缩| | 2024-8-29 23:53 | 只看该作者
固定个数的脉冲输出,可以采用PWM 的 ONE_Pulse Mode 方式

使用特权

评论回复
7
咕咕呱呱孤寡| | 2024-8-30 09:32 | 只看该作者
学到了,感谢分享

使用特权

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

本版积分规则

15

主题

529

帖子

2

粉丝