单片机学习小组
直播中

番茄番茄

11年用户 637经验值
私信 关注

如何使用STM32F1xx HAL库中gpio?

如何使用STM32F1xx HAL库中gpio?

回帖(1)

董超

2022-2-8 13:51:34
本篇主要讲解 STM32F1xx HAL库 中gpio部分的结构体,函数及应用。

三、如何使用这个驱动程序  
一、结构体部分

typedef struct

{

uint32_t Pin            //选择引脚

uint32_t Mode           //设置模式

uint32_t Pull           //设置上拉下拉

uint32_t Speed          //设置速度

} GPIO_InitTypeDef;
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有优先权
举报

更多回帖

发帖
×
20
完善资料,
赚取积分