从0开始的STM32HAL库学习2

外部中断(HAL库GPIO讲解)

今天我们会详细地学习STM32CubeMX配置外部中断,并且讲解HAL库的GPIO的各种函数。

准备工作:

1、STM32开发板(我的是STM32F103C8T6)

2、STM32CubeMx软件、 IDE: Keil软件

3、STM32F1xx/STM32F4xxHAL库

4、按键管脚 PA7 PB0

5 LED管脚PA1

配置

LED:1个GPIO_OUTPUT (输出模式)

按键:2个GPIO_EXITx(外部中断模式)

GPIO的各种模式设置

  • GPIO output level 引脚电平设置 高/低
  • GPIO mode GPIO模式 推挽输出/开漏输出
  • GPIO Pull-up/Pull-dowm 上拉下拉电阻 上拉电阻/下拉电阻/无上拉或下拉
  • Maxinum output speed 引脚速度设置 低速/中速/高速
  • User Label 用户标签 给引脚设置名称 如LED0

GPIO_EXIT的6种模式

我们的按键选择下降沿触发

设置NVIC(嵌套向量中断控制器)

之后的配置就和上一章写的差不多了名字地址什么的配置好就行了

打开工程

随后我们可以在stm32f1xx_it.c中看到我们所配置的中断服务函数 并且可以看到GPIO的初始化分到了gpio.c里面

**在HAL库中,中断运行结束后不会立刻退出,而是会先进入相对应的中断回调函数,处理该函数中的代码之后,才会退出中断,**所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中

HAL库 GPIO函数库讲解

在正常使用中,除了STM32CubeMX配置之外,我们有时候还需要自己配置一些东西,学习并理解HAL库,也是我们必须要学习的一个地方

首先打开stm32f4xx_hal_gpio.h 发现一共定义有8个函数

复制代码
复制代码
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

功能: GPIO初始化

实例:HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

复制代码
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

功能:在函数初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值

实例:HAL_GPIO_Init(GPIOC, GPIO_PIN_4);

复制代码
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:读取引脚的电平状态、函数返回值为0或1

实例:HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_4);

复制代码
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

功能:引脚写0或1

实例:HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4,0);

复制代码
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

翻转引脚的电平状态

实例:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_4); 常用在LED上

复制代码
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:锁住引脚电平,比如说一个管脚的当前状态是1,当这个管脚电平变化时保持锁定时的值。

实例:HAL_GPIO_LockPin(GPIOC, GPIO_PIN_4);

复制代码
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

功能: 外部中断服务函数,清除中断标志位

实例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);

复制代码
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

功能: 中断回调函数,可以理解为中断函数具体要响应的动作。

实例:HAL_GPIO_EXTI_Callback(GPIO_PIN_4);

GPIO_InitTypeDef结构体定义

cs 复制代码
typedef struct
{
  uint32_t Pin;       /*!<   选择引脚
                           */
 
  uint32_t Mode;      /*!< 设置引脚模式
                            */
 
  uint32_t Pull;      /*!< 引脚是否上拉或下拉
                           */
 
  uint32_t Speed;     /*!< 设置引脚速度
                            */
} GPIO_InitTypeDef;
相关推荐
前端小崔29 分钟前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
逼子格1 小时前
硬件工程师笔记——二极管Multisim电路仿真实验汇总
笔记·嵌入式硬件·硬件工程师·multisim·硬件工程师学习·电子器件·电路图
「QT(C++)开发工程师」1 小时前
STM32 | FreeRTOS 递归信号量
python·stm32·嵌入式硬件
龙湾开发1 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
c++·笔记·学习·图形渲染·贴图
liang_20262 小时前
【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
数据结构·笔记·学习·算法·平面·总结
虾球xz2 小时前
游戏引擎学习第290天:完成分离渲染
c++·人工智能·学习·游戏引擎
虾球xz2 小时前
游戏引擎学习第285天:“Traversables 的事务性占用”
c++·学习·游戏引擎
芯眼2 小时前
ALIENTEK精英STM32F103开发板 实验0测试程序详解
开发语言·c++·stm32·单片机·嵌入式硬件·社交电子
百里东风2 小时前
STM32IIC协议基础及Cube配置
stm32·单片机·嵌入式硬件
虾球xz2 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