1 STM32固件库函数之通用输入/输出(GPIO)函数的介绍及使用

1 STM32固件库函数之通用输入/输出(GPIO)函数的介绍及使用

  • 前言
  • 一、GPIO固件库函数预览
  • 二、GPIO固件库函数具体介绍
    • 2.1 库函数 GPIO_DeInit
    • 2.2 库函数 GPIO_Init
      • 2.2.1 GPIO_InitTypeDef structure
      • 2.2.2 GPIO_Pin
      • 2.2.3 GPIO_Speed
      • 2.2.4 GPIO_Mode
      • 2.2.5 GPIO_Mode 的索引和编码
    • 2.3 函数GPIO_StructInit
      • 2.3.1GPIO_InitStruct 默认值
    • 2.4 函数 GPIO_PinLockConfig
    • 2.5 函数 GPIO_ReadInputDataBit
    • 2.6 函数 GPIO_ReadInputData
    • 2.7 函数 GPIO_ReadOutputDataBit
    • 2.8 函数 GPIO_ReadOutputData
    • 2.9 函数GPIO_SetBits
    • 2.10 函数 GPIO_ResetBits
    • 2.11 函数 GPIO_WriteBit
    • 2.12 函数GPIO_Write
    • 2.13 函数GPIO_ToggleBits
    • 2.14 函数 GPIO_AFIODeInit
    • 2.15 函数 GPIO_EventOutputConfig
      • 2.15.1 GPIO_PortSource
    • 2.16 函数GPIO_EventOutputCmd
    • 2.17 函数GPIO_PinRemapConfig
      • 2.17.1 GPIO_Remap
    • 2.18 函数GPIO_EXTILineConfig
  • 该文档修改记录:
  • 总结


前言

GPIO 驱动可以用作多个用途,包括管脚设置,单位设置/重置,锁定机制,从端口管脚读入或者向端口管脚写入数据。

函数描述格式:

函数名 外设函数的名称
函数原形 原形声明
功能描述 简要解释函数是如何执行的
输入参数{x} 输入参数描述
输出参数{x} 输出参数描述
返回值 函数的返回值
先决条件 调用函数前应满足的要求
被调用函数 其他被该函数调用的库函数

缩写定义

缩写 外设/单元
ADC 模数转换器
BKP 备份寄存器
CAN 控制器局域网模块
DMA 直接内存存取控制器
EXTI 外部中断事件控制器
FLASH 闪存存储器
GPIO 通用输入输出
I2C 内部集成电路
IWDG 独立看门狗
NVIC 嵌套中断向量列表控制器
PWR 电源/功耗控制
RCC 复位与时钟控制器
RTC 实时时钟
SPI 串行外设接口
SysTick 系统嘀嗒定时器
TIM 通用定时器
TIM1 高级控制定时器
USART 通用同步异步接收发射端
WWDG 窗口看门狗

一、GPIO固件库函数预览

序号 函数名 描述
1 GPIO_DeInit 将外设 GPIOx 寄存器重设为默认值
2 GPIO_Init 根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
3 GPIO_StructInit 把 GPIO_InitStruct 中的每一个参数按默认值填入
4 GPIO_PinLockConfig 锁定 GPIO 管脚设置寄存器
5 GPIO_ReadInputDataBit 读取指定端口管脚的输入
6 GPIO_ReadInputData 读取指定的 GPIO 端口输入
7 GPIO_ReadOutputDataBit 读取指定端口管脚的输出
8 GPIO_ReadOutputData 读取指定的 GPIO 端口输出
9 GPIO_SetBits 设置指定的数据端口位
10 GPIO_ResetBits 清除指定的数据端口位
11 GPIO_WriteBit 设置或者清除指定的数据端口位
12 GPIO_Write 向指定 GPIO 数据端口写入数据
13 GPIO_ToggleBits 将GPIO 的引脚 IO 状态翻转
14 GPIO_AFIODeInit 将复用功能(重映射事件控制和 EXTI 设置)重设为默认值
15 GPIO_EventOutputConfig 选择 GPIO 管脚用作事件输出
16 GPIO_EventOutputCmd 使能或者失能事件输出
17 GPIO_PinRemapConfig 改变指定管脚的映射
18 GPIO_EXTILineConfig 选择 GPIO 管脚用作外部中断线路

