STM32CubeIDE新建项目过程记录备忘(八)使用通用定时器中断生成PWM波形

名词解释:PWM

本例是一个PWM输出demo。

  • GPIO管脚设置: 

        将TIM2的Channel3设置为PWM generation GH3,它对应的管脚是PA2,当Channel3设置为PWM generation GH3后,PA2就自动被设置为TIM2_CH3。

  •  PWM载波频率设置:

PWM载波频率:  f_{PWM}=\frac{F_{t}/(Prescaler+1) }{Counter Period+1} 

        本例的APB1定时器的时钟频率F_{t}=72MHz。Prescaler=71,Counter Period=999,就可以得到1KHz的载波频率。

  • 中断配置: 

 

  • 生成代码:

配置完成后生成代码。 记得选这个:

  • 新建tim_app.h 和 tim_app.c 文件:

  • 在tim_app.h内添加代码:

 

#ifndef __TIM_APP_H
#define __TIM_APP_H

#include "stm32f1xx_hal.h"  // 根据芯片系列调整

void TIM2_PWM_Init(void);
void TIM2_PWM_Start(void);
void TIM2_PWM_Update_Duty(uint32_t duty);  // duty: 0~100

#endif

 在tim_app.c内添加代码:

#include "tim_app.h"
#include "main.h"

extern TIM_HandleTypeDef htim2;

// 初始化封装(可选)
void TIM2_PWM_Init(void)
{
    // CubeMX 已生成 MX_TIM2_Init()
}

// 启动 PWM
void TIM2_PWM_Start(void)
{
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
}

// 设置占空比(0~100)
void TIM2_PWM_Update_Duty(uint32_t duty)
{
    if (duty > 100) duty = 100;

    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, duty * 10);  // ARR=999 → duty*10
}
  • 在main.c内添加代码:

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
static uint8_t direction = 1;  // 1: 增加, 0: 减少
static uint32_t duty = 0;     //初始占空比=0%
/* USER CODE END 0 */

 

/* USER CODE BEGIN 2 */
  TIM2_PWM_Start();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  TIM2_PWM_Update_Duty(duty);
	  HAL_Delay(20);  // 每 20ms 调整一次,2 秒完成 0→100→0

	  if (direction)
	  {
		  duty++;
		  if (duty >= 100)
			  direction = 0;
	  }
	  else
	  {
		  duty--;
		  if (duty == 0)
			  direction = 1;
	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

 

        这里是在main.c的主循环里周期刷新占空比,当然也可以再开一个定时器中断,在定时器中断响应里周期调整占空比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝海拓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值