Skip to content

AFIO

AFIO (Alternate Function I/O) 是 STM32F10x 系列(如 F103)中一个非常特殊的 “幕后调度员”

AFIO 主要掌管着以下 三大功能:

1.端口重映射 (Remap) —— 最常用的功能

这是 AFIO 存在的最大意义。 STM32 的外设(如定时器、串口)引脚在出厂时是固定的(这叫 默认复用 )。但如果这些引脚被占用了,或者不利于你画 PCB 走线,你可以通过 AFIO 把这些功能“转移”到其他指定的引脚上。

  • 默认情况: TIM3_CH1 在 PA6。
  • 重映射后: TIM3_CH1 跑到了 PC6(部分重映射)或者 PB4(完全重映射)。
  • AFIO 的工作: 它就是那个把内部信号线从 PA6 拔下来,插到 PB4 去的“接线员”。 注意: 并不是想映射到哪就到哪,必须查《数据手册》看支持映射到哪些引脚。

2. 外部中断选择 (EXTI Selection) —— 必用的功能

我们在讲 EXTI 时说过:STM32 只有 16 条中断线(Line 0 ~ Line 15),但有 PA, PB, PC... 等多组 GPIO。

冲突: PA0, PB0, PC0 都想连到 EXTI_Line0,谁能连?

  • AFIO 的工作: 它负责充当“选择器”。
  • 如果你配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0),AFIO 就会把 EXTI_Line0 的开关拨向 PB0,切断 PA0PC0 的连接。

3. 调试端口配置 (JTAG/SWD Release) —— 救命的功能

STM32 默认开启 JTAG/SWD 调试功能。这就导致了以下 5 个引脚在默认情况下不能当作普通 GPIO 使用:

  • PA13 (JTMS/SWDIO)
  • PA14 (JTCK/SWCLK)
  • PA15 (JTDI)
  • PB3 (JTDO)
  • PB4 (NJTRST)

如果你现在的项目引脚不够用了,非要用 PB3 点灯,或者用 PA15 做重映射,你就必须找 AFIO。

  • AFIO 的工作: 它负责“解除”这些引脚的调试功能,把它们还原成普通的 GPIO。

  • 代码: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);(保留 SWD 下载,释放 PA15, PB3, PB4)。