[STM32]HAL库LED相关实验

目录

1、了解HAL库函数开发方法。

HAL库背景 

HAL库函数

2、安装 stm32CubeMX

安装链接

软件设计流程

新建STM32CubeMX工程,选择MCU 

STM32CubeMX功能参数配置

RCC配置 

MCU引脚选择

GPIO引脚参数配置

SYS选择

时钟配置

生成工程代码

3、LED流水灯

 代码

 测试效果

 观察波形

4、控制LED闪烁

代码

测试效果

5、总结


1、了解HAL库函数开发方法。

HAL库背景 

 ST 为开发者提供了非常方便的开发库:有标准外设库(SPL库)、HAL 库(Hardware Abstraction Layer,硬件抽象层库)、LL 库(Low-Layer,底层库)三种。前者是ST的老库已经停更了,后两者是ST现在主推的开发库。

相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。

HAL库函数

EXTI的HAL库接口函数的源码定义在stm32f1xx_hal_exti.c源文件中,其对应的头文件stm32f1xx_hal_exti.h声明了EXTI所有的库函数.

2、安装 stm32CubeMX

安装链接

链接:https://pan.baidu.com/s/10LNTp8UpyMe38ROoinnRkg 
提取码:0102 

软件设计流程

新建STM32CubeMX工程,选择MCU 

在D盘或其他盘符目录下新建一个文件夹,用来存放后面建立的STM32CubeMX工程。需要注意的是:所建工程文件名最好是英文名称,且最好是英文路径。 这里采用STM32F103ZET6芯片。 

STM32CubeMX功能参数配置

RCC配置 

 HSE选择“Crystal/Ceramic Resonator”(晶振/陶瓷谐振器),LSE选择“Disable”.

MCU引脚选择

GPIO引脚参数配置

SYS选择

时钟配置

将HSI改为PLLCLK. 

生成工程代码

配置keil工程名称和存放位置

定义“Project Name”为“MyProject_EXTI”,“Toolchain/IDE”选择“MDK-ARM V5”.

在“Code Generator”选项栏中找到“Generated files”框,勾选“Generate peripheral initialization as a pair of ’.c/.h’ files per IP”,将外设初始化的代码设置生成为独立的.c源文件和.h头文件。

通过STM32CubeMX的菜单栏中的“Generate Code”生成工程代码,生成代码后,会提示是否打开该工程窗口

3、LED流水灯

配合Keil,使用HAL库方式做一个LED流水灯,用GPIO端口完成2只LED灯的周期闪烁。

 代码

在main.c中的while(1){}循环中加入代码

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?
		
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_RESET);  // ?2?
	HAL_Delay(1000); // ??1s
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);  // ?2?
	  

 测试效果

 观察波形

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

波形图:

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */

 比如,如果你需要查看PA15的引脚,就写为(PORTA & 0x00008000)>> 15(0x00008000可以写为0x8000)。

如图所示,每隔一秒灯轮流闪烁, 波形正确.

4、控制LED闪烁

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

代码

找到 stm32f1xx_hal_gpio.c,加上头文件

#include "gpio.h"

找到HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 函数,加入以下代码

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
      if(GPIO_Pin == SWITCH_Pin){
        //??B5???
        GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);

        //???
        if(pinState==GPIO_PIN_RESET)
        HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_RESET);//?A4?????
        //???
        else
            HAL_GPIO_WritePin(LED_A4_GPIO_Port,LED_A4_Pin,GPIO_PIN_SET);//?A4?????
        }
    }

测试效果


5、总结

了解并掌握了HAL库函数开发方法,学会了安装 stm32CubeMX,并且配合Keil,使用HAL库方式完成led流水灯与控制led闪烁实验.

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值