文章目录

  • 前言
  • 一、本地环境
  • 二、开始
    • 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-1Counter_Period = 100-1f = 24Mhz / (24-1+1) / (100-1+1) = 10000hzT = 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 */}

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