【STM32单片机】HAL库LED点灯

        HAL库(Hardware Abstraction Layer)全称就是Hardware Abstraction Layer(抽象印象层),是STMicroelectronics推出的一套面向STM32系列微控制器的软件库。HAL库提供了一组API,用于简化底层硬件的访问和控制,使开发者能够更容易地编写嵌入式应用程序。HAL库提供了丰富的功能,包括GPIO控制、定时器、中断、UART、SPI、I2C等外设的驱动函数。开发者可以通过调用这些函数来实现对硬件的配置和操作。HAL库的优势在于它提供了一种独立于硬件平台的编程接口。无论使用哪种型号的STM32微控制器,开发者都可以使用相同的API进行开发,减少了学习和移植的成本。同时,HAL库还提供了一套易于使用的代码生成工具,可以根据用户的需求自动生成初始化代码,进一步简化了开发流程。

一、开发环境搭建

1.安装JDK

由于STM32CubeMX是Java实现的,需要安装jdk。通过链接进入jdk官网:

Java Downloads | Oracle 中国

进入之后,点击Java archive

点击Java SE,选择8u202 and earlier这个版本

​按自己电脑操作系统选择,这里下载的是Windows x64的jdk环境

(注:在点击下载之后,会弹出一个Oracle账户登录,没有注册需要先注册)

下载完成后,找到文件,双击安装

2.安装STM32CubeMX

(1)通过下方链接进入官网下载STM32CubeMX:

STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

(2)通过百度网盘链接下载

链接:https://pan.baidu.com/s/1vZ7JCZawY2WB9XlJYsZ2yQ 
提取码:by06 

右键选择管理员身份运行

开始安装

  勾选同意选项 ,点击Next  

勾选已阅读,点击Next

自行选择下载目录,点击Next  

点击确定

后面都点击Next  

安装完成,点击Done

(3)安装固件库

选择help,点击Manage...

找到STM32F1, 下载1.8.5版本固件库

二、实现LED流水灯,用GPIO端口完成2只LED灯的周期闪烁。

1.创建项目

(1)新建file,创建新项目

(2)点击搜索并选择芯片STM32F103C8T6

 (3)双击创建

(4)选择SYS

(5)选择RCC

(6)选择GPIO,点击输出设置GPIO_Output,此处我选择PA15,PB0,PC13三个端口

 

(8)Clock Configuration设置

(9)Project Manager设置  

 

(10)各板块完成设置后使用keil打开

2.keil中修改main.c代码  

(1)在while(1)中输入代码,然后点击编译生成Hex文件,进行烧录

    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灭

(2)点击编译生成hex文件

3.烧录运行结果

二、采用中断控制LED亮灭

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

1.在STM32CubeMX中创建项目

SYS和RCC的配置不变,GPIO端口配置和中断配置作如下修改:

 

2.keil中修改main.c代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	
	switch(GPIO_Pin){
		case GPIO_PIN_0:
			if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_RESET)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
		break;
		case GPIO_PIN_1:
			if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) == GPIO_PIN_RESET)
				HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_6);
		break;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值