导出功能:
序号1 函数是将外设 GPIOx 寄存器重设为默认值;
序号2~4函数是GPIO初始化和配置函数;
序号5~13函数是GPIO读写功能;
序号14~18函数是GPIO其他功能;

二、GPIO固件库函数具体介绍

2.1 库函数 GPIO_DeInit

函数名 GPIO_DeInit
函数原形 void GPIO_DeInit(GPIO_TypeDef* GPIOx)
功能描述 将外设 GPIOx 寄存器重设为默认值
输入参数 GPIOx:x 可以是 A,B,C,D 或者 E等等,来选择 GPIO 外设
输出参数
返回值
先决条件
被调用函数 RCC_APB2PeriphResetCmd()

代码如下(示例):

/* 将GPIOA外围寄存器重置为默认重置值 */
GPIO_DeInit(GPIOA);

2.2 库函数 GPIO_Init

函数名 GPIO_Init
函数原形 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
功能描述 根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E等等,来选择 GPIO 外设
输出参数 2 GPIO_InitStruct:指向结构 GPIO_InitTypeDef 的指针,包含了外设 GPIO 的配置信息
返回值
先决条件
被调用函数

2.2.1 GPIO_InitTypeDef structure

GPIO_InitTypeDef 定义于文件“stm32fxxx_gpio.h”:
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
} GPIO_InitTypeDef;

2.2.2 GPIO_Pin

该参数选择待设置的 GPIO 管脚,使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合。

GPIO_Pin
GPIO_Pin 描述
GPIO_Pin_None 无管脚被选中
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 选中全部管脚

2.2.3 GPIO_Speed

GPIO_Speed 用以设置选中管脚的速率。
GPIO_Speed 值

GPIO_Speed 描述
GPIO_Speed_10MHz 最高输出速率 10MHz
GPIO_Speed_2MHz 最高输出速率 2MHz
GPIO_Speed_50MHz 最高输出速率 50MHz
GPIO_Speed_100MHz 最高输出速率 100MHz

2.2.4 GPIO_Mode

GPIO_Mode 用以设置选中管脚的工作状态。

GPIO_Mode 值

GPIO_Speed 描述
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 复用推挽输出

注意:
当某管脚设置为上拉或者下拉输入模式,使用寄存器 Px_BSRR 和 PxBRR
GPIO_Mode 允许同时设置 GPIO 方向(输入/输出)和对应的输入/输出设置,:位[7:4]对应 GPIO 方向,位[4:0]对应配置。
GPIO 方向有如下索引
-GPIO 输入模式 = 0x00
-GPIO 输出模式 = 0x01

2.2.5 GPIO_Mode 的索引和编码

GPIO方向 索引 模式 设置 模式代码
GPIO Input 0x00 GPIO_Mode_AIN 0x00 0x00
GPIO_Mode_IN_FLOATING 0x04 0x04
GPIO_Mode_IPD 0x08 0x28
GPIO_Mode_IPU 0x08 0x48
GPIO Output 0x01 GPIO_Mode_Out_OD 0x04 0x14
GPIO_Mode_Out_PP 0x00 0x10
GPIO_Mode_AF_OD 0x0C 0x1C
GPIO_Mode_AF_PP 0x08 0x18

代码如下(示例):

/* 配置所有GPIOA为输入 浮空输入模式 */
 GPIO_InitTypeDef GPIO_InitStructure; 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

2.3 函数GPIO_StructInit

函数名 GPIO_StructInit
函数原形 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
功能描述 把 GPIO_InitStruct 中的每一个参数按默认值填入
输入参数 GPIO_InitStruct:指向结构 GPIO_InitTypeDef 的指针,待初始化
输出参数
返回值
先决条件
被调用函数

2.3.1GPIO_InitStruct 默认值

成员 默认值
GPIO_Pin GPIO_Pin_All
GPIO_Speed GPIO_Speed_2MHz
GPIO_Mode GPIO_Mode_IN_FLOATING

代码如下(示例):

/* 初始化GPIO Init Structure参数 */ 
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);

2.4 函数 GPIO_PinLockConfig

函数名 GPIO_PinLockConfig
函数原形 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 锁定 GPIO 管脚设置寄存器
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待锁定的端口位
该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合参阅 Section:GPIO_Pin 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/* 锁定GPIOA Pin0和Pin1*/
 GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);

2.5 函数 GPIO_ReadInputDataBit

