【STM32】HAL库LED点灯

一、要求

了解并掌握HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:

1、重做上一个LED流水灯作业,用GPIO端口完成2只LED灯的周期闪烁。

2、接上,再用GPIO端某一管脚接2个开关(用杜邦线模拟代替)。采用中断模式编程,当2分开关接高电平时,对应的两个LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。

二、HAL库介绍

STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。在这里插入图片描述

三、实验

(一)环境配置

1.安装 stm32CubeMX
链接: https://www.st.com/en/development-tools/stm32cubemx.html
2.安装JDK
链接: 链接: https://pan.baidu.com/s/1E7V7SCE5LQQ9oDIboqqJkw?pwd=9cmq
提取码: 9cmq

(二)LED周期闪烁

1.要求

重做上一个LED流水灯作业,用GPIO端口完成2只LED灯的周期闪烁。

2.进行实验

(1)新建项目
在这里插入图片描述

(2)选择芯片

### STM32 HAL LED点灯 示例代码 为了实现STM32 HAL控制LED的点亮操作,可以参照以下步骤和示例代码。 #### 配置环境 首先,在STM32CubeMX中完成项目配置。选择合适的微控制器型号并配置相应的GPIO引脚用于连接LED。确保选择了正确的时钟源和其他必要的外设设置[^3]。 #### 初始化代码生成 通过STM32CubeMX生成初始化代码后,在`main.c`文件中的`while (1)`循环里加入具体的LED控制逻辑: ```c /* USER CODE BEGIN WHILE */ while (1) { /* Turn on the LED connected to PA9 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); // 使GPIOA9置高电平——点亮[^4] /* Delay for one second */ HAL_Delay(1000); /* Turn off the LED connected to PA9 */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); /* Another delay of one second before toggling again */ HAL_Delay(1000); } /* USER CODE END WHILE */ ``` 这段代码实现了每秒一次切换PA9上的LED状态的效果。当写入`GPIO_PIN_SET`时,LED会亮起;而写入`GPIO_PIN_RESET`则会使它熄灭。 对于更复杂的多盏LED轮流闪烁效果,则可以在同一个`while (1)`循环体内依次调用不同端口上相应管脚的操作函数来达到目的: ```c HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 1亮 HAL_Delay(1000); // 延时1s HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 1灭 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // 2亮 HAL_Delay(1000); // 延时1s HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // 2灭 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 3亮 HAL_Delay(1000); // 延时1s HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 3灭 ``` 上述代码片段展示了如何利用多个不同的GPIO引脚分别控制三盏独立工作的LED,并让它们按顺序逐一发光再关闭的过程[^5]。 #### 中断方式读取按键值 如果希望进一步优化设计,比如采用中断驱动的方式来处理外部事件触发(如按下按钮),那么可以通过配置NVIC优先级以及编写对应的回调函数来进行更加高效的任务调度。这种方式不仅提高了系统的响应速度还降低了CPU负载[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值