基于HAL库的LED流水灯

一. 了解并掌握STM32中断原理,HAL库函数开发方法。安装 stm32CubeMX,配合Keil,使用HAL库方式完成下列任务:
1、LED流水灯,用GPIO端口完成3只LED红绿灯的周期闪烁。
2、用stm32F103核心板的GPIOA端某一管脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED流水灯工作;接低电平时,LED流水灯停止工作。
二. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。请用此功能观察第1题中3个GPIO端口流水灯的输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

一、搭建STM32的开发环境

  • 硬件:stm32f103c8t6 核心板
  • 软件:JDK、STM32CubeMX 6.9.2
  • 软件:keil5 MDK

STM32CubeMX 是一个图形化的工具,也是配置和初始化C代码生成器(STM32 configuration and initialization C code generation),也就是自动生成开发初期关于芯片相关的一些初始化代码。
它包含了 STM32 所有系列的芯片,包含示例和样本(Examples and demos)、中间组件(Middleware Components)、硬件抽象层HAL(Hardwaree abstraction layer)。
STM32CubeMX 是ST意法半导体的主动原创工具,它可以减轻开发的时间和费用。其集成了一个全面的软件平台,支持 STM32 每一个系列的MCU 开发。这个平台包括 STM32Cube HAL(一个 STM32 的抽象层集成软件,确保STM32 系列最大的移植性)。再加上兼容的一套中间件(RTOS、USB、TCP/IP 和图形),所有内嵌软件组件附带了全套例程。
STM32CubeMX的特性:

1.直观的选择 STM32 微控制器。
2.微控制器图形化配置:
① 自动处理引脚冲突
② 动态设置确定的时钟树
③ 可以动态确定参数设置的外围和中间件模式和初始化
④ 功耗预测
3.C代码工程生成器覆盖了STM32 微控制器初始化编译软件,如IAR、KEIL、GCC。
4.可独立使用或作为 Eclipse 插件使用。

1.安装JDK

  • 由于 STM32CubeMX 是 Java 实现的,需要安装 JDK 环境。
  • JDK官网下载链接:
    https://www.oracle.com/java/technologies/javase-downloads.html
  • 点击.exe文件安装,点击下一步
    请添加图片描述
  • 选择安装路径,点击下一步
    请添加图片描述
    请添加图片描述
  • 安装完成,关闭页面
    请添加图片描述
    请添加图片描述
  • 打开高级系统设置,打开环境变量
    请添加图片描述
    请添加图片描述
  • 修改系统变量
    请添加图片描述
    请添加图片描述
  • 验证安装成功
    电脑界面按win+R,打开以下界面,输入cmd
    请添加图片描述
    输入java -version,验证安装成功
    请添加图片描述

2.安装STM32CubeMX

  • 官网下载(需要绑定邮箱或者注册)
    下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
    请添加图片描述
  • 选择需要的软件,点击下载
    请添加图片描述
    请添加图片描述
  • 注意输入正确邮箱,后续收到压缩包下载
    请添加图片描述
    请添加图片描述
    请添加图片描述
  • 以管理员身份运行.exe文件
    请添加图片描述
  • 点击下一步
    请添加图片描述
    请添加图片描述
    请添加图片描述
  • 更改安装路径,点击Next
    请添加图片描述
    请添加图片描述
  • 点击Next,点击Done,完成安装
    请添加图片描述
    请添加图片描述

3.安装STM32 HAL库

STM32 HAL 固件库是 Hardware Abstraction Layer 的缩写,中文名称是:硬件抽象层。HAL 库是 ST 公司为 STM32 的 MCU 最新推出的抽象层嵌入式软件,为更方便的实现跨 STM32 产品的最大可移植性。HAL 库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是 HAL 库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。

和 标准库 对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在 STM32系列MCU之间无缝移植,甚至在其他 MCU 也能实现快速移植。

并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用 STM32CubeMX 配置 HAL/LL库 是主流配置环境。

  • 打开STM32CubeMX界面
    请添加图片描述
  • 点击Help,选择Manage embedded software packages
    请添加图片描述
  • 选择需要的固件库下载
    请添加图片描述
    请添加图片描述
  • 安装完成,点击close关闭界面
    请添加图片描述

