STM32-标准库-GPIO-API函数

1.void GPIO_DeInit(GPIO_TypeDef* GPIOx);

@简明

清除GPIOx的外围寄存器下所有引脚的配置,

恢复到默认配置状态(即上电初始值)

@参数

GPIOx:其中x可以是(A..G)来选择GPIO外设。

@返回值

None


void GPIO_DeInit(GPIO_TypeDef* GPIOx);

(1)通常用于以下场景:

动态切换外设功能前清除残留配置。

系统低功耗模式下减少 GPIO 漏电流。

错误恢复时强制重置 GPIO 状态。

(2)注意事项

复位操作依赖时钟

1.必须确保 GPIO 时钟已使能:复位操作需通过 RCC 寄存器完成,

        若 GPIO 时钟未开启(例如调用 RCC_APB2PeriphClockCmd(GPIOx_CLOCK, DISABLE)),否则GPIO_DeInit() 将无效

2.复位后不会自动关闭时钟,需手动禁用以降低功耗(若不再使用)

2.void GPIO_AFIODeInit(void);

@简明

将复用功能(重映射、事件控制和EXTI配置)寄存器取消复用功能,恢复默认状态值。

@参数

None

@返回值

None


void GPIO_AFIODeInit(void);

(1)注意事项

复位范围 :

影响所有 AFIO 相关配置

复用功能重映射(如 USART、SPI 引脚重映射)

外部中断线(EXTI)与 GPIO 引脚的绑定关系

事件输出功能(GPIO_EventOutputConfig)的配置

调试端口(如 SWJ/JTAG)的引脚分配(可能影响调试器连接)

外设依赖风险

复用功能失效:

若 GPIO 用于外设重映射(如 USART1 重映射到 PB6/PB7),复位后需重新配置。

中断丢失

若 EXTI 中断依赖 AFIO 配置(如 GPIO_EXTILineConfig),复位后需重新绑定引脚并配置 NVIC

调试接口影响

默认状态下,调试端口(SWJ/JTAG)可能被禁用或重新分配,导致调试器断开连接

3.void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct);

@简明

用来初始化GPIO引脚的配置,比如设置模式、速度、上下拉等。

@参数

@参数1

GPIOx:其中x可以是(A..G)来选择GPIO外设。

@参数2

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

@返回值

None


void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct);

(1)参数2:GPIO_InitStruct

GPIO_InitStruct

GPIO_Pin

引脚编号(位掩码,如 GPIO_Pin_0 | GPIO_Pin_1)。

GPIO_Mode

引脚模式(输入/输出/复用/模拟)

输入模式

GPIO_Mode_AIN /* 模拟输入模式 /

GPIO_Mode_IN_FLOATING / 浮空输入 /

GPIO_Mode_IPD / 下拉输入模式 /

GPIO_Mode_IPU / 上拉输入模式 */

输出模式

GPIO_Mode_Out_OD /* 开漏输出 /

GPIO_Mode_Out_PP / 推挽输出 /

GPIO_Mode_AF_OD / 复用开漏输出/

GPIO_Mode_AF_PP / 复用推挽输出 */

GPIO_Speed

输出速度(低速/中速/高速)

GPIO_Speed_10MHz = 1,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

GPIO_OType

输出类型(推挽/开漏)

GPIO_PuPd

上下拉电阻配置(无/上拉/下拉)

(2)适用场景

初始化 GPIO 引脚为输入(如按键检测)

配置引脚为输出(如控制 LED)。

设置复用功能(如 USART、SPI 通信)

模拟模式(如 ADC/DAC 信号采集)

4.void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

@简明

该函数用于快速初始化 GPIO 配置结构体,避免手动赋值的冗余操作,

通常在自定义配置前调用,确保未显式设置的参数具有合理的默认值。

@参数

GPIO_InitStruct

成员

默认值

说明

GPIO_Pin

GPIO_Pin_None

无引脚被选中。

GPIO_Mode

GPIO_Mode_IN

浮空输入模式。

GPIO_Speed

GPIO_Speed_2MHz

低速模式(2MHz)。

GPIO_OType

GPIO_OType_PP

推挽输出(仅在输出模式下有效)。

GPIO_PuPd

