野火STM32_HAL库版课程笔记-TIM通道输出应用之PWM实现呼吸灯

前置介绍

呼吸灯

PWM 占空比高 -> LED 亮度高

PWM 占空比低 -> LED 亮度低

项目配置

TIM 2
  1. 首先引脚选择 PA1, PA2, PA3, 设置为 TIM2_CH2, TIM2_CH3, TIM2_CH4
  2. 然后到 TIM 的 Mode 配置中, 配置 CLock Source 为 Internal Clock
  3. Channel2, Channel3, Channel4 分别设置为 PWM Generation CH2, CH3, CH4
  4. 然后到 Parameter Settings 中
  5. 配置 Prescaler 预分频为 72-1
  6. 配置 Counter Period 为 1000 - 1
  7. 下面的三个通道 (CH2, CH3, CH4) 的 CH Polarity (通道输出电压极性, 即哪个电平代表 "开启" 状态)
    1. 因为 LED 是低电平点亮, 所以这里需要将都设置成为 Low (低电平)

代码部分

复制代码
/* USER CODE BEGIN PV */

uint16_t pwm_val = 0; // CCR的值 (修改占空比)
int8_t dir = 10;      // 变亮: 10, 变暗: -10

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* 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 */
  
  // 启动 PWM
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    
    // 设置 PWM 占空比
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, pwm_val);
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, pwm_val);
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, pwm_val);
    
    // 调整占空比
    pwm_val += dir;
    
    if (pwm_val >= 1000)  dir = -10;  // 到顶翻转
    if (pwm_val <= 0)     dir = 10;

    HAL_Delay(5); // 控制呼吸灯节奏 (数字越大节奏越慢)
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

程序现象

成功实现呼吸灯效果

相关推荐
prog_61034 小时前
【笔记】用cursor手搓cursor(九)
人工智能·笔记·大语言模型·agent
lzqrzpt4 小时前
临沂LED驱动电源工程选型与直销工厂评估标准解析
python·单片机·嵌入式硬件
jing.wang_20254 小时前
制作最小Linux(Ubuntu)系统
linux·嵌入式硬件·ubuntu·dsp开发
小柯博客4 小时前
06 · 统一 libcamerasrc 与架构定型:3A、CPU 归因与一次黑屏回归
c语言·stm32·单片机·嵌入式硬件·架构·嵌入式·视频编解码
qyyyyy5704 小时前
芯片 Application Note PDF 怎么读?参考电路、BOM 和调试波形翻译实战
嵌入式硬件·设计模式·机器翻译·web application
爱莉希雅&&&4 小时前
Git 版本控制完整学习笔记
笔记·git·学习
Romantic_love_4 小时前
理解USART真实收发过程
开发语言·stm32·单片机·学习
撩得Android一次心动5 小时前
Kotlin 语言【知识点整理3】
java·开发语言·笔记·学习·kotlin
Source.Liu5 小时前
【Dioxus】Dioxus CLI (dx) 命令笔记
笔记·rust·dioxus
CarIise5 小时前
JavaScript基础语法与DOM操作实战课堂笔记
开发语言·javascript·笔记