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

一、开发环境

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

单片机:STM32F407ZGT6

Keil版本:5.32

STM32CubeMX版本:6.9.2

STM32Cube MCU Packges版本:STM32F4 V1.27.1

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

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

 二、配置STM32CubeMX

  1. 启动STM32CubeMX:打开STM32CubeMX软件。
  2. 选择MCU:在软件中选择你的STM32型号-STM32F407ZGT6。
  3. 选择串口和系统时钟:

  4. 时钟配置:
  5. 配置LED引脚: 当前硬件的LED灯的引脚是PF9:在Pinout & Configuration标签页中,找到LED连接的GPIO端口,并设置为输出模式,通常选择Push-Pull,GPIO output level选高电平。
  6. 定时器配置:配置定时器的计数模式、预分频系数和重载值,TIM6定时器是一个1秒周期的定时器,如图。

    理论解释:时钟源是84MHz,预分频器(Prescaler)的值设置为 8400-1 = 8399。周期(Period)的值设置为 10000-1 = 9999。
    时钟源频率 / (预分频器值 + 1) = 84MHz / (8399 + 1) = 84MHz / 8400 = 10kHz,这意味着定时器每100微秒(1/10kHz)增加一次。
    周期时间 = (周期值 + 1) * (1 / 计数频率) = (9999 + 1) * (1 / 10kHz) = 10000 * 0.0001s = 1s
    所以,这个TIM6定时器被配置为1秒的周期。每当定时器从0计数到9999时,它会产生一个更新事件或触发一个中断(如果中断被启用),然后重新开始从0计数。

  7. 配置NVIC:配置嵌套向量中断控制器(NVIC)以接收定时器的中断。

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

三、添加代码

  1.  启动定时器:在main.c的MX_TIM6_Init()后面添加启动定时器的代码,使其开始工作并生成定时中断。

    	HAL_TIM_Base_Start_IT(&htim6);
  2. 编写中断处理函数:在tim.c的末尾添加中断处理函数中,编写定时器中断处理函数,在中断中翻转LED的状态(即点亮或熄灭)。
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    	if(htim->Instance == TIM6)
    	{
    			HAL_GPIO_TogglePin( led_GPIO_Port, led_Pin);
    	}
    }
    
  3. 编译代码:Keil编译生成的代码。
  4. 烧录程序将编译好的程序用ST-LINK烧录到STM32微控制器中。

四、运行结果

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

五、注意事项

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

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

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值