[应用相关] STM32使用HAL产生PWM有问题

[复制链接]
1016|14
 楼主| 两只袜子 发表于 2021-2-8 10:44 | 显示全部楼层 |阅读模式

大家注意,STM32的HAL库有问题,所有的STM32的HAL库里的产生PWM时,如果要在TIMx_CHxN产生PWM时,都无法正常开启,我试了STM32F1系列的和STM32L4系列的,都会有有问题,如果使用在TIMx_CHx产生PWM时,不会有问题,发现HAL库中有个BUG,在stm32f1xx_hal_tim.c
中的TIM_OC1_SetConfig,TIM_OC2_SetConfig,TIM_OC3_SetConfig函数中有个  tmpccer &= ~TIM_CCER_CC1NE;需要改为  tmpccer |= TIM_CCER_CC1NE;才可以正常输出,大家使用是注意一下。

评论

HAL库的话,互补通道的PWM输出函数调用实现楼下laocuo1142给出的。 至于配置,建议使用CubeMx实现 方便得很。  发表于 2021-2-9 16:43
laocuo1142 发表于 2021-2-8 11:16 | 显示全部楼层
   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
        HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
        HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
        HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
三个通道的PWM互补启动,添上这六句,就可以了
flycamelaaa 发表于 2021-2-8 11:16 | 显示全部楼层
HAL把启动PWM这一步留给用户来操作,既然使用HAL,就不用进行寄存器操作模式了,而是:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);

这应该不是bug吧!
powerantone 发表于 2021-2-8 11:16 | 显示全部楼层
用定时器产生PWM,用过的表示毫无问题。PWM是太常用的东西了,如果有BUG也老早就解决了!
毕竟是库,请尊重一下ST的工程师的。
stormwind123 发表于 2021-2-8 11:18 | 显示全部楼层
.PWM输出功能时,捕获/比较寄存器TIMx_CC,注意"HAL_TIM_PWM_Start"和“HAL_TIM_PWM_Stop。
至于tmpccer |= TIM_CCER_CC1NE,还要防止错误造成将辅助通道关闭而不是开启。
probedog 发表于 2021-2-8 11:18 | 显示全部楼层
用STD库吧,HAL库对配置要求太高了
classroom 发表于 2021-2-8 11:19 | 显示全部楼层

用HAL库吧,STD库太麻烦,一不小心就**,还要搭上大把的时间
七毛钱 发表于 2021-2-8 11:19 | 显示全部楼层
不是有问题,而是TIMx_CHxN是需要重映射的 ,TIMx_CHx这种是stm32默认的,直接开启就好,如果要使用就必须重映射到相应的管脚上,不然是无法使用的。把相关的重映射函数添加就好了
豌豆爹 发表于 2021-2-8 11:20 | 显示全部楼层

这个要自己多注意,不要老找库的麻烦
renzheshengui 发表于 2021-3-2 23:13 | 显示全部楼层
也就是说也不算是问题 是吗
wakayi 发表于 2021-3-2 23:14 | 显示全部楼层
用cube就能直接生成 很方便
wowu 发表于 2021-3-2 23:15 | 显示全部楼层
算是一种打补丁了
xiaoqizi 发表于 2021-3-2 23:17 | 显示全部楼层
std库是什么库啊
木木guainv 发表于 2021-3-2 23:20 | 显示全部楼层
可以小小的补救一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2122

主题

8121

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部