函数名 GPIO_ReadInputDataBit
函数原形 u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 读取指定端口管脚的输入
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待读取的端口位
参阅 Section: GPIO_Pin 查阅更多该参数允许取值范围
输出参数
返回值 输入端口管脚值
先决条件
被调用函数

代码如下(示例):

/*读取GPIOB的第七个引脚,并将其存储在ReadValue变量中 */
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);

2.6 函数 GPIO_ReadInputData

函数名 GPIO_ReadInputData
函数原形 u16 GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
功能描述 读取指定的 GPIO 端口输入
输入参数 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输出参数
返回值 GPIO 输入数据端口值
先决条件
被调用函数

代码如下(示例):

例:
/*读取GPIOE输入数据端口并将其存储在ReadValue变量中*/
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOE);

2.7 函数 GPIO_ReadOutputDataBit

函数名 GPIO_ReadOutputDataBit
函数原形 u8 GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 读取指定端口管脚的输出
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待读取的端口位
参阅 Section: GPIO_Pin 查阅更多该参数允许取值范围
输出参数
返回值 输出端口管脚值
先决条件
被调用函数

代码如下(示例):

例:
/* 读取GPIOC的第七个引脚,并将其存储在ReadValue变量中 */
u8 ReadValue;
ReadValue = GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7);

2.8 函数 GPIO_ReadOutputData

函数名 GPIO_ReadOutputData
函数原形 u16 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
功能描述 读取指定的 GPIO 端口输出
输入参数 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输出参数
返回值 GPIO 输出数据端口值
先决条件
被调用函数

代码如下(示例):

/* 读取GPIOE输入数据端口并将其存储在ReadValue变量中 */
u16 ReadValue;
ReadValue = GPIO_ReadOutputData(GPIOE);

2.9 函数GPIO_SetBits

函数名 GPIO_SetBits
函数原形 void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 设置指定的数据端口位
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待设置的端口位
该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/* 设置GPIOA接口引脚10和引脚15 */ 
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

2.10 函数 GPIO_ResetBits

函数名 GPIO_ResetBits
函数原形 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 清除指定的数据端口位
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待清除的端口位
该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/* 清除GPIOB接口引脚1和引脚13 */ 
GPIO_ResetBits(GPIOB, GPIO_Pin_1 | GPIO_Pin_13);

2.11 函数 GPIO_WriteBit

函数名 GPIO_WriteBit
函数原形 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)
功能描述 设置或者清除指定的数据端口位
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待设置或者清除指的端口位;该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
输入参数 3 BitVal: 该参数指定了待写入的值。该参数必须取枚举 BitAction 的其中一个值。Bit_RESET:清除数据端口位;Bit_SET: 设置数据端口位
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/* 设置GPIOB接口 的15号引脚*/
 GPIO_WriteBit(GPIOB, GPIO_Pin_15, Bit_SET);

2.12 函数GPIO_Write

函数名 GPIO_Write
函数原形 void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
功能描述 向指定 GPIO 数据端口写入数据
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 PortVal: 待写入端口数据寄存器的值
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/*写入数据到GPIOA数据端口 */
 GPIO_Write(GPIOA, 0x1101);

2.13 函数GPIO_ToggleBits

函数名 GPIO_ToggleBits
函数原形 void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
功能描述 将GPIO 的引脚 IO 状态翻转
输入参数 1 GPIOx:x 可以是 A,B,C,D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待设置或者清除指的端口位;该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/*将GPIOA接口的15引脚IO状态翻转 */
GPIO_ToggleBits(GPIOA,GPIO_Pin_15 );

2.14 函数 GPIO_AFIODeInit

函数名 GPIO_AFIODeInit
函数原形 void GPIO_AFIODeInit(void)
功能描述 将复用功能(重映射事件控制和 EXTI 设置)重设为默认值
输入参数
输出参数
返回值
先决条件
被调用函数 RCC_APB2PeriphResetCmd()

代码如下(示例):

/* 将备用函数寄存器重置为它们的默认重置值 */
GPIO_AFIODeInit();

2.15 函数 GPIO_EventOutputConfig

函数名 GPIO_EventOutputConfig
函数原形 void GPIO_EventOutputConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
功能描述 选择 GPIO 管脚用作事件输出
输入参数 1 GPIO_PortSource: 选择用作事件输出的 GPIO 端口
输入参数 2 GPIO_PinSource:事件输出的管脚该参数可以取 GPIO_PinSourcex(x 可以是 0-15)
输出参数
返回值
先决条件
被调用函数

