野火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 */
  }

程序现象

成功实现呼吸灯效果

相关推荐
桌面运维家2 小时前
解决Windows 10打印机脱机:端口、驱动、网络故障排除
windows·stm32·单片机
张人玉2 小时前
上位机项目笔记
笔记·c#·上位机
暴躁小师兄数据学院2 小时前
【WEB3.0零基础转行笔记】go编程篇-第12讲:go-zero入门实战
开发语言·笔记·golang·web3·区块链
那山川2 小时前
ros学习笔记15~40
笔记·学习
liwulin05062 小时前
【ROS2】【ESP32S3纯透传方案】ESP32S3+WINDOWS+VMware+ROS2+YDLIDA X导航完整落地方案
windows·stm32·单片机
-许平安-3 小时前
MCP项目笔记七(插件 calculator)
c++·笔记·json·plugin·mcp
暗光之痕3 小时前
Unreal5 研究笔记 蓝图自定义节点
笔记·unreal engine
ACP广源盛139246256733 小时前
IX8024@ACP#重构新一代 AI 算力产品的高速扩展架构
网络·人工智能·嵌入式硬件·计算机外设·电脑
210Brian3 小时前
嘉立创EDA硬件设计与实战学习笔记(二):元件符号与封装的绘制
大数据·笔记·学习