之前只弄过单路的,这次想用4路PWM,CUBE里面一顿配置,生成,然后套用之前的代码:
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
这算是开启第一路了,心想后面无非就复制几条,改下通道的事了,无意中点了下TIM_CHANNEL_1,进头文件看看:
/** @defgroup TIM_Channel TIM Channel
* @{
*/
#define TIM_CHANNEL_1 0x00000000U /*!< Capture/compare channel 1 identifier */
#define TIM_CHANNEL_2 0x00000004U /*!< Capture/compare channel 2 identifier */
#define TIM_CHANNEL_3 0x00000008U /*!< Capture/compare channel 3 identifier */
#define TIM_CHANNEL_4 0x0000000CU /*!< Capture/compare channel 4 identifier */
#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier */
/**
* @}
*/
看到TIM_CHANNEL_ALL时,眼前一亮,连续开启1、2、3、4怎么都显得不够优雅,于是把代码改成了:
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_ALL);
这一改,看似天衣无缝,却没有想到灾难性的一下午就降临了,管脚没有输出,改管脚输出的上下拉模式,改时钟,改PWM设置里的各种setting,后来一度怀疑这个芯片的TIM3是不是有问题?
无奈之下,去掉所有PWM,针对某一路管脚,改用GPIO切换状态,发现正常,换了一个定时器13。
HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_1);
正常。
HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_ALL);
没有。
这时候心里一阵阴霾。
4路PWM全都配置上,然后:
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
赶紧用示波器测量……文章来源:https://www.toymoban.com/news/detail-830319.html
我只能说,ST,你把TIM_CHANNEL_ALL放那下面是想要坑死谁?是个正常人都会觉得那个是用来配置全部通道的吧,唉。文章来源地址https://www.toymoban.com/news/detail-830319.html
到了这里,关于STM32 HAL库多路PWM没有输出踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!