【STM32】HAL库LED点灯

【STM32】HAL库LED点灯

一. 实验目的:

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

二. 实验内容:

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

2、接上,再用GPIO端某一管脚接2个开关(用杜邦线模拟代替)。采用中断模式编程,当2分开关接高电平时,

对应的两个LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。

二. 在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察LED管脚的时序波形,分析上面作业按键中断时,LED灯的波形变化情况。

二. 具体实验过程:

(1)HAL库介绍

HAL库(Hardware Abstraction Layer)是STMicroelectronics提供的一种高级库,旨在简化STM32系列单片机的开发过程。它封装了底层的复杂性,提供了更高级别的API,使得开发变得更加简单和快速。HAL库的主要优点包括:

1.简化开发流程:

开发人员不需要深入了解底层硬件细节,只需要调用HAL库提供的API函数即可实现底层硬件控制,从而可以更专注于应用程序本身的开发。

2.提高代码复用性:

由于HAL库提供了标准化的接口,可以方便地在不同的STM32系列芯片之间共享代码。

3.增强可移植性:

HAL库的这些特点使得代码更容易在不同的硬件平台上移植。
然而,HAL库也有其缺点,如增加代码复杂度和系统资源占用。此外,与STM32标准库相比,HAL库在资源利用率方面通常不如标准库,因为标准库提供了更底层的接口,开发者可以更好地控制资源的利用。

总的来说,选择使用STM32标准库还是HAL库取决于项目的需求和开发者的背景。对于需要快速开发、简化开发流程的项目,HAL库是一个很好的选择。而对于需要更高灵活性和资源利用率的项目,标准库可能更适合。

(2)具体操作流程

第一步,到官网或者相关分析网站下载cubeMX,这里不多赘述。
1.安装jdk
由于STM32CubeMX是Java实现的,需要安装jdk环境。
jdk官网下载链接:
https://www.oracle.com/java/technologies/javase-downloads.html
2.安装STM32CubeMX
下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html

第二步,打开cubeMX
进入cubeMX中,选择新建项目
选择使用芯片,这里使用的是stm32f108c6
配置RCC、SYS、以及我们用来控制led亮灭的GPIO口
在这里插入图片描述

在这里插入图片描述
点击创建项目
在这里插入图片描述
然后我们会发现文件里会生成一个已经配置好了的keil文件
在这里插入图片描述
打开文件即可开始编写代码。
为了进一步简化操作,我们也可以选择在已配置好的keil文件中加入一些我们已经写好的调用相关部件的函数。

1.实现LED流水灯
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);  // ֆ1
	HAL_Delay(1000); // ғʱ1s
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);  // ֆ1İ
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);  // ֆ2
	HAL_Delay(1000); // ғʱ1s
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);  // ֆ2İ
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);  // ֆ3
	HAL_Delay(1000); // ғʱ1s
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);  // ֆ3İ


    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

2.实现GPIO控制流水灯
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
static GPIO_PinState Receive;
     if(1==1)
		 {HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
		  HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
		  HAL_Delay(1000);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
		  HAL_Delay(1000);
		 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		  HAL_Delay(1000);
		 }
		 else{
		 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
			 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		 
		 }

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

成果展示

hal库操作流水灯


在这里插入图片描述

三. 总结:

