STM32 基于HAL库的LED流水灯

STM32 基于HAL库的LED流水灯

引言:

​ 在嵌入式系统开发中,LED流水灯是一个经典的实验项目,它不仅能够展示出微控制器的强大能力,还能为我们带来乐趣和创造力的发挥。而在本次学习中,我们将使用STM32F103C8t6,并基于HAL库(Hardware Abstraction Layer)来实现LED流水灯的效果。

STM32是一种功能强大的微控制器系列,具有高性能和广泛的应用领域。而HAL库则是STMicroelectronics为STM32开发的一套硬件抽象层,它提供了一系列的API函数,可以简化底层硬件操作,并提高开发效率。

让我们一起开始这个有趣而富有挑战性的学习吧!

٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶

一、STM32CubeMX安装

1. 基本介绍

STM32CubeMX 是用于 32 位 ARM Cortex STM32 微控制器的图形工具。它允许对 STM32 微控制器和微处理器进行非常简单的配置,生成初始化 C 代码,还可以通过一步一步的操作为 Arm Cortex-M 内核或 Arm Cortex-A core 生成部分 Linux 设备树。它是 STMCube 生态系统的一部分,且可以作为独立应用程序或作为 Eclipse 插件集成在开发环境(STM32CubeIDE)中。

2. 主要特点

  • 直观的 STM32 微控制器和微处理器选择

  • 丰富易用的图形用户界面,可配置:

  • a. 引脚分配:带自动解决冲突

  • b. Arm Cortex-M Core 外设和中间件功能模式以及相关参数约束:带动态验证

  • c. 时钟树:带动态验证

  • d. 电源测算:有功耗估计结果

  • 生成可运行在 IAR、Arm Cortex-M core 的 Keil 和 STM32CubeIDE(GCC编译器)环境下的初始化 C 代码项目工程

  • 为 Arm Cortex-A core(STM32微处理器)生成部分 Linux 设备树

  • 可借助 STM32PackCreator 开发增强型 STM32Cube 扩展包

  • 将 STM32Cube 扩展软件包集成到项目工程中

  • 支持多种操作系统:Windows,Linux,MacOS。(必须安装 Java 环境)

3. 软件下载

3.1 Java 官网下载
    下载地址: https://www.java.com/zh_CN/download/windows-64bit.jsp(尽量安装最新版 64 位的Java)
    下载方法:

  • 打开官网下载地址,点击 同意并开始免费下载;

2.1_1

  • 无需登陆,直接可以下载。

​ 3.2 CubeMX 官网下载
     下载地址: 官网下载地址 --> https://www.st.com/stm32cubemx
     下载方法:

    1. 打开官网下载地址,点击 获取软件;
  • 2.2_1

    1. 选择对应的版本进行下载。(需要登陆账号,其中 Linux 和 MacOS 的配置文件和 Windows 安装包在同一个文件中)
      2.2_2
  • 2.2_3

3.3 云盘下载
    下载地址:https://pan.baidu.com/s/1-7z6Q0Mlscaw8yiCZzfkug(提取码:5eby)
    下载方法:直接下载。(云盘收录了 STM32Cube 系列软件)

4 . 软件安装

4.1 Java 安装

  1. 打开 jre-8u261-windows-x64.exe 安装包,勾选更改目标文件夹,点击 安装;

3.1_1

  1. 选择合适的安装目录,点击 下一步;

    3.1_2

  2. 等待自动安装;

    3.1_3

  3. 安装完毕,点击 关闭;

    3.1_4

  4. 在开始菜单中查看到以下文件夹,即代表安装成功。

    3.1_5

4.2 CubeMX 安装

  1. 打开 SetupSTM32CubeMX-6.0.0.exe 文件,如果未安装 Java 环境,将会出现报错;

3.2_0

  1. 安装 Java 后,打开 SetupSTM32CubeMX-6.0.0.exe 文件,其他系统安装参考 Readme.html,点击 Next;

3.2_1

  1. 勾选 I accpt,点击 Next;

3.2_2

  1. 勾选第一个,点击 Next;

    3.2_3

(第二个勾选表示参加改善用户体验计划,即上传用户日志数据,若勾选安装后,可在软件 Help > User Preferences > General Settings 里取消)

  1. 选择合适的安装路径,点击 Next;(若路径未创建,会提示路径将被创建)

3.2_4

