STM32 HAL库多路PWM没有输出踩坑记录

这篇具有很好参考价值的文章主要介绍了STM32 HAL库多路PWM没有输出踩坑记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

之前只弄过单路的,这次想用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);

赶紧用示波器测量……

我只能说,ST,你把TIM_CHANNEL_ALL放那下面是想要坑死谁?是个正常人都会觉得那个是用来配置全部通道的吧,唉。文章来源地址https://www.toymoban.com/news/detail-830319.html

到了这里,关于STM32 HAL库多路PWM没有输出踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HAL库STM32常用外设教程(一)—— 定时器 输出PWM

    本篇文章为个人参考总结所用,如果错误还望指出。 涉及的知识: 1、STM32CubeMx的部分使用 2、PWM原理及常用概念 3、用单片机生成一定频率的PWM 用到的软件及单片机: 1、STM32CubeMx 2、IDE: MDK-Keil软件 3、芯片:STM32F407ZGT6 4、开发板:正点原子探索者 注:不同型号的单片机实现

    2024年02月02日
    浏览(54)
  • STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

    STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 通过定时器TIM的输出比较模式得到预定频率与占空比的PWM波形;其中定时器输出比较模式与PWM模式的区别在于!!! PWM模式在同一个TIM下所有输出口的频率一致不能单独控制单个的频率 ,而输出比较模式

    2024年02月03日
    浏览(58)
  • 基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)

    目录  写在前面 先回顾下定时器的单路捕获PWM 多路捕获PWM的频率和占空比(状态机实现) 我的思路: 状态图 配置 给出示例代码 测试效果         先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路测试PWM波的频率,

    2024年02月12日
    浏览(47)
  • STM32 HAL库 Timer(定时器)+DMA输出PWM底层配置过程学习

    本文使用的芯片型号是STM32G030,写本文的目前是想记录学习下Timer借助DMA生成可变占空比PWM时的底层配置过程。 使用TIM1,配置就只改了图上的配置,系统时钟用的16M,分频选择15(16-1),自动重装载寄存器ARR选择999(1000-1),那么生成的就是1kHz的PWM,这里为什么要减1,因为这俩是

    2024年04月09日
    浏览(59)
  • stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

    我是实现了输出pwm波,频率固定,占空比可以不断调整的方法,将PA0接到示波器上,可以看到是一个标准的PWM波,如图下面示波器图。 我刚开始设置的分频的倍数是7199,使得分频的太大了,示波器显示不了,最后修改为71就可以,我之前设置读取pwm也是一样的, 都是设置的

    2024年02月22日
    浏览(36)
  • STM32 HAL库 通用定时器介绍及相关应用例程 定时器中断 输出PWM (点亮LED呼吸灯、输出PWM、输入捕获) CubeMX

    (部分图引自于ATK) 前情提要(基本定时器) 点此进入 通用定时器类别 通用定时器和基本定时器相比大致的工作方式是相似的,不过通用定时器比基本定时器多了一些很好用的功能,比如: 外部输入捕获 输出比较 输出PWM 时钟源 CubeMX为我们提供了配置时钟的非常方便的工

    2024年04月15日
    浏览(82)
  • 学习stm32 pwm 多路舵机的控制(PWM 的频率的理解)

    接着上一节,pwm 的使用,控制多路舵机进行角度旋转和设置。 参考stm32f103x中文说明时钟树如下图 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。 2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。 用户可通过多个预分

    2024年02月13日
    浏览(32)
  • STM32 HAL库 STM32CubeMX -- PWM(呼吸灯)

    PWM (Pulse Width Modulation)就是对外输出脉宽(即占空比)可调的方波信号,简称脉宽调制; 信号频率由自动重装寄存器ARR 的值决定,占空比由比较寄存器CCR 的值决定。 PWM模式1 : 在向上计数时 ,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平; 在向下计数时 ,一旦

    2024年02月01日
    浏览(52)
  • 【STM32】HAL库配置PWM功能

    在STM32中HAL库使用PWM功能需要配置什么函数 HAL_TIM_PWM_Init() :初始化PWM定时器。 HAL_TIM_PWM_ConfigChannel() :配置PWM输出通道的参数,如通道号、极性、占空比等。 HAL_TIM_PWM_Start() :开始PWM输出。 HAL_TIM_PWM_Stop() :停止PWM输出。 同时,还需要配置GPIO引脚的功能,将其配置为对应的

    2024年02月05日
    浏览(37)
  • STM32 互补PWM 带死区 HAL

      DT_time=DT_data/F DT_time:死区时间 DT_data:写入到单片机里的值 F:定时器主频 例如:Timer1主频64MHz,死区时间1us 1us=DT_data/64M DT_data=64 将64写入sBreakDeadTimeConfig.DeadTime即可将死区设置为1us  

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包