STM32CubeMX学习五 之PWM配置

这篇博客详细介绍了如何使用STM32CubeMX配置STM32F072的TIM2通道2为PWM输出,包括本地环境设定、引脚和时钟配置、PWM参数计算及代码生成。作者提供了从设置内部时钟到启动PWM功能的完整步骤,并展示了如何在代码中控制PWM占空比变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

记录一下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 */
}

在这里插入图片描述

创作不易,请大佬们点个赞!
有问题请留言讨论!
### STM32 CubeMX PWM 配置教程 #### 1. 系统时钟配置 在使用STM32CubeMX配置PWM之前,需要先完成系统的时钟配置。对于STM32F407VET6型号的微控制器,默认情况下可以使用外部晶振作为时钟源,并将其频率设定为8 MHz。随后,在系统设置界面中调整PLL参数,使得最终主频达到168 MHz[^1]。 #### 2. 下载接口配置 为了确保首次能够成功下载程序到目标板上,还需要正确地配置调试/编程接口选项。这一步骤通常涉及选择合适的串口或者SWD模式来连接开发环境与硬件设备之间通信路径。 #### 3. 定义定时器用于生成PWM信号 进入Pinout & Configuration页面后,找到TIMx外设(例如 TIM15),并为其分配功能至相应引脚。接着切换到Configuration标签页下对应Timer模块部分进行具体参数定义: - **Mode**: 设置成Output Compare Mode下的PWM Mode 1 或者 PWM Mode 2。 - **Channel**: 根据实际需求指定通道号 (如 Channel 1)。 - **Polarity**: 可选Active High或Active Low决定高低电平有效状态。 - **Prescaler**: 设定预分频系数以控制计数器工作速度;比如这里提到的例子中采用了数值7,则意味着输入给定时器内部计数单元的有效时钟频率将是SYSCLK/(Prescaler+1)=168M/(7+1)=21MHz。 - **Counter Period(ARR)**: 表示整个周期内的最大计数值,即决定了PWM波形的一个完整循环所需时间长度。如果希望得到大约500kHz频率输出,则可计算得出ARR=SYSCLK/(Prescaler*(期望频率))-1≈15[^3]。 #### 4. 启动PWM 输出及调节占空比 当上述基础配置完成后,可以通过调用`HAL_TIM_PWM_Start()`函数开启选定通道上的PWM输出操作。另外利用宏定义形式提供的两个API——`__HAL_TIM_SET_COMPARE()`分别实现不同百分比例下的比较匹配值写入动作从而改变当前正在运行中的PWM脉冲宽度也就是所谓的“占空比”。例如要让某个特定时刻开始维持全亮效果只需将Compare寄存器赋值等于Auto Reload Register即可达成目的。 ```c // 开启PWM输出于TIM15 CH1 HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_1); // 设置占空比为100% __HAL_TIM_SET_COMPARE(&htim15,TIM_CHANNEL_1,15); // 关闭PWM输出(相当于0%) __HAL_TIM_SET_COMPARE(&htim15,TIM_CHANNEL_1,0); ``` 以上代码片段展示了如何启动以及动态修改PWM输出的具体方法。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值