#define GPIO5_Pin GPIO_PIN_13 #define GPIO5_GPIO_Port GPIOC #define ADC1_Pin GPIO_PIN_0 #define ADC1_GPIO_Port GPIOA #define ADC2_Pin GPIO_PIN_1 #define ADC2_GPIO_Port GPIOA #define ADC3_Pin GPIO_PIN_4 #define ADC3_GPIO_Port GPIOA #define ADC4_Pin GPIO_PIN_5 #define ADC4_GPIO_Port GPIOA #define MOTOR1_Pin GPIO_PIN_6 #define MOTOR1_GPIO_Port GPIOA #define MOTOR2_Pin GPIO_PIN_7 #define MOTOR2_GPIO_Port GPIOA #define MOTOR3_Pin GPIO_PIN_0 #define MOTOR3_GPIO_Port GPIOB #define MOTOR4_Pin GPIO_PIN_1 #define MOTOR4_GPIO_Port GPIOB #define GPIO6_Pin GPIO_PIN_2 #define GPIO6_GPIO_Port GPIOB #define GPIO1_Pin GPIO_PIN_12 #define GPIO1_GPIO_Port GPIOB #define GPIO1_EXTI_IRQn EXTI15_10_IRQn #define CAPTURE1_Pin GPIO_PIN_8 #define CAPTURE1_GPIO_Port GPIOA #define CAPTURE2_Pin GPIO_PIN_9 #define CAPTURE2_GPIO_Port GPIOA #define GPIO2_Pin GPIO_PIN_10 #define GPIO2_GPIO_Port GPIOA #define GPIO2_EXTI_IRQn EXTI15_10_IRQn #define SWDIO_Pin GPIO_PIN_13 #define SWDIO_GPIO_Port GPIOA #define SWCLK_Pin GPIO_PIN_14 #define SWCLK_GPIO_Port GPIOA #define SERVO1_Pin GPIO_PIN_15 #define SERVO1_GPIO_Port GPIOA #define SERVO2_Pin GPIO_PIN_3 #define SERVO2_GPIO_Port GPIOB #define GPIO3_Pin GPIO_PIN_4 #define GPIO3_GPIO_Port GPIOB #define GPIO4_Pin GPIO_PIN_5 #define GPIO4_GPIO_Port GPIOB #define LOG_TX_Pin GPIO_PIN_6 #define LOG_TX_GPIO_Port GPIOB #define LOG_RX_Pin GPIO_PIN_7 #define LOG_RX_GPIO_Port GPIOB
时间: 2025-06-08 19:37:15 浏览: 8
### STM32 GPIO 定义与配置
STM32 的通用输入/输出 (GPIO) 是一种灵活的接口,允许开发者通过软件控制硬件设备的行为。以下是关于 STM32 GPIO 的定义、端口配置以及代码示例。
#### 1. GPIO 结构体定义
在 `stm32f10x.h` 文件中,GPIO 被定义为一个结构体,用于管理各个寄存器的功能。该结构体包含了多个成员变量,分别对应不同的功能寄存器:
```c
typedef struct {
__IO uint32_t CRL; /*!< GPIO port configuration low register */
__IO uint32_t CRH; /*!< GPIO port configuration high register */
__IO uint32_t IDR; /*!< GPIO port input data register */
__IO uint32_t ODR; /*!< GPIO port output data register */
__IO uint32_t BSRR; /*!< GPIO port bit set/reset register */
__IO uint32_t BRR; /*!< GPIO port bit reset register */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register */
} GPIO_TypeDef;
```
这些寄存器的作用分别是:
- **CRL 和 CRH**: 配置低字节和高字节引脚的工作模式。
- **IDR**: 存储当前引脚的状态(读取输入数据)。
- **ODR**: 设置引脚的输出状态。
- **BSRR 和 BRR**: 用于单独设置或清除某一位的值。
- **LCKR**: 锁定某些配置以防意外修改[^1]。
#### 2. 端口宏定义
为了方便访问不同端口的基地址,在头文件中还提供了针对各端口的宏定义:
```c
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
// ...其他端口类似...
```
这使得可以直接通过指针操作对应的外设寄存器[^1]。
#### 3. 初始化配置流程
对于 STM32 来说,要使用某个 GPIO 引脚前需完成以下几个步骤:
- 启用相应 GPIO 外设的时钟。
- 使用 `GPIO_InitTypeDef` 类型的数据结构指定所需参数并调用初始化函数。
下面是一个典型的 LED 控制程序中的 GPIO 初始化过程演示[^4]:
```c
#include "stm32f10x.h"
void led_init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 PA12 作为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; /* 选择第 12 号管脚 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 推挽输出模式 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* 输出速度为 50 MHz */
GPIO_Init(GPIOA, &GPIO_InitStructure); /* 应用上述配置 */
// 将 PA12 设置为高电平(点亮 LED)
GPIO_SetBits(GPIOA, GPIO_Pin_12);
}
```
此代码片段展示了如何利用标准外设库快速配置特定 GPIO 引脚成为输出用途,并驱动外部负载如发光二极管(LED)[^4]。
---
###
阅读全文
相关推荐


















