正确配置AF映射和GPIO模式指南

2025-11-17 19:11:49 4615

GPIO, IO, gp, pi, 映射

什么是AF映射?

让一个GPIO脚不当普通IO,而去负责某个外设功能。

配置GPIO AF的标准完整步骤

在GD32F405上,配置AF要走4步标准流程:

步骤 内容 备注

1. 开时钟 给GPIO和AF模块开RCU时钟 RCU_APB2EN

2. 配IO模式 设置引脚为复用功能(Alternate Function Mode) 输出模式、高速、推挽

3. 配AF映射 正确设置引脚的Alternate Function映射编号 通过gpio_af_set()函数

4. 可选拉电阻 如果需要,配置上拉/下拉/无拉电阻 特别是I2C/UART需上拉

实操例子(以SPI2为例)

① 开时钟

c

复制

编辑

rcu_periph_clock_enable(RCU_GPIOA); // PA15

rcu_periph_clock_enable(RCU_GPIOB); // PB13, PB14, PB15

rcu_periph_clock_enable(RCU_SPI2); // SPI2外设

② 配置GPIO为复用推挽输出

c

复制

编辑

gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15); // PA15

gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); // PB13/14/15

gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15); // PA15推挽输出

gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); // PB13/14/15推挽输出

说明:

GPIO_MODE_AF ➔ 设置成Alternate Function

GPIO_OTYPE_PP ➔ 推挽输出,不是开漏

50MHz速率 ➔ 足够绝大部分SPI速度

③ 配AF编号映射

c

复制

编辑

gpio_af_set(GPIOA, GPIO_AF_5, GPIO_PIN_15); // PA15映射到AF5(SPI2_NSS)

gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_13); // PB13映射到AF5(SPI2_SCK)

gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_14); // PB14映射到AF5(SPI2_MISO)

gpio_af_set(GPIOB, GPIO_AF_5, GPIO_PIN_15); // PB15映射到AF5(SPI2_MOSI)

说明:

SPI2在GD32F4上使用的是AF5。

AF编号要对!(AF4/AF5/AF6都不一样,不要乱搞)

④ 其他注意(拉电阻)

一般SPI口内部不拉电阻,保持PUPD_NONE就好。

如果是UART RX输入,可以考虑上拉。

4. 总结配置套路(记死这3条)

时钟先开(没有时钟,后面全废)

模式设对(Alternate Function + 推挽输出 + 合适速率)

AF编号映射准(AF错了,根本收不到信号)

本主题由 管理团队 于 2025-4-29 10:00 审核通过

回复

收藏0

举报