OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1496|回复: 1

再谈PWM中断之坑:STM32G030F6P6

[复制链接]

4

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
656
金钱
656
注册时间
2019-7-28
在线时间
60 小时
发表于 2024-1-26 12:00:11 | 显示全部楼层 |阅读模式
硬件:STM32G030F6P6

软件环境:STM32CubeIDE
实现功能:RCR定数量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  修改脉宽

非常方便,也好记。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
656
金钱
656
注册时间
2019-7-28
在线时间
60 小时
 楼主| 发表于 2024-2-1 20:17:29 | 显示全部楼层
本帖最后由 glenxu 于 2024-2-2 08:54 编辑

另外,这个芯片有发现另一个问题:
TIM1用的时钟是ABP,而TIM17用的确实SYSTCK,这么神奇!而且时钟树和基本资料上看不到这个差别,看上去都是2M,结果实际上一个是2M,一个是8M!!!
还有TIM1的CHANNEL-1 PWM输出前后均为中间电压(1.3-1.5V左右),不是应该是零或者3.3吗?
试验发现:
只有TIM1的CHANNEL-1是这样,CHANNEL-2和CHANNEL-4都是正常的。神奇的芯片,难怪有那么多的“专家”!恐怕各个还各有所长!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 06:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表