二、基于HAL库的LED流水灯

1.创建新项目

1.1 点击File,创建新项目New Project
请添加图片描述

1.2 选择芯片STM32F103C8T6
请添加图片描述

1.3 配置SYS
请添加图片描述

1.4 配置RCC
请添加图片描述

1.5 配置GPIO
选择需要的端口(本人选择A5,B9,C14),点击设置GPIO_OUTPUT
GPIO mode 选择High
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

1.6 Clock Configuration设置
请添加图片描述

1.7 Project Manager设置
请添加图片描述
请添加图片描述

1.8 创建完成,用keil打开
请添加图片描述
请添加图片描述

2.实验运行

2.1 修改main.c文件中的while(1)函数

while (1)
  {
    /* USER CODE END WHILE */
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);  // 灯1亮
	HAL_Delay(1000); // 延时1s
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);  // 灯1灭
	  
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);  // 灯2亮
	HAL_Delay(1000); // 延时1s
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);  // 灯2灭
	  
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);  // 灯3亮
	HAL_Delay(1000); // 延时1s
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);  // 灯3灭
    /* USER CODE BEGIN 3 */
  }

请添加图片描述
2.2 运行成功
请添加图片描述

3.硬件实现

程序烧入芯片
请添加图片描述
请添加图片描述

4.仿真波形

  • Debug页的设置
    请添加图片描述
  • 点击debug,进入调试页面
  • 选择逻辑分析仪
    请添加图片描述
  • 选择要观察的引脚
    请添加图片描述
  • 点击右上角,添加A5(直接输入PORTA.5,按回车即可),B9,C14引脚,注意每个引脚的Display Type选择为Bit
    请添加图片描述
  • 运行程序
    请添加图片描述
  • GPIO波形
    请添加图片描述

三、中断 LED流水灯

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

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

1.新建项目

1.1 新建项目,选择使用的芯片STM32F103C8T6
请添加图片描述
1.2 配置RCC
请添加图片描述
1.3 配置GPIO
选择PA5作为LED灯的连接管脚,PB9 作为杜邦线(等价于开关)的连接管脚;具体配置是:左击PA5端口选择GPIO_Output模式,PB9设为EXTI。
点击左侧GPIO,PA5是高电平触发,所以不需要改变设置,别名设为**“A5_LED”,选中PB9,将GPIO Mode设置为下降沿触发外部中断;
将GPIO 设置为上拉电阻模式(Pull-up**);别名设置为B9_EXTI。
请添加图片描述
1.4 配置SYS
请添加图片描述
1.5 配置NVIC
勾选下方选项表示支持中断操作
请添加图片描述
1.6 配置Clock Configuration
请添加图片描述
1.7 配置Project Manager
请添加图片描述
1.8 设置工程文件,并导出
请添加图片描述

2.程序运行

打开keil项目或者关闭STMCube再打开对应文件。并在main.c文件的main函数外重写一个回调函数。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if( GPIO_Pin == B9_EXTI_Pin) //判断中断源
  {
     HAL_GPIO_TogglePin(GPIOA, A5_LED_Pin); //翻转led管脚 A1口的电平
  }
}

请添加图片描述

  • 程序成功运行
    请添加图片描述

3.硬件实现

将程序烧入芯片中
请添加图片描述
请添加图片描述

四、总结

本次LED流水灯实验主要是基于STM32CubeMX HAL库的一个实验,通过这个实验,我们可以了解如何使用STM32CubeMX HAL库来控制LED灯的亮灭和模式。STM32CubeMX HAL库提供了对芯片上各种外设的控制能力等,不需要在代码上做各种工程设置,只需要简单修改一下相关代码即可完成整个工程,相比于其他方法更加方便快捷。
通过这个基于HAL库的LED流水灯实验,我学习了如何使用STM32CubeMX软件,学会使用 HAL库来实现LED流水灯功能,利用中断模式控制led流水灯并使用keil仿真逻辑分析仪功能观察管脚的时序波形,用此功能观察GPIO端口的输出波形。这个实验不仅让我加深了对STM32F103 HAL库的理解,也提高了我的编程和调试能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值