轻松看懂stm32复用功能、重映射,避免90%的新手误区!

 说实话关于复用功能和重映射这两个我是经常搞混,我给大家进行一个总结,希望大家不要重走我的苦

复用功能:

复用功能;也总说成复用引脚,他就是可以实现同一个引脚可以干很多事情,给大家举个例子,大家可以翻开“stm32f10x中文参考手册”的第118页、120页,在PA9这个引脚上,不仅可以是定时器1通道2还可以是USART1_Tx

如果出现了这个复用引脚,那么我们在配置GPIO结构体的时候,就要选择AF,例如:GPIO_Mode_AF_PP。大家能明白为什么要有复用推挽复用开漏的功能了吧?

STM32 的每个 GPIO 引脚默认是普通 IO,也就是能输出或读取高低电平(比如控制一个 LED 或检测一个按键)。

但当这个引脚要去参与外设通信(比如 SPI、USART、TIM 等),它就不再只是“普通电平”那么简单,而是要承担更高级的功能,比如:

  • SPI 的 MOSI 要按时钟同步发送数据

  • USART 的 Tx 要按波特率发字节流

  • TIM 的输出通道要输出 PWM 波形

所以这时,就必须启用 GPIO 的复用功能,把引脚从“普通 GPIO”切换成“某个外设的功能口”

在代码中,我们就需要把这个引脚的模式配置为:

GPIO_Mode_AF_PP // 复用推挽输出 
GPIO_Mode_AF_OD // 复用开漏输出(如 I2C)

 重映射:

接下来讲重映射:

重映射是将外设的某个功能换个引脚来使用。

你原本以为串口只能走 PA9/PA10,结果它说:“不,我还能走 PB6/PB7,只要你设置一下重映射就行!”

这样不就能解决引脚冲突,让资源分配更灵活了嘛。

REMAP=0是默认,REMAP=1是重映射到对应的引脚。一旦要有重映射我们就要在代码中配置一个复用时钟函数,如下图:

 重映射中还有部分重映射、完全重映射,给大家总结好表格,大家自行阅读。

类型说明
默认映射比如 USART1 默认映射在 PA9 / PA10
部分重映射比如 TIM2 可以从 PA0/PA1 映射成 PA15/PB3(只改部分)
完全重映射所有引脚全部换一组,比如 TIM3 从 PA6/PA7/PC6 映射成 PC8/PC9/PB0

 

 同时,如果我们要用重映射的话,我们还需要打开AFIO时钟,且要调用gpio.h中的这个函数,从而设置成重映射的状态

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

✅ 总结

(1)复用功能 vs 重映射:一套搞清楚的方法论

概念作用关键词配置重点是否需开启 AFIO 时钟
复用功能让一个引脚干多种事(由芯片内部预设)“一个引脚有多个角色”GPIO 模式要用 AF_PPAF_OD❌ 不需要
重映射功能让一个外设换条引脚走(解决冲突)“一个功能可以换地方”要调用 GPIO_PinRemapConfig() 设置✅ 需要开启 RCC_APB2Periph_AFIO

(2)如何判断你遇到的是“复用功能”还是“重映射”?

✅ 判断 1:同一个引脚能用在多个外设上?

👉 那你遇到的是 复用功能

📌 举个例子:

STM32 的 GPIO 默认是普通高低电平输出/输入,但当引脚要用于像 SPI、USART、PWM 这类外设通信时,就必须启用 复用功能,让引脚切换成外设的“功能口”。这就是为什么我们在配置 SPI 时常见 GPIO_Mode_AF_PP —— 它就是告诉 STM32:“这根引脚要去干外设的活了”。


✅ 判断 2:同一个外设功能可以映射到多个引脚上?

👉 那你遇到的是 重映射功能

📌 举个例子:
SPI1 默认用的是 PA5(SCK)、PA6(MISO)、PA7(MOSI)
但你也可以通过重映射,把它挪到 PB3、PB4、PB5
也就是说 —— “一个功能可以换地方用”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值