v 通过引脚 GPIO_PinAFConfigO将其连接到相应的复用功能 、 通过函数 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF 配置为复用模式、 通过 GPIO_PuPd, GPIO_OType 和 GPIO_Speed选择上拉下拉,类型和速度 094 GPIO_InitO 通过函数GPIO_ReadlnputDataBit()读取输入数据寄存器的数据 > 在输出模式时,通过函数 GPIO_SetBitsO)/GPIO_ResetBits0配置引脚的置位和复位系统复位后,复用功能是被禁止的,引脚默认被配置成浮空输入模式(除了JTAG 引脚 LSE 振荡器引脚 OSC32_IN/OSC32_OUT 可以分别用做GPIO 的PC14/PC15,条件是LSE 振荡器功能被关闭,LSE 振荡器功能始終优先于通用1/0 口的功能。 > HSE 振荡器引脚 OSC_IN/OSC_OUT 可以分别用做GPIO 的 PHO/PH1,条件是 HSE 振荡器功能被关闭,LSE 振荡器功能始终优先于通用1/0 口的功能。 .1.6 GPIO 库的功能配置函数 GPIO 的初始化和配置函数主要有以下几个: void GPIO_Delnit(GPIO. _ TypeDef* GPIOx) 初始化 GPIO 寄存器到默认的复位值,参数中GPIOx为结构体指针变量针对特定的引脚,通过下面的函数实现 void GPIO_Init(GPIO_ TypeDef* GPIOx, GPIO_ _Init TypeDef* GPIO_InitStru 这个函数主要实现 GPIO 的初始化,stm32f4xx_gpio.c 文件里面最主要! 函数了,举个简单的例子,有兴趣的可以研究下这个函数的具体代码。配 18 推挽输出,速度 100MHz。 /* GPIOG Periph clock enable */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); /* Configure PG6 and PG8 in output pushpull mode */ GPIO InitStructure. GPIO _Pin= GPIO_Pin_6| GPIO_Pin_8; GPIO InitStructure. GPIO _Mode = GPIO_ Mode_OUT; GPIO_InitStructure. GPIO_OType = GPIO_OType_PP; GPIO_ InitStructure. GPIO_Speed = GPIO_Speed_100MHz; GPIO _InitStructure. GPIO_PuPd = GPIO. _PuPd _NOPULL; GPIO_Init(GPIOG, &GPIO_InitStructure); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) 这个函数将 GPIO_InitStructure 作为参数传递到配置结构体,然后在该函数内部实现了相应寄存器的配置。一行一行解释以上代码
时间: 2025-06-10 20:41:12 浏览: 22
### STM32 GPIO配置代码的功能与每行代码的作用
#### 1. **RCC_AHB1PeriphClockCmd 函数**
此函数用于使能或失能指定的外设时钟。在STM32中,每个外设(如GPIO)都需要对应的时钟开启才能正常工作。例如:
```c
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
```
上述代码的作用是开启GPIOA的时钟[^2]。如果未开启时钟,GPIOA将无法正常运行。
#### 2. **GPIO_InitTypeDef 结构体**
`GPIO_InitTypeDef` 是一个结构体,用于定义GPIO引脚的初始化参数。它包含以下主要字段及其含义:
- **GPIO_Pin**: 指定需要配置的GPIO引脚。例如 `GPIO_Pin_0 | GPIO_Pin_1` 表示配置GPIO端口的第0和第1引脚[^3]。
- **GPIO_Mode**: 配置GPIO引脚的工作模式。可能的值包括输入 (`GPIO_Mode_IN`)、输出 (`GPIO_Mode_OUT`)、复用功能 (`GPIO_Mode_AF`) 和模拟输入 (`GPIO_Mode_AN`)。
- **GPIO_Speed**: 配置GPIO引脚的输出速度,可能的值包括低速 (`GPIO_Low_Speed`)、中速 (`GPIO_Medium_Speed`)、快速 (`GPIO_Fast_Speed`) 和高速 (`GPIO_High_Speed`)[^3]。
- **GPIO_OType**: 配置GPIO引脚的输出类型,可能的值包括推挽输出 (`GPIO_OType_PP`) 和开漏输出 (`GPIO_OType_OD`)[^3]。
- **GPIO_PuPd**: 配置GPIO引脚的上下拉模式,可能的值包括浮空模式 (`GPIO_PuPd_NOPULL`)、上拉模式 (`GPIO_PuPd_UP`) 和下拉模式 (`GPIO_PuPd_DOWN`)[^3]。
#### 3. **GPIO_Init 函数**
`GPIO_Init` 函数用于根据 `GPIO_InitTypeDef` 结构体中的配置参数初始化指定的GPIO端口。例如:
```c
GPIO_Init(GPIOA, &GPIO_InitStruct);
```
上述代码的作用是根据 `GPIO_InitStruct` 中的配置初始化GPIOA端口[^2]。
#### 4. **GPIO_ReadInputDataBit 函数**
此函数用于读取指定GPIO引脚的输入状态。例如:
```c
key = GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4);
```
上述代码的作用是读取GPIOE端口第4引脚的输入状态,并将其存储到变量 `key` 中[^4]。
#### 5. **GPIO_PinAFConfig 函数**
此函数用于配置GPIO引脚的复用功能。例如:
```c
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
```
上述代码的作用是将GPIOA的第9引脚配置为USART1的TX功能[^5]。
---
### 示例代码解析
以下是一个完整的GPIO配置代码示例,并逐行解析其功能:
```c
// 声明GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;
// 使能GPIOA的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
// 配置GPIO_InitStruct结构体
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 配置GPIOA的第0和第1引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; // 设置为输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_OD; // 设置为开漏输出
GPIO_InitStruct.GPIO_Speed = GPIO_Fast_Speed; // 设置为快速模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 设置为上拉模式
// 初始化GPIOA
GPIO_Init(GPIOA, &GPIO_InitStruct);
```
- 第1行:声明一个 `GPIO_InitTypeDef` 类型的结构体变量 `GPIO_InitStruct`,用于存储GPIO引脚的配置参数。
- 第4行:通过 `RCC_AHB1PeriphClockCmd` 函数使能GPIOA的时钟。
- 第7行:设置 `GPIO_InitStruct.GPIO_Pin` 参数,指定需要配置的GPIO引脚为第0和第1引脚。
- 第8行:设置 `GPIO_InitStruct.GPIO_Mode` 参数,指定GPIO引脚的工作模式为输出模式。
- 第9行:设置 `GPIO_InitStruct.GPIO_OType` 参数,指定GPIO引脚的输出类型为开漏输出[^3]。
- 第10行:设置 `GPIO_InitStruct.GPIO_Speed` 参数,指定GPIO引脚的输出速度为快速模式[^3]。
- 第11行:设置 `GPIO_InitStruct.GPIO_PuPd` 参数,指定GPIO引脚的上下拉模式为上拉模式。
- 第14行:通过 `GPIO_Init` 函数根据 `GPIO_InitStruct` 中的配置初始化GPIOA端口[^2]。
---
###
阅读全文
相关推荐



















