STM32 标准外设库中关于 GPIO(通用输入输出) 模块的函数声明

这些函数通常位于 stm32f10x_gpio.h 文件中,为了方便你理解,我将这些函数按照功能逻辑进行了分类解析:

目录

1.初始化与配置函数

2.读取输入信号函数

3.读取输出状态函数

4.控制输出电平函数

5.高级/特殊功能函数

1.GPIO_Init(最基础:初始化引脚)

[2.GPIO_SetBits/ GPIO_ResetBits (控制输出)](#2.GPIO_SetBits/ GPIO_ResetBits (控制输出))

[3. GPIO_ReadInputDataBit (读取状态)](#3. GPIO_ReadInputDataBit (读取状态))

[4. GPIO_EXTILineConfig (中断映射)](#4. GPIO_EXTILineConfig (中断映射))

特别提醒:配置三部曲


1.初始化与配置函数

这类函数用于设置引脚的工作模式(如推挽输出、浮空输入等)和速度。

GPI0_DeInit:将外设GPIOx寄存器重设为默认值(复位)。
GPI0_AFI0DeInit:将复位备用功能(AFIO)寄存器重设为默认值。
GPIO Init:最常用的函数。根据GPI0InitStruct中指定的参数初始化 GPIOx。
GPI0_StructInit:把GPI0_InitStruct 中的成员填入默认值(方便后续修改)。

2.读取输入信号函数

用于检测引脚上的电平状态(高电平或低电平)。

GPI0 ReadInputDataBit:读取指定 GPIO端口的某个特定引脚的输入值。
GPI0_ReadInputData:读取整个GPIO端口(16位)的输入值。

3.读取输出状态函数

用于查看你之前给引脚设置了什么电平。

GPI0 ReadOutputDataBit:读取指定端口某个引脚的输出状态。
GPI0_ReadOutputData:读取整个端口的输出状态。

4.控制输出电平函数

用于让引脚输出高电平或低电平(常用于控制LED、继电器等)。

GPI0_SetBits:将指定的引脚设置为高电平(1)。
GPI0 ResetBits:将指定的引脚设置为低电平(0)。
GPI0_WriteBit:向指定引脚写入值(高电平或低电平)。
GPI0 Write:向整个GPIO端口写入数据(一次性控制16个引脚)。

5.高级/特殊功能函数

用于锁定配置、引脚复用或中断映射。

GPI0 PinLockConfig:锁定引脚配置。锁定后,直到下次复位前都不能更改该引脚的设置。
GPI0_EventOutputConfig:配置事件输出引脚。
GPI0_EventOutputCmd:使能或失能事件输出。
GPI0_PinRemapConfig:引脚重映射。改变某些外设(如定时器、串口)对应的物理引脚。
GPI0_EXTILineConfig:选择GPIO引脚作为外部中断线(EXTI)。
GPI0_ETH_MediaInterfaceConfig:配置以太网接口(仅适用于带以太网控制器的型号)。

挑选了在 STM32 开发中最核心、最常用的几个函数,并结合代码示例进行解析

1.GPIO_Init(最基础:初始化引脚)

功能描述

这个函数相当于"开关"。在操作任何引脚之前,你必须告诉单片机:这个引脚是输入还是输出?速度是多少?

如何使用

你需要先定义一个结构体,填入参数,然后调用该函数。

复制代码
GPIO_InitTypeDef GPIO_InitStructure; // 1. 定义结构体

// 2. 开启时钟 (这一步至关重要,否则配置无效)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 

// 3. 设置参数
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          // 选择 0 号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   // 推挽输出 (常用于点灯)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 翻转速度

// 4. 调用函数
GPIO_Init(GPIOA, &GPIO_InitStructure);

2.GPIO_SetBits/ GPIO_ResetBits (控制输出)

功能描述

SetBits:让引脚变高电平(通常LED灭或亮,取决于电路)。

ResetBits:让引脚变低电平。

如何使用

这两个函数非常直观,直接输入端口和引脚号。

复制代码
// 让 PA0 输出高电平
GPIO_SetBits(GPIOA, GPIO_Pin_0);

// 让 PA0 输出低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_0);

3. GPIO_ReadInputDataBit (读取状态)

功能描述

常用于检测按键。它会返回该引脚当前的电平状态。

如何使用

它返回一个 uint8_t 类型的值(1 或 0)。

复制代码
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0) 
{
    // 如果读取到低电平,说明按键可能被按下了
    // 执行相应逻辑...
}

4. GPIO_EXTILineConfig (中断映射)

功能描述

如果你想让某个引脚在电平变化时触发一个"中断"(即停下主程序去处理紧急任务),就需要用这个函数。它把 GPIO 引脚和外部中断线连接起来。

如何使用

通常配合 AFIO 时钟使用。

复制代码
// 将 PB0 连接到外部中断线 0 上
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);

特别提醒:配置三部曲

在Keil中使用这些函数时,请务必遵守以下流程,否则引脚不会工作:

1.开启时钟 (RCC_APB2PeriphClockCmd )o

2.配置结构体 (GPI0_InitTypeDef)。

3.调用初始化函数(GPI0_Init)。

相关推荐
MAR-Sky3 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗4 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞5 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技6 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天6 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)7 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术7 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao8 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报8 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110116 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件