STM32CubeMX学习系列:PWM配置实战

文章目录

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

  • 前言

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


    一、本地环境

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

    二、开始

    1.引脚配置

    假设你的cubeMX工程已经建好,这里我们引脚图界面配置TIM2的通道2作为PWM输出:

    2.内部时钟配置

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

    2.PWM配置

    在TIM2的configuration界面我们选择Channel2,并且模式选成“PWM Generation CH2”:

    设置好后我们可以看到右边的引脚图设置的引脚变绿了:

    我这里配置的是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
    

    配置如图:

    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);
    


    开启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 */
    }
    

    创作不易,请大佬们点个赞!

    有问题请留言讨论!

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32CubeMX学习系列:PWM配置实战

    发表评论