STM32CUBEMX配置教程(五)高级定时器输出两路PWM波

STM32CUBEMX配置教程(五)高级定时器输出两路PWM波

基于STM32H743VI
使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。
PWM常常用于数字控制领域,在电机控制、数字电源等等方面运用广泛。
此次工程效果:产生两路100HZ,但是占空比不同的PWM信号。

本次配置的工程链接在最下方,有需要自取。
0基础可以从第一个教程开始阅读
STM32CUBEMX配置教程(一)基础配置
STM32CUBEMX配置教程(二)时钟等内部参数配置
STM32CUBEMX配置教程(三)通用GPIO配置
STM32CUBEMX配置教程(四)定时器中断配置

1 新建工程

参考STM32CUBEMX配置教程(一)基础配置

2 修改时钟树

参考STM32CUBEMX配置教程(二)时钟等内部参数配置

3 PWM理论介绍

STM32内部PWM产生器是由计数器和比较器组成。
脉冲宽度调制是一种模拟控制方式。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。
脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

4 定时器PWM产生配置

只有通用或高级定时器具有硬件的PWM产生功能(不是那种在定时器中断里面改变IO状态的低效方式)。
在此使用定时器TIM1作为PWM产生时钟,先在cubemx中的左侧找到Timers选项并选中TIM1。
在这里插入图片描述
此时上图中右上角有许多参数可以配置,但是右下角一片空白。这个时候定时器没有打开,要打开定时器需要先为定时器配置时钟源。此处配置从上往下数第三个参数Clock Source为内部时钟源,即为Internal Clock。选择后右下角出现相关配置:
在这里插入图片描述
在此需要产生两路PWM信号,每路PWM信号需要占用定时器通道,在此将定时器通道1和通道2配置为PWM输出口,如下图所示,此时引脚分配图上也会有相关显示,即两个通道绑定到了PE9和PE11:在这里插入图片描述
在这里插入图片描述
下面进行定时器分频系数和计数周期的配置,以控制PWM的频率,在此需要产生100HZ的方波。需要对定时器的配置进行调整,配置界面为:在这里插入图片描述其中参数含义分别为:
Prescaler 分频系数
Counter Mode 计数模式(分为向上和向下)
Count Period 计数周期
Interal Clock Division 内部时钟分频
auto-reload preload 自动重装载
TRGO Event Selection 触发事件
还有很多的参数在下面暂时用不到不介绍了

其中分频系数和计数周期较为常用,可用于设置定时器溢出时间,一般来说溢出也代表定时器中断的产生(如果配置了中断)。溢出时间计算公式如下:
在这里插入图片描述
上面那个公式中arr为Count Period的设置数值,psc为Prescaler的设置数值。
Tclk为定时器挂载的时钟线的频率。对于STM32H743而言最高为240Mhz(根据自己的设置有关),不记得可以看看自己配置的时钟树。
下图中的TO APB1 Timer clocksClocks和TO APB2 Timer clocksClocks都是240Mhz。(虽然TIM6挂在哪个总线上忘记了,但是这里只有240M,有知道的小伙伴可以评论留言)。
在这里插入图片描述
如果我想要产生100HZ方波,那么需要配置溢出时间为10ms(100HZ的周期为10ms)。

则可以选择配置psc为2399,arr为999
那么溢出时间公式为:
2400*1000/240(us)=10ms

按照上述计算结果进行配置,其他参数不用改即可
在这里插入图片描述
那么配置完成。

5 主函数调用案例

主要使用的函数如下:

HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//启动定时器1的PWM通道1
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);//启动定时器1的PWM通道2
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);//设置占空比50%
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500);//设置占空比50%

为什么__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,500)这个函数就可以设置占空比为50%呢?

因为我们配置了arr为999,也就是这个计数周期值为999:
在这里插入图片描述
想要50的占空比只要让__HAL_TIM_SET_COMPARE()中参数的值为999的一半(约等于500)就可以了。

如果我之前设置了psc为239,arr为9999
那么溢出时间依旧为:
240*10000/240(us)=10ms
但是此时我需要产生占空比50的PWM则需要设置__HAL_TIM_SET_COMPARE()的参数为5000。

此处给出主函数(函数中两路PWM占空比分别为30和70,arr为999):

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM1_Init();
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
  __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,300);//百分之30
  __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,700);//百分之70

  while (1)
  {

  }
}

看看效果图片:在这里插入图片描述

工程链接:https://download.csdn.net/download/weixin_44584198/20598491

### 回答1: 百度云网盘限速下载是因为服务器的带宽有限,为了避免服务器压力过大而影响其他用户的使用体验,百度云官方规定了下载速度的限制。但是,您可以通过以下几种方法来解决限速下载的问题: 1. 使用百度云会员:百度云会员可以享受更快的下载速度,解除限速下载的限制。 2. 使用百度云加速器:百度云加速器可以提高下载速度,解除限速下载的限制。 3. 使用第三方下载工具:有些第三方下载工具,例如IDM、迅雷等,可以加速下载速度,解除限速下载的限制。 请注意,使用第三方下载工具可能违反百度云的服务协议,请谨慎使用。 ### 回答2: 百度云网盘作为一款非常常用的云存储平台,为用户提供了方便快捷的文件上传和分享功能。但是在下载文件时,有时候会遇到限速的情况。为了解决这个问题,可以尝试以下几种方法。 首先,可以使用百度云网盘的官方下载器进行下载。下载器是百度云网盘官方提供的一种下载工具,可以加速下载速度,并能够突破限速。用户可以在官方网站上下载并安装它,然后使用下载器下载需要的文件。 其次,可以尝试使用下载工具进行下载。一些第三方下载工具,如迅雷、IDM、Flashget等,可以提供更好的下载速度和稳定性。用户只需要将下载链接复制到下载工具中,就可以进行高速下载。 另外,使用下载插件也是一个有效的方法。有一些浏览器插件,如百度云助手、下载助手等,可以在使用浏览器直接下载文件时提供更快速的下载。用户只需将插件安装到浏览器中,并进行相应的设置,即可享受不限速的下载体验。 最后,可以尝试通过下载代理服务器进行下载。有一些代理服务器可以帮助用户加速下载速度,绕过限制。用户可以在网络上搜索相关的代理服务器,并按照指示进行设置,从而达到不限速下载的效果。 综上所述,以上是针对百度云网盘不限速下载的几种方法。用户可以根据自身的需求和情况选择合适的方式,以获得更好的下载体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怡步晓心l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值