本篇主要讲解 STM32F1xx HAL库 中gpio部分的结构体,函数及应用。
目录
一、结构体部分
- 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_IN和OSC32_OUT可以作为通用器件使用(分别为PC14和PC15), LSE有优先权通过GPIO功能
9. HSE振荡管脚OSC_IN/OSC_OUT可作为PD0和当HSE振荡器关闭时为PD1, HSE比GPIO有优先权