打印

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

[复制链接]
829|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
4y1b3|  楼主 | 2025-4-29 09:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
什么是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 11:43 | 只看该作者
数据手册上写的是AF6  数据手册版本是 GD32F405xx_Datasheet_Rev2.5


使用特权

评论回复
板凳
gdutchen| | 2025-5-6 16:02 | 只看该作者
有参考意义,留下足迹。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

250

帖子

0

粉丝