一分钟成为点灯大师(超简单24行代码-STM32F407的HAL库PWM实现LED渐变闪烁)

 一、开发环境

硬件:正点原子探索者 V3 STM32F407 开发板

单片机:STM32F407ZGT6

Keil版本:5.32

STM32CubeMX版本:6.9.2

STM32Cube MCU Packges版本:STM32F4 V1.27.1

使用STM32F407的HAL库定时器14的PWM实现PF9的LED渐变闪烁的STM32CubeMX配置步骤和程序,通常需要遵循一系列步骤。下面我将详细解释这些步骤,帮助你一分钟内成为“点灯大师”。

PS:轮询方式点灯请看下一篇文章一分钟成为点灯大师(超简单4行代码-STM32F407的HAL库轮询方式实现LED每隔1秒闪烁)

定时器中断方式点灯请看下一篇文章

一分钟成为点灯大师(超简单8行代码-STM32F407的HAL库定时器方式实现LED每隔1秒闪烁)

 二、配置STM32CubeMX

  1. 启动STM32CubeMX,新建STM32CubeMX项目
  2. 选择MCU:在软件中选择你的STM32型号-STM32F407ZGT6。​​
  3. 选择时钟源:​​

  4. 配置时钟:
  5. 使能Debug功能:Serial Wire
  6. HAL库时基选择:SysTick
  7. 配置LED引脚: 当前硬件的LED灯的引脚是PF9:在Pinout & Configuration标签页中,找到LED连接的GPIO端口,要看引脚能匹配哪个定时器PWM,将PF9配置为TIM14_CH1,并设置为PWM模式,通常选择Push-Pull。​ ​
  8. 定时器配置:选择Configure TIM14配置定时器的计数模式、预分频系数和重载值,启用TIM14_CH1,TIM14定时器是一个1秒周期的定时器,如图。

    TIM14定时器的APB1时钟源是84MHz,预分频器(Prescaler)的值设置为 84-1 = 83。周期(Period)的值设置为 1000-1 = 999。
    时钟源频率 / (预分频器值 + 1) = 84MHz / (83 + 1) = 84MHz / 84 = 1kHz,这意味着定时器每1毫秒(1/1kHz)增加一次。
    周期时间 = (周期值 + 1) * (1 / 计数频率) = (999 + 1) * (1 / 1kHz) = 1000 * 0.001s = 1s

  9. 生成代码:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM,然后点击Project > Generate Code生成代码。

三、添加代码

  1.  增加渐变代码:在main.c的  MX_TIM14_Init()后面添加灯渐变的代码。

      /* USER CODE BEGIN 2 */
    	HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);
       // 初始化PWM占空比为0 
      __HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1,0);  
      
        // 渐变闪烁参数  
      uint16_t pwm_value = 0;  
      uint16_t direction = 1; // 1表示增加,0表示减少  
      uint16_t step = 1; // 每次递增或递减的步长,根据需要调整  
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
          if (direction)  
          {  
         		for (pwm_value=0; pwm_value < htim14.Init.Period; pwm_value += step)  // 渐亮  
    			{  
    				__HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, pwm_value);  
    				HAL_Delay(1); // 根据期望的渐变速度调整延时  
    			}  
    			direction = 0; // 切换方向  
    			}  
    	  else  
    	  {  
    			for (pwm_value=htim14.Init.Period; pwm_value > 0; pwm_value -= step)   // 渐暗  
    			{  
    				__HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, pwm_value);  
    				HAL_Delay(1); // 根据期望的渐变速度调整延时  
    			}  
        		direction = 1; // 切换方向  
    	  }  
      }
  2. 编译代码:Keil编译生成的代码。
  3. 烧录程序:将编译好的程序用ST-LINK烧录到STM32微控制器中。

四、运行结果

观察结果:一旦程序烧录完成并运行,你应该能看到LED渐变闪烁的。如果一切正常,恭喜你,你现在已经是一个“点灯大师”了!​​

五、注意事项

1.确保你的开发环境和工具链已经正确安装和配置。

2.在STM32CubeMX中配置GPIO时,注意选择正确的引脚和模式。

3.在STM32CubeMX中配置定时器时,注意选择正确地勾选。

4.在编写代码时,确保使用正确的GPIO端口和引脚宏定义。

5.LED没有按预期闪烁,检查代码、连接和电源是否正确。

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值