【无标题】

本文介绍了如何在STM32平台上使用HAL库进行GPIO控制LED流水灯,包括安装JRE、HAL库的配置,以及通过中断模式实现开关控制LED的闪烁。作者指导读者通过Keil的软件仿真功能观察和分析GPIO时序,验证LED闪烁周期。
摘要由CSDN通过智能技术生成

基于HAL库的LED流水灯
1 下载并安装JRE
安装STM32CubeMX软件是基于java环境运行的,所以需要安装JRE才能使用。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
在这里插入图片描述

2 下载并安装HAL库
https://www.st.com/content/st_com/en.html
官方网址下载

打开STM32CubeMX 软件,点击右上角“Help”,选择“Manage embedded saftware packages”
在这里插入图片描述

(2)如下所示的选择型界面,勾选所需的HAL库,本教程开发的STM32F103C8t开发板作为演示,选择的则为STM32F1 —>STM32Cube MCU Package for STM32F1 Series 1.8.5版本。
注意,需要提前在官网上注册才能下载

实验任务:

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

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

2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;

接低电平时,LED流水灯停止工作。

二. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。

请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

点击start project开始工程
在这里插入图片描述
配置SYS
在这里插入图片描述

然后配置RCC在这里插入图片描述
然后配置GPIO,本实验选择PA5、PB0、PC14点击右侧芯片,找到所需要的端口,并将其设置为GPIO_Output,然后修改Pin脚的电平,将其设置为高电平。
在这里插入图片描述
在这里插入图片描述
点击Code Generator,进行勾选
在这里插入图片描述
创建打开工程

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);
}

生成hex文件并烧录

在这里插入图片描述

1)建立工程配置参数
重新建立一个工程,按照上个实验步骤进行相关配置,需要注意的是,该实验比上面的多了几步配置。
配置GPIO:

A0持续输出高电平
A2持续输出低电平
A8作为开关,配置为上升沿和下降沿都触发,用一个标签A_EXIT

在这里插入图片描述
配置NVIC:
在这里插入图片描述
2、代码编写与编译

打开KEIL工程,打开User文件下的stm32f1xx_it.c文件,找到这个函数的位置
找到HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)这个函数,这个函数需要自己编写的,代码如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == A_EXIT_Pin){

    //获取A8的电位
    GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOA,A_EXIT_Pin);

    //低电位
    if(pinState==GPIO_PIN_RESET)
			{	
				HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
				HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
				
			
			}
    //高电位
    else
    {   
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
			}
    }

}
代码编写完将这个函数插入到main.c文件中任意位置
生成.hex文件后烧录到芯片中,然后运行。
在这里插入图片描述
在这里插入图片描述

2在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。

2.1请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

打开第1个实验的keil工程,点击Debug,然后再出现的页面,找到波形图的按钮点击
在这里插入图片描述
观察波形图可以发现,GPIOA、GPIOB、GPIOC口的流水灯轮流被点亮,间隔为两秒,高低电平转换周期以及LED闪烁的周期为3秒。在这里插入图片描述
总结
学习了中断模式,并将其成功的应用在了LED的亮灭上,又一次使用STMCube进行HAL库的设置,增加了对STMCube的熟练操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值