STM32开发(6)----CubeMX配置PWM


前言

本章介绍使用STM32CubeMX对PWM进行配置的方法,PWM的基本原理,并通过示波器来测试实现结果,如果有LED灯也可以,PWM控制LED灯的亮度。

一、PWM的介绍

PWM(Pulse Width Modulation)脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制电流。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。

广泛应用在从测量、通信到功率控制与变换的许多领域中。STM32内置多个IO输出PWM通道。

在这里插入图片描述
脉冲宽度调制模式可以生成一个信号,该信号频率由自动重载寄存器(TIMx_ARR)寄存器值决定,其占空比则由捕获/比较寄存器(TIMx_CCRx) 寄存器值决定。
在 PWM 模式下,计数器寄存器(TIMx_CNT )总是与捕获/比较寄存器(TIMx_CCRx )进行比较,以确定是TIMx_CCRx>TIMx_CNT 还是 TIMx_CNT<TIMx_CCRx(取决于计数器计数方向)。
下图为PWM边沿对齐模式(递增计数配置)。图中CCRx为捕获/比较寄存器,OCxREF为输出比较信号,CCxIF为中断状态标识位。
在这里插入图片描述

当CCRX=4时,当捕获/比较寄存器(TIMx_CCRx)比计数器小时,输出高电平,反之则输出低电平。
因此改变CCRx的值就可以改变PWM输出的占空比,改变ARR的值就可以改变PWM输出的频率.

二、实验过程

1.实验材料

  • STM32F103C6T6最小系统开发板

在这里插入图片描述

  • ST-LINK V2

在这里插入图片描述

  • 杜邦线
  • 示波器

2.STM32CubeMX配置PWM

选择芯片stm32f103c6t6,新建工程

在这里插入图片描述

设置时钟源,最小系统外部晶振8Mhz,作为外部高速HSE时钟源。由于没有外接外部低速晶振,这里低速时钟源选择旁路时钟源。

在这里插入图片描述

配置时钟树,这里使用官方推荐的配置

在这里插入图片描述

配置引脚功能,从datasheet中可以PA9可以复用为TIM1_CH2输出,因此将管脚PA9配置为定时器1的通道2输出。同时TIM1的通道2配置为PWM,这样就可以在PA9管脚得到PWM输出。datasheet截图如下:
在这里插入图片描述

配置如下:
在这里插入图片描述

前面设置HSE时钟为72MHz;TIM1的时钟挂载在APB2 Time Clocks上为72MHz
在这里插入图片描述
预分频系数设置为72-1,向上计数,自动重装载值设为500-1,则计时器时钟频率为1MHz,计时器周期为1us,定时器溢出周期(即PWM周期)为 500 * 1 = 500us,溢出频率(即PWM频率)为1/500us = 2KHz
在这里插入图片描述
Code Generator中设置只拷贝使用到的库,分离.c和.h文件

在这里插入图片描述

设置好项目名称和路径,点击GENERATE CODE即可,生成后使用keil5 IDE打开。

在这里插入图片描述

3.代码实现

实现一个周期为500us,占空比不断变化的pwm输出功能,代码如下

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
	uint16_t pwmVal=0;   //PWM占空比
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
	
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);   //开启定时器PWM输出  
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
   while (1)
  {
  /* USER CODE END WHILE */
 
  /* USER CODE BEGIN 3 */
 
	  while (pwmVal< 500)
	  {
		  pwmVal++;
		  __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, pwmVal);    //修改占空比
		  HAL_Delay(1);
	  }
	  while (pwmVal)
	  {
		  pwmVal--;
		  __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, pwmVal);    //修改占空比
		  HAL_Delay(1);
	  }
	  HAL_Delay(200);
 
  /* USER CODE END 3 */
 }
  /* USER CODE END 3 */
}

4.编译烧录

代码编译成功

在这里插入图片描述

在下载前检查keil是否检测到ST-LINK,选择魔法棒进行设置