GPIO_PuPd_NOPULL

无上下拉电阻。

@返回值


void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

(1)注意事项

  • 必须显式覆盖默认值:调用 GPIO_StructInit 后,需手动设置目标参数(如 GPIO_PinGPIO_Mode),否则配置无效。
  • GPIO_InitTypeDef GPIO_InitStruct; 
    
    GPIO_StructInit(&GPIO_InitStruct); // 初始化默认值 
    
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; // 覆盖引脚
    
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // 覆盖模式
    
    GPIO_Init(GPIOA, &GPIO_InitStruct);
  • 默认模式的风险
  •                -默认的浮空输入模式(GPIO_Mode_IN可能导致引脚电平不稳定,需根据实际需求调整。

                   -默认低速模式(GPIO_Speed_2MHz可能不适用于高频信号(如 SPI 通信)

  • 与 GPIO_Init 的配合
  •                GPIO_StructInit 仅初始化结构体,不会配置硬件寄存器,需后续调用 GPIO_Init 生效。

  • 多引脚配置优化
  •                若需重复配置不同引脚,可复用同一结构体,避免重复初始化:

    GPIO_InitTypeDef GPIO_InitStruct;  
    GPIO_StructInit(&GPIO_InitStruct);  
    
    // 配置 PA5 为输出  
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;  
    GPIO_Init(GPIOA, &GPIO_InitStruct);  
    
    // 配置 PA6 为输入  
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;  
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;  
    GPIO_Init(GPIOA, &GPIO_InitStruct);  

    5.uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    @简明

    读取指定的输入端口引脚。

    适用范围:适用于按键检测、传感器信号读取等场景。

    @参数

    参数1

    GPIOx

    GPIO 端口

    参数2

    GPIO_Pin

    引脚编号

    @返回值

    Bit_SET(1):引脚为高电平。

    Bit_RESET(0):引脚为低电平。

    
    uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    
    

    6.uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

    @简明

    读取指定的GPIO输入数据端口。

    @参数

    GPIOx

    GPIOx:其中x可以是(A..G)来选择GPIO外设。

    @返回值

    16位数据,每一位对应一个GPIO引脚的状态

    {

    0=低电平,

    1=高电平

    }

    
    uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
    
    

    (1)注意事项

    依赖条件

    仅读取配置为输入模式​(如 GPIO_Mode_IN)的引脚状态,输出模式引脚的值可能无效

    输入模式有效性

    仅在GPIO配置为输入模式(如浮空输入、上拉/下拉输入)时,返回值才有意义。

    (2)位操作技巧

    // 检查第n位是否为高电平 
    if (GPIO_ReadInputData(GPIOA) & (1 << n)) { 
    
        /* 逻辑处理 */ 
    
    }

    7.uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    简明

    读取指定GPIO端口的单个输出引脚的当前设置状态

    及(高/低电平),返回0或1。

    参数

    GPIOx

    GPIOx:其中x可以是(A..G)来选择GPIO外设。

    GPIO_Pin

    指定要读取的端口位。

    返回值

    uint8_t:0(低电平)或1(高电平)。

    
    uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    
    

    (1)注意事项

    依赖条件

    仅对配置为输出模式​(如推挽、开漏)的引脚有效,

    输入模式引脚的结果无意义。

    典型应用场景

    验证输出引脚的配置状态(如确认LED是否被设置为点亮、检查信号是否已发送)。

    8.uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

    @简明

    读取指定GPIO端口的所有输出引脚的当前设置状态(高/低电平),返回16位无符号整数。

    @参数

    GPIOx:

    GPIO端口(如GPIOA、GPIOB等)。

    @返回值

    uint16_t:16位数据,每一位对应一个GPIO引脚的输出状态(0=低电平,1=高电平)。

    
    uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
    
    

    (1)注意事项

    依赖条件

    仅对配置为输出模式​(如推挽、开漏)的引脚有效,

    输入模式引脚的状态不会被反映。

    典型应用场景

    批量读取输出引脚状态(如LED阵列控制、并行总线数据发送后验证状态)。

    结束语

    以上就是对STM32-标准库-GPIO-API函数的一个总结。

    作者:加油1234

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32-标准库-GPIO-API函数

    发表回复