你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32使用HAL产生PWM有问题

[复制链接]
ju+(春) 提问时间:2018-8-10 10:20 /
大家注意,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;才可以正常输出,大家使用是注意一下。
收藏 1 评论12 发布时间:2018-8-10 10:20

举报

12个回答
romenchen 回答时间:2018-8-10 19:54:06
        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互补启动,添上这六句,就可以了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-8-10 11:37:58
本帖最后由 wenyangzeng 于 2018-8-10 13:41 编辑

HAL把启动PWM这一步留给用户来操作,既然使用HAL,就不用进行寄存器操作模式了,而是:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);

这应该不是bug吧!


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jjbboox 回答时间:2018-8-10 15:39:50
本帖最后由 jjbboox 于 2018-8-10 15:43 编辑

用定时器产生PWM,用过的表示毫无问题。PWM是太常用的东西了,如果有BUG也老早就解决了!
毕竟是库,请尊重一下ST的工程师的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-8-11 00:40:43
.PWM输出功能时,捕获/比较寄存器TIMx_CC,注意"HAL_TIM_PWM_Start"和“HAL_TIM_PWM_Stop。
至于tmpccer |= TIM_CCER_CC1NE,还要防止错误造成将辅助通道关闭而不是开启。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

cout zeng 回答时间:2018-8-11 15:10:13
用STD库吧,HAL库对配置要求太高了

评分

参与人数 2ST金币 -1 蝴蝶豆 +1 收起 理由
xia_yangchun -1 STM32新的MCU是没有STD库,以后只能使用HAL.
zero99 + 1

查看全部评分

zhao.zhao 回答时间:2018-8-11 17:27:12
用HAL库吧,STD库太麻烦,一不小心就罢工,还要搭上大把的时间

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-8-12 10:45:38
jjbboox 发表于 2018-8-10 15:39
用定时器产生PWM,用过的表示毫无问题。PWM是太常用的东西了,如果有BUG也老早就解决了!
毕竟是库,请尊重 ...

“尊重一下ST的工程师”,支持,按流行语就是圈起来,要考的
fighter12315 回答时间:2018-8-12 11:12:00
这个要自己多注意,不要老找库的麻烦

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

ju+(春) 回答时间:2018-8-22 21:25:20
romenchen 发表于 2018-8-10 19:54
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
        HAL_TIM_PWM_S ...

已经验证,四楼正解,库改为默认的,通过HAL_TIMEx_PWMN_Start()函数可以配置OK。
ttat 回答时间:2018-11-8 19:43:01
jjbboox 发表于 2018-8-10 15:39
用定时器产生PWM,用过的表示毫无问题。PWM是太常用的东西了,如果有BUG也老早就解决了!
毕竟是库,请尊重 ...

你好,请问能分享下用定时器产生PWM然后从端口输出的程序吗
halou520 回答时间:2019-9-5 10:40:17
不是有问题,而是TIMx_CHxN是需要重映射的 ,TIMx_CHx这种是stm32默认的,直接开启就好,如果要使用就必须重映射到相应的管脚上,不然是无法使用的。把相关的重映射函数添加就好了
generalcircuits 回答时间:2019-9-5 15:13:24
看了大佬们的回复,学到了

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版