本帖最后由 无垠的广袤 于 2025-5-21 16:28 编辑

【意法半导体 STM32 WL55】PWM呼吸灯

本文介绍了意法半导体 Nucleo-WL55JC 开发板的通过硬件 PWM 实现 LED 呼吸灯的项目设计。

项目方案

  • 使用 STM32CubeMX 创建工程,使能硬件定时器 TIM2 - CH4 和 USART2;
  • STM32CubeIDE 编译和调试工程、固件上传;
  • 实现板载 LED3 呼吸灯,并串口打印 PWM 占空比。

工程创建

使用 STM32CubeMX 快速创建工程。

流程

  • 打开 STM32CubeMX 软件,新建 ST 板卡工程,搜索 NUCLEO-WL55JC2 选中目标板卡,开始工程,选择默认外设配置(注意不使用 BSP 板级支持包);

  • 时钟配置:采用默认设置,系统时钟频率 4MHz;
clock_tree_default.jpg

  • Pinout & Configuration 标签下选择 Connectivity - 使能 USART2 - 选择 Asynchronous 异步通信模式;
  • Pinout & Configuration 标签下选择 Timers - 使能 TIM2 ;
  • 配置 PWM 参数,板载 LED3 连接 PB11 高电平点亮,对应定时器 2 通道 4,并使能自动重装载;
    • 频率 = CK_PSC/[(PSC+1) (ARR+1)],根据系统时钟 PSC 设为 3
    • 占空比 = CCR/(ARR+1),这里 ARR 设为 999
    • 分辨率 = 1/(ARR+1)
  • 配置完成后,进入 Project Manager 标签栏,进行项目命名、保存路径设置、编译器选择等操作;
  • 点击 Generate Code 按钮,使用 STM32CubeIDE 或 Keil 打开目标工程;
  • 编译工程,0 error, 0 warning .

解析

对于硬件 PWM 使用定时器实现,对于板载 LED,根据原理图可知,分别对应 PB9、PB11、PB15

SCH_LED_TIM2.jpg

考虑到定时器引脚分配,采用 TIM2 的频道 4

cubemx_TIME2_setting.jpg

由 STLINK 虚拟串口对应的原理图可知,需打开 USART2 实现USB串口通信

SCH_USART2_STLINK.jpg

工程代码

printf 串口重定向

/* USER CODE BEGIN Includes */
  • #include <stdio.h>
  • /* USER CODE END Includes */
  • /* USER CODE BEGIN PD */
  • #ifdef __GNUC__
  • #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  • #else
  • #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  • #endif

  • PUTCHAR_PROTOTYPE
  • {
  • HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
  • returnch;
  • }
  • /* USER CODE END PD */
  • 复制代码

    main 主函数

    intmain(void)
  • {
  • /* USER CODE BEGIN 1 */
  • uint16_tpwm_duty=0;
  • uint8_tdirection=0;
  • /* USER CODE END 1 */
  • HAL_Init();
  • SystemClock_Config();
  • MX_GPIO_Init();
  • MX_TIM2_Init();
  • MX_USART2_UART_Init();
  • /* USER CODE BEGIN 2 */
  • HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); // initialized TIM1
  • /* USER CODE END 2 */
  • /* USER CODE BEGIN WHILE */
  • while (1)
  •   {
  • /* USER CODE END WHILE */

  • /* USER CODE BEGIN 3 */
  • if (direction)
  •   {
  • __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, pwm_duty--);
  • if(pwm_duty==0)
  • direction=0;
  •   }
  • else
  •   {
  • __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, pwm_duty++);
  • if(pwm_duty==1000)
  • direction=1;
  •   }
  • printf("%d\r\n",pwm_duty);
  • HAL_Delay(1);
  •   }
  • /* USER CODE END 3 */
  • }
  • 复制代码

    编译程序,连接开发板并运行程序,可实现固件上传和程序自动执行。

    STLINK固件升级

    首次调试开发板需要升级板载 STLINK 的固件

    • 对于 STLINK-V2 ,打开 STM32CubeProg 软件,点击右侧 Firmware uograde 按钮,根据提示自动升级即可;
    STLINK-V2_upgrade.jpg

    • 对于新版的 STLINK-V3 升级需要注意选择 MCO 晶振输入方案

    STLINK-V3_upgrade.jpg

    该项目使用的开发板对应的 STLINK 型号为 V3E,因此固件升级选择 HSE/3 (8.33MHz) 选项。

    详见技术文档。

    效果

    PWM_BreatheLED.gif

    红色 LED3 呈现呼吸灯效果

    pwm_breathe.gif

    打开串口调试助手,配置串口参数,打开串口,接收虚拟串口发送的 PWM 占空比数据

    uart_print_pwm_duty.gif

    总结

    本文介绍了意法半导体 Nucleo-WL55JC 开发板的通过硬件 PWM 实现 LED 呼吸灯的项目设计,为 STM32WL 系列芯片的开发和应用提供了参考。