STM32CubeMX学习五 之PWM配置

文章目录

  • 前言
  • 一、本地环境
  • 二、开始
    • 1.引脚配置
    • 2.内部时钟配置
    • 2.PWM配置
    • 4.代码生成
    • 3.编译工程
    • 4.添加功能代码
    • 在这里插入图片描述


前言

记录一下STM32CubeMX的学习笔记,同时分享给初学的小白,希望一起进步。
如何使用STM32CubeMX以及工程创建在之前的博客有提到,这里就直接从设置PWM讲起。


一、本地环境

编译环境:KEIL
代码生成:STM32CubeMX
库:HAL
MCU:STM32F072

二、开始

1.引脚配置

假设你的cubeMX工程已经建好,这里我们引脚图界面配置TIM2的通道2作为PWM输出:
STM32CubeMX学习五 之PWM配置_第1张图片

2.内部时钟配置

配置完GPIO后开始配置时钟,我这里配置的是内部时钟,配置的24Mhz的内部时钟(HSI)如图:
在这里插入图片描述

2.PWM配置

在TIM2的configuration界面我们选择Channel2,并且模式选成“PWM Generation CH2”:
STM32CubeMX学习五 之PWM配置_第2张图片

设置好后我们可以看到右边的引脚图设置的引脚变绿了:
STM32CubeMX学习五 之PWM配置_第3张图片

我这里配置的是10khz的PWM频率。我们要通过配置预分频和计数周期来计算这个频率。
之前我们配置的内部时钟周期配置的是24M,而我们要10khz,那么Prescaler设置成(24-1),Counter Period设置为(100-1)。设置的这两个数字可以根据实际需求来凑即可,只要算出来是10khz即可。

计算公式:

频率(f)
时间(F)
预分频(Prescaler)
计数周期(Counter Period)
f = timer_clock  / (Prescaler+1) / (Counter_Period+1)  //timer在计算的时候会自动将值+1
计算如下:
Prescaler = 24-1
Counter_Period = 100-1
f = 24Mhz / (24-1+1) / (100-1+1) = 10000hz
T = 1/10000 = 0.1ms

配置如图:
STM32CubeMX学习五 之PWM配置_第4张图片

4.代码生成

时钟配置完毕后,选择“Project Manager”到工程配置界面。
1、配置工程的名称
2、工程存储路径
3、IDE选择(如果是keil工具,选择MDK-ARM)
4、mcu依赖的cube包在哪个目录
在这里插入图片描述

接着到“Code Generator”下选择这几个选项来生成工程:

在这里插入图片描述

选择好过后我们就可以点击右上角的"GENERATE CODE"按键来生成代码了。
如果提示你的firmware package 缺少直接更新下载即可,如果没网状态,就需要去官网下载依赖包放在之前提到的目录下即可。

我是用一下依赖包生成得工程代码。
在这里插入图片描述

3.编译工程

点击编译按钮对工程进行编译。
在这里插入图片描述
在 CubeMX 生成的文件中添加用户代码的时候,必须是写在/* USER CODE BEGIN n*/和/* USER CODE
END n*/之间。这样如果需要改变 Cube 工程的配置,在重新生成代码时,在这两句注释之间的语 句不会被覆盖。而用户新建或添加的文件不会受到影响。

4.添加功能代码

我们这里工程就基本建好了,现在来实现功能代码部分。
在代码中添加如下代码使能PWM:

   HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

STM32CubeMX学习五 之PWM配置_第5张图片
开启PWM过后,我们还要设置PWM的占空比。
我们提前设置一个pwm_num变量来设置占空比,我这里只是简单的增加占空比,要看效果还是得加些延时,否则不怎么明显:
pwm设置函数:__HAL_TIM_SET_COMPARE

int main(void)
{
  /* USER CODE BEGIN 1 */
   HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
  /* USER CODE END 1 */

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

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

  /* USER CODE BEGIN Init */

  /* 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_TIM2_Init();
  /* USER CODE BEGIN 2 */
	uint8_t pwm_num = 50;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		pwm_num++;
		if(pwm_num>99)
		{
			pwm_num = 50;
		}
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,pwm_num);  //设置pwm函数
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

STM32CubeMX学习五 之PWM配置_第6张图片

创作不易,请大佬们点个赞!
有问题请留言讨论!

你可能感兴趣的:(STM32CubeMX,stm32,单片机,学习,c语言,mcu)