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,切断PA0和PC0的连接。
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)。