一、开发环境
硬件:正点原子探索者 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
- 启动STM32CubeMX,新建STM32CubeMX项目:
- 选择MCU:在软件中选择你的STM32型号-STM32F407ZGT6。
-
选择时钟源:
- 配置时钟:
- 使能Debug功能:Serial Wire
- HAL库时基选择:SysTick
- 配置LED引脚: 当前硬件的LED灯的引脚是PF9:在Pinout & Configuration标签页中,找到LED连接的GPIO端口,要看引脚能匹配哪个定时器PWM,将PF9配置为TIM14_CH1,并设置为PWM模式,通常选择Push-Pull。
-
定时器配置:选择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 - 生成代码:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM,然后点击Project > Generate Code生成代码。
三、添加代码
-
增加渐变代码:在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; // 切换方向 } }
- 编译代码:Keil编译生成的代码。
-
烧录程序:将编译好的程序用ST-LINK烧录到STM32微控制器中。
四、运行结果
观察结果:一旦程序烧录完成并运行,你应该能看到LED渐变闪烁的。如果一切正常,恭喜你,你现在已经是一个“点灯大师”了!
五、注意事项
1.确保你的开发环境和工具链已经正确安装和配置。
2.在STM32CubeMX中配置GPIO时,注意选择正确的引脚和模式。
3.在STM32CubeMX中配置定时器时,注意选择正确地勾选。
4.在编写代码时,确保使用正确的GPIO端口和引脚宏定义。
5.LED没有按预期闪烁,检查代码、连接和电源是否正确。