GD32F3的GPIO寄存器操作宏定义
时间: 2023-08-11 18:39:37 浏览: 297
以下是 GD32F3 的 GPIO 寄存器操作宏定义示例:
```c
#define GPIO_BASE(port) (GPIOA_BASE + (port - GPIOA) * 0x0400U) // GPIO 基地址宏定义
#define GPIO_PIN(port, pin) (1U << (pin)) // GPIO 引脚宏定义
#define GPIO_MODER(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x00U)) // GPIO 模式寄存器宏定义
#define GPIO_OTYPER(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x04U)) // GPIO 输出类型寄存器宏定义
#define GPIO_OSPEEDR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x08U)) // GPIO 输出速度寄存器宏定义
#define GPIO_PUPDR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x0CU)) // GPIO 上下拉寄存器宏定义
#define GPIO_IDR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x10U)) // GPIO 输入数据寄存器宏定义
#define GPIO_ODR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x14U)) // GPIO 输出数据寄存器宏定义
#define GPIO_BSRR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x18U)) // GPIO 置位/复位寄存器宏定义
#define GPIO_LCKR(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x1CU)) // GPIO 锁定寄存器宏定义
#define GPIO_AFRL(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x20U)) // GPIO 复用功能低位寄存器宏定义
#define GPIO_AFRH(port) (*(volatile uint32_t *)(GPIO_BASE(port) + 0x24U)) // GPIO 复用功能高位寄存器宏定义
```
使用这些宏定义,可以方便地对 GD32F3 的 GPIO 寄存器进行操作,例如:
```c
// 设置 GPIOA 的第 1 个引脚为输出模式,推挽输出,最大输出速度为 50MHz
GPIO_MODER(GPIOA) |= (0x01U << (1U * 2U));
GPIO_OTYPER(GPIOA) &= ~(0x01U << 1U);
GPIO_OSPEEDR(GPIOA) |= (0x03U << (1U * 2U));
// 设置 GPIOA 的第 2 个引脚为输入模式,上拉输入模式
GPIO_MODER(GPIOA) &= ~(0x03U << (2U * 2U));
GPIO_PUPDR(GPIOA) &= ~(0x03U << (2U * 2U));
GPIO_PUPDR(GPIOA) |= (0x01U << (2U * 2U));
// 读取 GPIOA 的第 2 个引脚的输入数据
uint32_t input_data = GPIO_IDR(GPIOA) & GPIO_PIN(GPIOA, 2U);
```
阅读全文