本次实验中学习了通过cubeMX软件来使用hal库配置单片机的运行环境和函数,通过使用hal库的方式,极大的简化了使用keil设计stm32程序的过程,省去了查阅相关寄存器的过程,使我受益匪浅。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用STM32 HAL库实现手机蓝牙点灯功能,首先需要将蓝牙模块与STM32微控制器相连接。可以通过UART串口通信方式将蓝牙模块与STM32相连。 接下来,需要使用STM32 HAL库中提供的蓝牙通信函数来实现与手机之间的蓝牙通信。通过蓝牙协议栈可以实现手机与STM32之间的数据交互。 在STM32的应用程序中,需要配置蓝牙模块的相应参数,例如蓝牙模块的波特率以及通信模式等。可以使用HAL库中提供的函数来配置蓝牙模块。 当手机发送控制指令给STM32时,STM32通过蓝牙模块接收指令。接收到指令后,STM32根据指令来控制LED灯的状态。可以使用HAL库中提供的GPIO控制函数来控制LED的点亮与熄灭。 在STM32的中断服务程序中,需要编写相应的代码来解析手机发送的指令。需要根据指令来判断是要点亮LED还是熄灭LED。在收到指令后,再通过GPIO控制函数来控制LED的状态。 最后,通过蓝牙模块将STM32的控制结果反馈给手机,手机可以通过接收到的数据来判断LED是否成功点亮或熄灭。 总之,通过STM32 HAL库的蓝牙功能以及GPIO控制函数,可以实现手机蓝牙点灯的功能。具体的实现步骤包括配置蓝牙模块、接收解析手机指令、控制LED状态以及反馈控制结果给手机等。 ### 回答2: 要使用STM32 HAL库来控制手机蓝牙点灯,首先需要确保你的STM32芯片支持蓝牙功能。在开始之前,确保你已经安装好了HAL库和相关的开发环境。 接下来,你需要创建一个HAL工程,并添加蓝牙相关的库。在主函数中,初始化蓝牙模块,并设置相应的参数。你可以使用HAL库提供的函数来初始化并配置蓝牙。 为了点亮手机上的LED灯,你需要通过蓝牙连接手机,并发送一个特定的命令给手机。你可以在HAL库中使用蓝牙通信函数,与手机进行数据通信。 首先,通过蓝牙进行设备搜索,找到你的手机并连接到它。一旦连接成功,你可以使用HAL库提供的函数来发送一个命令给手机,以点亮手机上的LED灯。例如,你可以发送一个特定的字符串“LED ON”给手机,告诉它要点亮LED灯。 手机接收到命令后,你需要在手机端编写一个蓝牙应用程序来接收并处理这个命令。当手机接收到“LED ON”这个命令后,它就会执行相应的操作来点亮LED灯。 总体来说,使用STM32 HAL库来控制手机蓝牙点灯的过程分为两部分:在STM32端初始化并配置蓝牙,通过蓝牙与手机进行数据通信;然后在手机端编写一个应用程序来接收和处理来自STM32的命令,从而控制手机上的LED灯。 ### 回答3: 要实现手机蓝牙点灯的功能,可以使用STM32 HAL库来控制蓝牙模块和LED灯。首先需要在STM32开发环境中导入HAL库,并配置蓝牙模块和LED灯的硬件相关参数。 在代码中,首先需要进行蓝牙模块的初始化设置。通过HAL库提供的函数,可以配置蓝牙模块为主模式或从模式,并设置蓝牙名称和其他相关参数。在初始化之后,可以通过HAL库提供的蓝牙发送函数,与手机进行通信。 然后,需要配置LED灯的硬件相关参数。使用HAL库提供的GPIO初始化函数,将LED灯连接到特定引脚上,并设置引脚的模式和状态。 接下来,在蓝牙通信的代码中,可以设置一个特定的指令,用于控制LED灯的开关状态。当手机收到这个指令后,通过蓝牙模块发送给STM32控制器。 在STM32控制器的代码中,通过接收到的指令来控制LED灯的开关状态。使用HAL库提供的GPIO输出函数,可以将引脚设置为高电平或低电平,从而点亮或关闭LED灯。 最后,需要在主函数中进行一些初始化操作和循环检测蓝牙接收情况。通过HAL库提供的蓝牙接收函数,可以获取手机发送的指令。根据不同的指令,通过调用LED控制函数,实现点灯或熄灭。 总之,通过STM32 HAL库,我们可以实现手机蓝牙点灯的功能。使用蓝牙模块与手机通信,通过控制LED灯的开关状态,实现点灯或熄灭的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值