STM32F1xx HAL库 中文详解 之 GPIO篇

本篇主要讲解 STM32F1xx HAL库 中gpio部分的结构体,函数及应用。

目录

一、结构体部分

二、函数部分

2.1所有函数及功能总览

2.2各函数详细介绍

三、如何使用这个驱动程序  


一、结构体部分

typedef struct

{

uint32_t Pin            //选择引脚

uint32_t Mode           //设置模式

uint32_t Pull           //设置上拉下拉

uint32_t Speed          //设置速度

} GPIO_InitTypeDef;

结构体中用到的宏定义:

GPIO pins define(引脚选择)

GPIO_PIN_0          引脚0

GPIO_PIN_1          引脚1

GPIO_PIN_2          引脚2

GPIO_PIN_3          引脚3

GPIO_PIN_4          引脚4

GPIO_PIN_5          引脚5

GPIO_PIN_6          引脚6

GPIO_PIN_7          引脚7

GPIO_PIN_8          引脚8

GPIO_PIN_9          引脚9

GPIO_PIN_10          引脚10

GPIO_PIN_11          引脚11

GPIO_PIN_12          引脚12

GPIO_PIN_13          引脚13

GPIO_PIN_14          引脚14

GPIO_PIN_15          引脚15

GPIO_PIN_All               所有引脚选定

GPIO_PIN_MASK         维护测试的PIN掩码

GPIO mode define(模式设置)

GPIO_MODE_INPUT                  浮动输入模式  

GPIO_MODE_OUTPUT_PP            推挽输出模式

GPIO_MODE_OUTPUT_OD            开漏输出模式

GPIO_MODE_AF_PP Alternate         复用推挽输出

GPIO_MODE_AF_OD Alternate            复用开漏输出

GPIO_MODE_AF_INPUT Alternate      复用输入模式

GPIO_MODE_ANALOG                模拟模式

GPIO_MODE_IT_RISING               外部中断模式与上升边缘触发检测

GPIO_MODE_IT_FALLING               外部中断模式与下降边缘触发检测

GPIO_MODE_IT_RISING_FALLING     外部中断模式上升或者下降边缘触发检测

GPIO_MODE_EVT_RISING               外部事件模式上升边缘触发检测

GPIO_MODE_EVT_FALLING           外部事件模式下降边缘触发检测

GPIO_MODE_EVT_RISING_FALLING   外部事件模式下降/上升边缘触发检测

GPIO pull define(设置上拉和下拉电阻)

GPIO_NOPULL           没有激活上拉或者下拉

GPIO_PULLUP           激活上拉模式

GPIO_PULLDOWN     激活下拉模式

GPIO speed define(设置速度)

GPIO_SPEED_LOW            低速

GPIO_SPEED_MEDIUM     中速

GPIO_SPEED_HIGH          高速

typedef enum
{
  GPIO_PIN_RESET = 0u,  //置0
  GPIO_PIN_SET          //置1  
} GPIO_PinState;

枚举类型结构体,使引脚重置(0)或设置(1)

二、函数部分

2.1所有函数及功能总览

函数名功能
HAL_GPIO_Init()根据GPIO_Init中指定的参数初始化GPIOx外设
HAL_GPIO_DeInit()使GPIOx外围设备寄存器到它们的默认重置值
HAL_GPIO_ReadPin()读取指定的输入端口引脚
HAL_GPIO_WritePin()设置或清除指定的数据端口位
HAL_GPIO_TogglePin()切换指定的GPIO引脚(操作BSRR和BRR)
HAL_GPIO_LockPin()锁定GPIO引脚配置寄存器
HAL_GPIO_EXTI_IRQHandler()处理EXTI中断请求
HAL_GPIO_EXTI_Callback()EXTI lines检测回调函数

2.2各函数详细介绍

HAL_GPIO_Init

函数名void HAL_GPIO_Init (GPIO_TypeDef * GPIOx,
GPIO_InitTypeDef * GPIO_Init)
功能根据GPIO_Init中指定的参数初始化GPIOx外设
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIO Init:指向GPIO InitTypeDef结构的指针,该结构包含指定GPIO外围设备的配置信息

