基于HAL库的LED流水灯

基于HAL库的STM32LED流水灯实验教程
本文介绍了使用STM32F103C8T6微控制器通过HAL库实现LED流水灯控制的过程,包括工程配置、GPIO设置、代码编写、中断模式控制和错误处理,是嵌入式学习入门的好例子。

一、HAL库点亮流水灯

1、用stm32CubeMX创建工程并进行相关配置

安装好stm32CubeMX后,点击File,然后点击New Project创建新的工程。

在这里插入图片描述
然后在弹出来的页面中选择该实验需要用到的芯片为STM32F103C8T6,然后点击start project开始工程
在这里插入图片描述
然后配置SYS,
在这里插入图片描述
接着配置RCC,
在这里插入图片描述
然后是GPIO的配置,该实验选择PA5、PB0、PC14来作为流水灯的输出端口,点击右侧芯片,找到所需要的端口,并将其设置为GPIO_Output,然后修改Pin脚的电平,将其设置为高电平。
在这里插入图片描述
在这里插入图片描述
然后设置时钟,将按钮电亮。
在这里插入图片描述
然后设置工程名,文件路径。
在这里插入图片描述
然后点击Code Generator,进行勾选。
在这里插入图片描述
此时相关的配置已经弄完,之后便可创建打开工程。
在这里插入图片描述
工程打开之后,便进入了Keil,然后就是进行代码的编写。

2、代码编写及编译

在Keil中点击main.c,然后将while(1)循环中添加以下代码。

while (1)
  {
   		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);//PA5红灯亮
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);//灯灭
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);//PB0绿灯亮
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);//PC14黄灯亮
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
  }

代码更改完成后,点击魔法棒,进行相关设置。
在这里插入图片描述
在这里插入图片描述
然后点击OK便设置好了,之后点击运行生成.hex文件。

3、烧录

将电路连接好后,打开FlyMcu,将文件烧录到电路中。
先将芯片的BOOT0置1,BOOT1置0,然后将文件下载到电路中,然后再将BOOT1置0,手动复位,这样再点击开始编程,电路就开始工作了。
在这里插入图片描述
烧录结果:
在这里插入图片描述

二、采用中断模式控制灯的亮灭

1、按如下设置Debug

在这里插入图片描述

2、点击调试

在这里插入图片描述

3、选择逻辑分析仪

在这里插入图片描述

4、选择要观察的引脚

(1)点击Setup Logic Analy

在这里插入图片描述

(2)添加要观察的引脚

在这里插入图片描述

5、输入(PORTB & 0X00000000)>>0

Display Type选择Bit,依次输入(PORTA & 0X00008000)>>15、(PORTC & 0X00002000)>>13
在这里插入图片描述
在这里插入图片描述

6、运行程序

在这里插入图片描述
在这里插入图片描述

三、总结

LED流水灯实验是嵌入式系统学习中的基础实验之一,它有助于初学者理解如何控制数字输出以创建简单的视觉效果。本次实验基于HAL库,旨在通过控制STM32系列微控制器的GPIO引脚,实现LED流水灯效果。以下是对该实验的总结:

首先,我们学习了HAL库的基本概念,HAL库是STMicroelectronics为STM32系列微控制器提供的一种抽象层,它简化了硬件的访问和控制,使得嵌入式开发更加便捷。通过HAL库,我们可以轻松地配置和控制微控制器的外设,如GPIO。

实验的第一步是配置GPIO引脚。我们使用HAL库提供的函数来初始化和配置LED所连接的引脚,确保它们处于输出模式。HAL库提供了丰富的函数来配置引脚,包括设置引脚的状态、速度和上拉/下拉等属性。

接下来,我们使用循环结构控制LED的状态,以创建流水灯效果。我们可以使用HAL库的函数来设置引脚的状态,从而点亮或熄灭LED。通过延时函数,我们可以控制LED的亮灭时间,从而调整流水灯的速度。

在实验中,我们还学习了如何使用HAL库的函数来处理错误和异常情况。这有助于我们更好地理解如何调试嵌入式系统,并提高代码的鲁棒性。

总结而言,基于HAL库的LED流水灯实验帮助我们掌握了嵌入式系统中的基本概念和技能。我们学会了如何配置GPIO引脚、使用HAL库函数控制外设,以及如何处理错误情况。这些技能对于嵌入式系统开发和微控制器编程都非常重要。通过这个实验,我们能够创建一个简单但令人满意的流水灯效果,这为我们今后更复杂的项目奠定了坚实的基础。

### 蓝桥杯 HAL LED流水灯 示例代码 教程 #### 使用STM32 HAL实现LED流水灯效果 为了实现在蓝桥杯竞赛中的LED流水灯效果,可以利用STM32控制器及其HAL来编写程序。具体来说,通过控制GPIO端口的状态变化,可以让连接到这些端口上的LED按照预定顺序点亮和熄灭。 在初始化阶段,需要配置好用于驱动LED的GPIO引脚,并设置它们的工作模式为输出。对于具体的硬件平台而言,假设使用的是基于STM32系列MCU开发板,则可以通过如下方式完成基本配置: ```c // 初始化 GPIO 引脚作为输出 void MX_GPIO_Init(void) { __HAL_RCC_GPIOC_CLK_ENABLE(); // 启用 GPIOC 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置 PC0 到 PC7 为输出 */ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } ``` 接下来,在主循环中定义一个函数用来执行实际的流水灯光效逻辑。这里采用简单的延时方法来模拟不同LED之间的切换时间间隔。每次只有一位有效(即只有一个LED处于导通状态),其余均为高阻态或关闭状态。 ```c #include "stm32f1xx_hal.h" #define DELAY_MS(x) HAL_Delay(x) int main(void) { HAL_Init(); MX_GPIO_Init(); uint8_t i; while (1) { for(i=0;i<8;i++) { // 设置PC[i] 输出低电平使对应的LED亮起 HAL_GPIO_WritePin(GPIOC, GPIO_Pin_All^(1<<i), GPIO_PIN_RESET); // 延迟一段时间让肉眼可见光的变化 DELAY_MS(200); // 清除当前位并准备下一个周期 HAL_GPIO_WritePin(GPIOC, GPIO_Pin_All^(1<<i), GPIO_PIN_SET); } } return 0; } ``` 上述代码片段展示了如何借助于STM32 HAL创建一个基础版本的LED流水灯应用程序[^1]。此程序会依次点亮八个LED,形成流动的效果;当所有LED都已遍历完毕后重新回到起点继续下一轮操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值