2.15.1 GPIO_PortSource

GPIO_PortSource 用以选择用作事件输出的 GPIO 端口

GPIO_PortSource 值

GPIO_PortSource 描述
GPIO_PortSourceGPIOA 选择 GPIOA
GPIO_PortSourceGPIOB 选择 GPIOB
GPIO_PortSourceGPIOC 选择 GPIOC
GPIO_PortSourceGPIOD 选择 GPIOD
GPIO_PortSourceGPIOE 选择 GPIOE

代码如下(示例):

/* 选择事件输出的GPIOE引脚5 */ 
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);

2.16 函数GPIO_EventOutputCmd

函数名 GPIO_EventOutputCmd
函数原形 void GPIO_EventOutputCmd(FunctionalState NewState)
功能描述 使能或者失能事件输出
输入参数 1 NewState: 事件输出的新状态这个参数可以取:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/*使能事件输出到GPIOC引脚6 */
 GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); 
 GPIO_EventOutputCmd(ENABLE);

2.17 函数GPIO_PinRemapConfig

函数名 GPIO_ PinRemapConfig
函数原形 void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)
功能描述 改变指定管脚的映射
输入参数 1 GPIO_Remap: 选择重映射的管脚
输入参数 2 NewState: 管脚重映射的新状态这个参数可以取:ENABLE 或者 DISABLE
输出参数
返回值
先决条件
被调用函数

2.17.1 GPIO_Remap

GPIO_Remap 用以选择用作事件输出的 GPIO 端口

GPIO_Remap
GPIO_Remap 描述
GPIO_Remap_SPI1 SPI1 复用功能映射
GPIO_Remap_I2C1 I2C1 复用功能映射
GPIO_Remap_USART1 USART1 复用功能映射
GPIO_PartialRemap_USART3 USART2 复用功能映射
GPIO_FullRemap_USART3 USART3 复用功能完全映射
GPIO_PartialRemap_TIM1 TIM1复用功能部分映射
GPIO_FullRemap_TIM1 TIM1 复用功能完全映射
GPIO_PartialRemap1_TIM2 TIM2 复用功能部分映射 1
GPIO_PartialRemap2_TIM2 TIM2 复用功能部分映射 2
GPIO_FullRemap_TIM2 T IM2 复用功能完全映射
GPIO_PartialRemap_TIM3 TIM3 复用功能部分映射
GPIO_FullRemap_TIM3 TIM3 复用功能完全映射
GPIO_Remap_TIM4 TIM4 复用功能映射
GPIO_Remap1_CAN CAN 复用功能映射 1
GPIO_Remap2_CAN CAN 复用功能映射 2
GPIO_Remap_PD01 PD01 复用功能映射
GPIO_Remap_SWJ_NoJTRST 除 JTRST 外 SWJ 完全使能(JTAG+SW-DP)
GPIO_Remap_SWJ_JTAGDisable JTAG-DP 失能 + SW-DP 使能
GPIO_Remap_SWJ_Disable SWJ 完全失能(JTAG+SW-DP)

代码如下(示例):

/*PB.08上的I2C1 SCL, PB.09上的I2C1 SDA  */
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);

2.18 函数GPIO_EXTILineConfig

函数名 GPIO_EXTILineConfig
函数原形 void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)
功能描述 选择 GPIO 管脚用作外部中断线路
输入参数 1 GPIO_PortSource: 选择用作外部中断线源的 GPIO 端口
输入参数 2 GPIO_PinSource:待设置的外部中断线路;该参数可以取 GPIO_PinSourcex(x 可以是 0-15)
输出参数
返回值
先决条件
被调用函数

代码如下(示例):

/* 选择PB.08作为EXTI行8 */ 
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);

该文档修改记录:

修改时间 修改说明
2023年3月5日 第一次发布,介绍了STM32通用输入/输出(GPIO)的18种函数及使用

总结

以上就是STM32固件库函数之通用输入/输出(GPIO)函数介绍及说明的内容,本文介绍了通用输入/输出(GPIO)函数的简单使用。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

你可能感兴趣的:(介绍STM32标准库函数,stm32,单片机,嵌入式硬件,固件库函数介绍,GPIO的函数介绍)