基于HAL库的LED流水灯

一 实验目的

1了解STM32中断原理和HAL库函数开发方法。

2学习使用stm32CubeMX和Keil配合使用HAL库完成任务。

3学习使用Keil的软件仿真逻辑分析仪功能观察管脚时序波形,以便动态跟踪调试和定位代码故障点。

二实验前准备

1 下载并安装JRE

安装STM32CubeMX软件是基于java环境运行的,所以需要安装JRE才能使用。

Java Downloads | Oracle

安装全选默认

2 下载并安装HAL库

STMicroelectronics: Our technology starts with you

官方网址下载

打开STM32CubeMX 软件,点击右上角“Help”,选择“Manage embedded saftware packages”

(2)如下所示的选择型界面,勾选所需的HAL库,本教程开发的STM32F103C8t开发板作为演示,选择的则为STM32F1 —>STM32Cube MCU Package for STM32F1 Series 1.8.5版本。

注意,需要提前在官网上注册才能下载

二 实验任务

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

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

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

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

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

三 实验内容

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

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

1)用stm32CubeMX创建工程并进行相关配置

安装好stm32CubeMX后,点击File,然后点击New Project创建新的工程。

然后在弹出来的页面中选择该实验需要用到的芯片为STM32F103C8T6,然后点击start project开始工程

然后配置SYS

然后配置RCC

然后配置GPIO,本实验选择PA5、PB0、PC14点击右侧芯片,找到所需要的端口,并将其设置为GPIO_Output,然后修改Pin脚的电平,将其设置为高电平。

设置时钟

设置时钟,将按钮电亮。

设置工程名,文件路径

点击Code Generator,进行勾选

创建打开工程。

2、代码编写及编译

在Keil中点击main.c,然后将while(1)循环中添加以下代码。

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);

//????

HAL_Delay(1000);

//?????A4

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);

//?????B5

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);

//????

HAL_Delay(1000);

//?????B5

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);

//?????C14

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);

//????

HAL_Delay(1000);

//?????C14

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);

    /* USER CODE BEGIN 3 */代码更改完成后,点击魔法棒,进行相关设置。

生成hex文件并烧录

实验结果如图

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

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文件。

生成.hex文件后烧录到芯片中,然后运行。

运行结果

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

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

打开第1个实验的keil工程,点击Debug,然后再出现的页面,找到波形图的按钮点击

然后选择实验用到的GPIO口,

点击运行

观察波形图可以发现,GPIOA、GPIOB、GPIOC口的流水灯轮流被点亮,间隔为两秒,高低电平转换周期以及LED闪烁的周期为3秒。

实验总结

1 在第一题中,我们成功地使用GPIO端口实现了3只LED红绿灯的周期闪烁。通过配置GPIO的输出模式和使用循环语句控制LED的亮灭,我们实现了流水灯效果。通过Keil的软件仿真逻辑分析仪功能,我们观察到了LED的时序波形。

2 在第二题中,我们将一个开关通过杜邦线模拟连接到GPIOA的某一管脚上,并采用中断模式编程。当开关接高电平时,LED流水灯工作;当开关接低电平时,LED流水灯停止工作。通过Keil的软件仿真逻辑分析仪功能,我们观察到了开关状态对LED流水灯的影响。

3 使用Keil的软件仿真逻辑分析仪功能可以方便地观察管脚的时序波形,帮助我们判断时序状态是否正确以及高低电平转换周期的实际数值。尽管没有实际的示波器设备,但这种功能在一定程度上提供了方便和帮助,可以用于动态跟踪调试和定位代码故障点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值