[STM32U5] 【NUCLEO-U575ZI-Q测评】基于TIM4 的呼吸灯

[复制链接]
804|1
 楼主| lulugl 发表于 2023-2-25 22:10 | 显示全部楼层 |阅读模式
【目的】这篇文章主要介绍STM32U575的TIM、PWM的使用。经过这次测试以后掌握


1、STM32CubeIDE创建PWM例程
2、PWM创建呼吸灯
什么是PWM

​ 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

定时器创建与配置
1、经过查看原理图,要用开发板上的LED作为呼吸灯的输出,经查看LD2为PB7,可以做为TIM4—CHANNEL2作为输出。
2、使能HSE高速时钟:
截屏2023-02-25 21.29.11.png
3、配置PB7为TIM4—CH2
截屏2023-02-25 21.31.20.png
4、配置TIM4参数,按下图选择时钟源、配置Channel2为PWM Generation CH2. 同时配置PSC为160-1,Counter Period为500-1 (160M/160/500)得到2KHz的PWM频率。
  • Mode   选择PWM模式1
  • Pulse(占空比值)  先给0
  • Fast Mode   PWM脉冲快速模式    :  和我们配置无关,不使能
  • PWM 极性:   设置为低电平        PS:  由于LED是低电平点亮,所以我们把极性设置为low
截屏2023-02-25 21.33.26.png
截屏2023-02-25 21.38.50.png
然后再开启定时器中断,保存参数后再次生成代码。
5、在main.c中添加用户自定义函数
  /* USER CODE BEGIN 1 */
        uint16_t pwmVal = 0;  //PWM占空比
        uint8_t  dir = 1;     //占空比计数方向
  /* USER CODE END 1 */

使能TIM4-CH2输出:
  /* USER CODE END 2 */
        HAL_TIM_PWM_Start_IT(&htim4, TIM_CHANNEL_2);   //PB7 为TIM2——CH2
  /* Infinite loop */
在主循环中添加改变占空比的代码(由于刷新显示占空比需要占用时间,所以没有使用延时):
  1. while (1)
  2.   {
  3.           if(dir == 1)
  4.           {
  5.                   pwmVal = pwmVal + 10;
  6.                   //__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_2, pwmVal);    //修改比较值,修改占空比
  7.                   sprintf(badmpu,"Pulse:%03d",pwmVal);
  8.                   ILI9488_printText(badmpu,30,120,ILI9488_BLUE,ILI9488_WHITE,4);
  9.                   TIM4->CCR2 = pwmVal;
  10.                   if(pwmVal == 500)
  11.                           dir = 0;
  12.           }
  13.           else
  14.           {
  15.                   pwmVal =pwmVal - 10;
  16.                  // __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_2, pwmVal);    //修改比较值,修改占空比
  17.                   TIM4->CCR2 = pwmVal;
  18.                   sprintf(badmpu,"Pulse:%03d",pwmVal);
  19.                   ILI9488_printText(badmpu,30,120,ILI9488_BLUE,ILI9488_WHITE,4);
  20.                   if(pwmVal == 0)
  21.                           dir = 1;
  22.           }
  23.           //HAL_Delay(1);
  24.     /* USER CODE END WHILE */

  25.     /* USER CODE BEGIN 3 */
  26.   }
  27.   /* USER CODE END 3 */

Stahan 发表于 2024-1-12 16:26 | 显示全部楼层
没看到呼吸灯闪烁啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

844

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部