文章目录
- GPIO
- Ⅰ、GPIO函数
- Ⅱ、GPIO_InitTypeDef结构体参数
- ①、GPIO_Mode
- ②、GPIO_Pin
- ③、GPIO_Speed
GPIO
Ⅰ、GPIO函数
// 将指定的GPIO端口寄存器重置为默认值
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
// 将GPIO的备用功能寄存器重置为默认值
void GPIO_AFIODeInit(void);
// 初始化GPIO端口,设置引脚的模式、速度、上拉/下拉等属性
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
// 初始化GPIO初始化结构体的默认值
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
// 读取指定GPIO端口的指定引脚的输入数据位
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 读取指定GPIO端口的所有引脚的输入数据
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
// 读取指定GPIO端口的指定引脚的输出数据位
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 读取指定GPIO端口的所有引脚的输出数据
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
// 将指定GPIO端口的指定引脚置位(设置为高电平)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 将指定GPIO端口的指定引脚复位(设置为低电平)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 为指定GPIO端口的指定引脚设置新的值(单个引脚)
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
// 为指定GPIO端口的所有引脚设置新的值(整个端口)
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
// 锁定指定GPIO端口的指定引脚配置,防止后续的更改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// 配置GPIO端口的事件输出功能
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
// 控制GPIO端口的事件输出使能或禁用
void GPIO_EventOutputCmd(FunctionalState NewState);
// 配置GPIO端口的引脚重映射
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
// 配置外部中断(EXTI)线与GPIO端口引脚的关联
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
// 配置以太网(ETH)媒体接口与GPIO端口引脚的关联
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
Ⅱ、GPIO_InitTypeDef结构体参数
①、GPIO_Mode
指定所选引脚的工作模式
该参数可以是
@ref GPIOMode_TypeDef
枚举类型定义
typedef enum { GPIO_Mode_AIN = 0x0, /*!< 模拟输入模式 */ GPIO_Mode_IN_FLOATING = 0x04, /*!< 浮空输入模式 */ GPIO_Mode_IPD = 0x28, /*!< 下拉输入模式 */ GPIO_Mode_IPU = 0x48, /*!< 上拉输入模式 */ GPIO_Mode_Out_OD = 0x14, /*!< 开漏输出模式 */ GPIO_Mode_Out_PP = 0x10, /*!< 推挽输出模式 */ GPIO_Mode_AF_OD = 0x1C, /*!< 复用开漏输出模式 */ GPIO_Mode_AF_PP = 0x18 /*!< 复用推挽输出模式 */ } GPIOMode_TypeDef;
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
:复用推挽输出模式。引脚配置为复用功能的推挽输出宏函数
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \ ((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \ ((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \ ((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
- 描述:检查给定的模式是否为有效的GPIO模式
- 参数:
MODE
,代表GPIO模式- 功能:检查
MODE
是否等于预定义的GPIO模式中的任一个- 返回值:如果
MODE
有效,返回1
(真),否则返回0
(假)
②、GPIO_Pin
指定要配置的GPIO引脚
该参数可以是
@ref GPIO_pins_define
的任意值:
宏定义解释:
这些宏定义用于选择特定的GPIO引脚。每个宏定义一个特定的引脚,值为该引脚对应的位掩码
GPIO_Pin_0
到GPIO_Pin_15
- 描述:分别表示选择GPIO的第0引脚到第15引脚。每个宏定义的值是该引脚对应的位掩码,例如
GPIO_Pin_0
的值为0x0001
,表示第0位被设置为1,其他位为0GPIO_Pin_All
- 描述:表示选择所有GPIO引脚。值为
0xFFFF
,表示所有16位都被设置为1宏函数:
IS_GPIO_PIN(PIN)
- 描述:检查给定的引脚选择是否有效
- 参数:
PIN
,代表GPIO引脚选择- 功能:检查
PIN
是否为有效的引脚选择。具体来说,检查PIN
是否为0到0xFFFF之间的值,且不为0- 返回值:如果
PIN
有效,返回1
(真),否则返回0
(假)IS_GET_GPIO_PIN(PIN)
- 描述:检查给定的引脚选择是否为单个引脚
- 参数:
PIN
,代表GPIO引脚选择- 功能:检查
PIN
是否等于预定义的单个引脚选择宏中的任一个- 返回值:如果
PIN
为单个引脚,返回1
(真),否则返回0
(假)表格:
宏定义 值 描述 GPIO_Pin_0
~GPIO_Pin_15
0x0001~0x8000 选择第0~15引脚 GPIO_Pin_All
0xFFFF 选择所有引脚
宏函数 描述 IS_GPIO_PIN(PIN) 检查PIN是否为有效的GPIO引脚选择 IS_GET_GPIO_PIN(PIN) 检查PIN是否为单个GPIO引脚选择
③、GPIO_Speed
指定所选引脚的速度
该参数可以是
@ref GPIOSpeed_TypeDef
:
枚举类型定义
typedef enum { GPIO_Speed_10MHz = 1, /*!< 输出最大频率为10MHz */ GPIO_Speed_2MHz, /*!< 输出最大频率为2MHz */ GPIO_Speed_50MHz /*!< 输出最大频率为50MHz */ } GPIOSpeed_TypeDef;
GPIO_Speed_10MHz
:输出最大频率为10MHz。适用于需要较高速度但不是最高速度的场景GPIO_Speed_2MHz
:输出最大频率为2MHz。适用于速度要求较低的场景,可以减少功耗GPIO_Speed_50MHz
:输出最大频率为50MHz。适用于需要最高速度的场景,确保数据传输的高效性宏函数
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Speed_10MHz) || ((SPEED) == GPIO_Speed_2MHz) || \ ((SPEED) == GPIO_Speed_50MHz))
- 描述:检查给定的频率设置是否有效
- 参数:
SPEED
,代表GPIO的输出频率设置- 功能:检查
SPEED
是否等于预定义的频率设置中的任一个- 返回值:如果
SPEED
有效,返回1
(真),否则返回0
(假)