3.2_5

  1. 根据需求勾选,点击 Next;

3.2_6

  1. 程序自动安装,安装完成后,点击 Next;

3.2_7

3.2_8

  1. 提示安装成功和一个卸载程序被创建在安装目录的 Uninstaller 文件夹中,点击 Done;

3.2_9

  1. 打开 STM32CubeMX 软件;

3.2_10

  1. 若安装的 Java 是 32 位的,将会在每次打开软件时弹窗提醒,只需安装 Java 64 位即可消除弹窗;

3.2_11

  1. 软件界面如下;

3.2_12

二、CubeMX项目创建

  1. 首先在File文件下拉框的内部选择新建工程

在这里插入图片描述

  1. 在弹出的对话框中,下拉列表中输入你的芯片名称,并且选择你的芯片类型。

在这里插入图片描述

  1. 然后选择系统的debug模式 (Serial Wire)

在这里插入图片描述

  1. 然后选择芯片的引脚并且设置对应的模式

这里我设置PC15 、PA3、PB0为LED发光的端口

在这里插入图片描述

  1. 接下来,我们来配置中断的端口

我设置 PA15 为中断的端口

在这里插入图片描述

  1. 接下来,我们来设置中断端口的模式配置

这里,我设置为浮空并且下降沿、上升沿都触发

在这里插入图片描述

  1. 开启中断,并且配置优先级

在这里插入图片描述

  1. 设置时钟36M

    在这里插入图片描述

  2. 基础配置

在这里插入图片描述

在这里插入图片描述

  1. 生成工程

在这里插入图片描述

三、项目代码

实现思路:

由于我们需要实现的效果为当开关接高电平时,LED流水灯工作,接低电平时,LED流水灯停止工作。

因此,我们可以设置一个变量,当该变量为1的时候流水灯进行工作,当该变量为 0的时候流水灯不进行工作。

而这个变量的改变,就取决于中断函数的内部,当接高电平的时候在中断函数的内部可以将该变量置一,当接低电平的时候,可以在中断函数内部将该变量置零。

因此,即完成了我们整个过程。

中断函数判别变量的设置
/* USER CODE BEGIN PV */
uint16_t flag = 2;  // 默认关闭流水灯
/* USER CODE END PV */
main函数内部的内容.
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  
	  
		if(flag == 1)
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,1);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,0);
			HAL_Delay(100);
			
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,0);
			HAL_Delay(100);
			
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);
			HAL_Delay(100);
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0);
			HAL_Delay(100);

		}
  }

中段触发函数的设置.

/* USER CODE BEGIN 4 */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    /* Prevent unused argument(s) compilation warning */
	
	if(GPIO_Pin == GPIO_PIN_15)   // 判断是否为对应的中断端口
	{
		GPIO_PinState pin_State = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15); // 获取对应端口状态
		
		// 端口电平到判断变量的映射
		
		flag = pin_State;
		
	}

	
    /* NOTE: This function Should not be modified, when the callback is needed,
             the HAL_GPIO_EXTI_Callback could be implemented in the user file
     */
}

四、实践结果

实践结果展示

VID_20231023_164651

实践结果解释

​ 当插入高电平的时候,流水灯触发,当插入低电平的时候流水灯功能关闭,因为是浮空输入,所以当插入高电平和在浮空的时候类似,但是在高电平的时候对应流水灯的亮度会提高。

KEIL 调试波形观察

在这里插入图片描述

在这里插入图片描述

五、总结

本次实验是基于STM32的HAL库实现LED流水灯效果。通过该实验,对STM32的HAL库以及GPIO、外部中断的使用有了更深入的了解

在实验中,通过HAL库提供的函数,我可以方便地对GPIO引脚进行初始化、配置和控制。在本次实验中,我使用了3个GPIO引脚来控制3个LED灯,通过外部中断的触发来控制LED流水灯功能是否打开

通过本次实验,我不仅学会了使用STM32的HAL库来控制GPIO引脚和定时器,还掌握了调试代码的方法和技巧。

总而言之,通过本次实验,我对STM32的HAL库的使用有了更深入的了解,这次实验不仅提高了我的实践能力,还培养了我对细节的关注和解决问题的能力。我相信这些经验将对我今后的学习和工作有所帮助。

最后感谢大佬友情链接:

  • https://blog.csdn.net/Brendon_Tan/article/details/107685563
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LX很爱吃葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值