在这里插入图片描述

如图所示,已经检测到ST-LINK 下载器

在这里插入图片描述

点击load,自动下载固件

在这里插入图片描述

5.硬件连接

烧录器ST-LINK V2和最小系统板的连接如图所示: 四线连接 SWDIO,GND,SWCLK,和3.3V电源

在这里插入图片描述

6.实验结果

由于没有找到LED灯,所以使用示波器进行测量,从测试结果可以看到,输出了PA9脚输出了电压为3.3V,周期为500 us的方波,且占空比在不断变化,如下图所示。

在这里插入图片描述
下面上个动图,看一下占空比不断变化的过程
在这里插入图片描述

总结

本章介绍STM32CubeMX对PWM进行配置的方法,PWM的技术实现原理,最后使用示波器来测试实验结果。

  • 20
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 您可以参考STM32CubeMX文档中的以下步骤来配置PWM: 1. 打开STM32CubeMX,然后选择您的芯片。 2. 找到PWM功能,并将其拖放到您的芯片上。 3. 选择PWM输出模式,并设置PWM参数。 4. 生成代码,并将其导入到您的开发环境中。 ### 回答2: 要配置STM32CubeMX来设置PWM,需要按照以下步骤进行操作: 1. 打开STM32CubeMX软件,并选择要使用的STM32系列微控制器型号。 2. 在“Pinout & Configuration”选项卡中,选择需要使用的引脚,并将其配置PWM模式。选择需要的定时器通道(如TIM1_CH1)作为PWM输出。 3. 在“Clock Configuration”选项卡中,配置定时器时钟以及PWM频率。可以选择内部时钟源或外部时钟源,并设置定时器的预分频和计数器周期以生成所需的PWM频率。 4. 在“Configuration”选项卡中,启用TIM定时器,并选择PWM模式。可以设置PWM波形的占空比、极性和自动重装载值。 5. 在配置完成后,点击“Project”菜单,选择“Generate Code”生成代码。 6. 将生成的代码导入到IDE中,并进行编译和下载到目标设备上运行。 7. 在主程序中,使用HAL库函数来控制PWM输出。使用HAL_TIM_PWM_Start()函数启动PWM输出,并使用HAL_TIM_PWM_Stop()函数停止PWM输出。使用HAL_TIM_PWM_SetDutyCycle()函数设置PWM的占空比。 通过以上步骤,即可完成了STM32CubeMXPWM配置。此时,定时器将根据配置的参数生成相应的PWM信号,并且可以通过适当的HAL库函数进行控制。 ### 回答3: 要开始配置STM32CubeMX中的PWM,首先需要打开STM32CubeMX软件,并创建一个新的工程。 在工程设置中,选择正确的微控制器型号,并选择适当的时钟源和频率。 然后,在Pinout & Configuration选项卡中,选择GPIO引脚来配置PWM输出。通过选择正确的引脚并将其设置为Alternate Function(复用功能),然后选择与之相关的TIM(定时器)通道。 接下来,进入Configuration选项卡,找到TIM(定时器)设置。 在TIM设置中,启用PWM输出模式。选择所需的PWM模式(例如,边沿对齐模式、中心对齐模式等)和定时器模式(例如,连续模式、单脉冲模式等)。 设置PWM的周期和占空比。可以手动输入所需的值,也可以通过计算器来确定。 设置其他PWM参数,如自动加载功能、触发源等。 完成设置后,点击“生成代码”按钮以生成STM32 HAL库的代码。 在生成的代码中,可以找到PWM初始化和配置的函数。这些函数需要在主代码中调用以初始化和配置PWM。 最后,可以在主代码中使用适当的函数来控制PWM的输出。可以使用HAL库提供的函数来设置PWM输出的占空比、停止和启动PWM等。 通过按照以上步骤配置和使用STM32CubeMX中的PWM模块,可以轻松实现PWM输出,并根据需要进行控制和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LinfineEdu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值