返回值


HAL_GPIO_DeInit

函数名void HAL_GPIO_DeInit (GPIO_TypeDef * GPIOx, uint32_t
GPIO_Pin)
功能使GPIOx外围设备寄存器到它们的默认重置值
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIO Pin:指定要写入的端口位。该参数可以是GPIO PIN x中的一个,其中x可以是(0..15)

返回值

HAL_GPIO_ReadPin

函数名GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx,
uint16_t GPIO_Pin)
功能读取指定的输入端口引脚
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIO Pin:指定要读入的端口位。该参数可以是GPIO PIN x中的一个,其中x可以是(0..15)

返回值输入端口引脚值

HAL_GPIO_WritePin

函数名void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin, GPIO_PinState PinState)
功能设置或清除指定的数据端口位
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIO Pin:指定要写入的端口位。该参数可以是GPIO PIN x中的一个,其中x可以是(0..15)

PinState:指定要写入所选位的值。可以是GPIO PinState enum的值之一:

        GPIO BIT RESET:清除端口引脚

        GPIO BIT SET:设置端口引脚

返回值

HAL_GPIO_TogglePin

函数名void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin)
功能切换指定的GPIO引脚(操作BSRR和BRR)
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIOGPIO_Pin:指定要切换的引脚

返回值

HAL_GPIO_LockPin

函数名HAL_StatusTypeDef HAL_GPIO_LockPin (GPIO_TypeDef *
GPIOx, uint16_t GPIO_Pin)
功能锁定GPIO引脚配置寄存器
参数

GPIOx: x可以是(A..G取决于所使用的设备)来选择GPIO外围设备

GPIO Pin:表示要锁定的端口位。这个参数可以是GPIO管脚x的任意组合,其中x可以是(0..15)

返回值

HAL_GPIO_EXTI_IRQHandler

函数名void HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin)
功能处理EXTI中断请求
参数GPIO_Pin:连接EXTI线的引脚
返回值

HAL_GPIO_EXTI_Callback

函数名void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
功能EXTI lines检测回调函数
参数GPIO_Pin:连接EXTI线的引脚
返回值

三、如何使用这个驱动程序  

1.  开启GPIO APB2时钟功能的方法如下:  

        __HAL_RCC_GPIOx_CLK_ENABLE()  

2.  使用HAL_GPIO_Init()配置GPIO管脚  

        2.1使用GPIO_InitTypeDef结构中的“mode”成员配置IO模式  

        2.2使用GPIO_InitTypeDef中的Pull成员激活上拉,下拉电阻  

        2.3如果输出或替代功能模式选择:速度配置通过GPIO_InitTypeDef结构中的“Speed”成员  

        2.4当引脚用作ADC通道或DAC时,需要模拟模式输出  

        2.5如果外部中断/事件选择模式成员从GPIO_InitTypeDef结构选择类型(中断或事件)和相应的触发事件(上升或下降或两者皆有)

3. 当选择外部中断/事件模式时,配置NVIC IRQ优先级使用HAL_NVIC_SetPriority()映射到EXTI,并使用HAL_NVIC_EnableIRQ()  

4.  要获得在输入模式下配置的引脚的电平高低,使用HAL_GPIO_ReadPin()  

5.  设置/翻转在输出模式下配置的引脚的电平HAL_GPIO_WritePin () / HAL_GPIO_TogglePin()  

6.  使用HAL_GPIO_LockPin()来锁定引脚配置,直到下一次重置  

7.  在复位期间和复位后,备用功能不活动,GPIO引脚配置为输入浮动模式(JTAG引脚除外)  

8.  LSE振荡器关闭时,LSE振荡器管脚OSC32_INOSC32_OUT可以作为通用器件使用(分别为PC14PC15), LSE有优先权通过GPIO功能  

9.  HSE振荡管脚OSC_IN/OSC_OUT可作为PD0和当HSE振荡器关闭时为PD1, HSEGPIO有优先权

  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值