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

CubeMX配置PWM

  • 前言
  • 一、PWM的介绍
  • 二、实验过程
    • 1.实验材料
    • 2.STM32CubeMX配置PWM
    • 3.代码实现
    • 4.编译烧录
    • 5.硬件连接
    • 6.实验结果
  • 总结


前言

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

一、PWM的介绍

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

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

STM32开发(6)----CubeMX配置PWM_第1张图片
脉冲宽度调制模式可以生成一个信号,该信号频率由自动重载寄存器(TIMx_ARR)寄存器值决定,其占空比则由捕获/比较寄存器(TIMx_CCRx) 寄存器值决定。
在 PWM 模式下,计数器寄存器(TIMx_CNT )总是与捕获/比较寄存器(TIMx_CCRx )进行比较,以确定是TIMx_CCRx>TIMx_CNT 还是 TIMx_CNT 下图为PWM边沿对齐模式(递增计数配置)。图中CCRx为捕获/比较寄存器,OCxREF为输出比较信号,CCxIF为中断状态标识位。
STM32开发(6)----CubeMX配置PWM_第2张图片

当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截图如下:
在这里插入图片描述

配置如下:
STM32开发(6)----CubeMX配置PWM_第3张图片

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

在这里插入图片描述

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

STM32开发(6)----CubeMX配置PWM_第6张图片

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.编译烧录

代码编译成功

STM32开发(6)----CubeMX配置PWM_第7张图片

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

在这里插入图片描述

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

在这里插入图片描述

点击load,自动下载固件

STM32开发(6)----CubeMX配置PWM_第8张图片

5.硬件连接

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

在这里插入图片描述

6.实验结果

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

STM32开发(6)----CubeMX配置PWM_第9张图片
下面上个动图,看一下占空比不断变化的过程

总结

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

你可能感兴趣的:(stm32基础教程,stm32,单片机,嵌入式硬件)