我来解释下为什么是AF1而不是AF2、AF3:
除了用作通用 IO 口以外,所有的 GPIO 都有备用功能。
对于 GD32F10x/20x/30x/403/E10x 系列 MCU,用户可通过软件将某一个 GPIO 配置为复用模式,
然后再使能相应外设即可使用 IO 对应的复用功能。
对于 GD32F1x0/3x0/4xx/E23x 系列 MCU,用户可通过软件将某一个 GPIO 配置为复用模式,同
时还需要设置 GPIO 备用功能选择寄存器选择 16 个备用功能中的一个。以 GD32F130 为例,说
下具体的配置流程。
(1) 设置 GPIO 模式 gpio_mode_set
gpio_mode_set函数原型为:
void gpio_mode_set(uint32_t gpio_periph, uint32_t mode, uint32_t pull_up_down, uint32_t pin)
{
xxx
xxx
}
其中形参gpio_periph为需要设置的GPIO口组,其对应的实参为GPIOx(x = A,B,C,D,E,F,G),形参
mode为需要设置的GPIO模式,对应的实参为:
GPIO_MODE_INPUT(输入模式)
GPIO_MODE_OUTPUT(输出模式)
GPIO_MODE_AF(复用模式)
GPIO_MODE_ANALOG(模拟模式)
形参pull_up_down为GPIO的上下拉设置,对应的实参为:
GPIO_PUPD_NONE(无上下拉)
GPIO_PUPD_PULLUP(上拉)
GPIO_PUPD_PULLDOWN(下拉)
形参pin为pin脚号,实参为GPIO_PIN_x(x=0..15)。
(2) 设置 AF 类型 gpio_af_set
当需要将GPIO设置为复用模式时,除了调用gpio_mode_se设置GPIO模式外,还需要调用函数
gpio_af_set进行复用类型的设置。 gpio_af_set函数原型为:
void gpio_mode_set(uint32_t gpio_periph, uint32_t alt_func_num, uint32_t pin)
{
xxx
xxx
}
其中形参gpio_periph为需要设置的GPIO口组,其对应的实参为GPIOx(x = A,B,C,D,E,F,G),形参
alt_func_num为需要设置复用类型,对应的实参为:
GPIO_AF_0(复用类型0)
GPIO_AF_1(复用类型1)
GPIO_AF_2(复用类型2)
GPIO_AF_3(复用类型3)
GPIO_AF_4(复用类型4)
GPIO_AF_5(复用类型5)
GPIO_AF_6(复用类型6)
GPIO_AF_7(复用类型7)
F1x0、 F3x0、 F4xx(F405\F407\F450)、 E23x系列MCU的GPIO的复用类型可以从对应MCU的
Datasheet中查得,如GD32F130系列的复用类型表如下图(部分截图):
形参pin为pin脚号,实参为GPIO_PIN_x(x=0..15)。
根据以上介绍,如设置PA0为复用模式,且设置功能为USART0_CTS功能,函数调用如下:
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_NONE,GPIO_PIN_0);
gpio_af_set (GPIOA,GPIO_AF_1,GPIO_PIN_0);
|