stm32复用引脚和重映射
时间: 2025-01-19 11:35:22 浏览: 78
### STM32 微控制器中的复用引脚和重映射功能
STM32 微控制器提供了灵活的外设信号路由机制,允许通过配置来改变某些外设信号默认连接的引脚位置。这种灵活性主要体现在两个方面:复用引脚(Alternate Function Pin)和重映射(Remapping)。对于 STM32F103 和其他系列而言,这些特性使得硬件设计更加灵活。
#### 复用引脚的概念
在 STM32 中,许多 GPIO 引脚具有多种可能的功能选项,除了作为普通的输入/输出之外还可以被设置成特定外设模块的数据线或控制线。当某个引脚用于非基本 I/O 功能时,则称为该引脚处于“复用模式”。为了启用某一外设并将其分配给指定的 GPIO 引脚,在初始化阶段需正确设定相应的寄存器[^1]。
#### 重映射的作用
重映射是指重新定义标准外设接口所使用的物理引脚位置的能力。例如,默认情况下 UART 接口可能会占用一组固定的引脚;然而借助于 AFIO (Alternative Function Input Output) 寄存器组内的 REMAP 字段,可以将同一UART实例切换至另一组备用引脚上工作。这对于 PCB 布局优化以及解决资源冲突非常有用[^2]。
#### 配置过程概述
要实现上述两种功能,通常涉及以下几个方面的操作:
- **使能相关时钟**:确保 APB2 或者 AHB 总线上对应的外设已经开启供电。
- **选择合适的端口与引脚编号**:查阅数据手册确认目标外设有无提供多路选择,并决定具体要用哪一对GPIO组合。
- **调整AFIO设置**:如果需要更改默认映射关系,则应访问 `SYSCFG->EXTICR` 或者专门针对某外设的REMAP位域进行编程。
- **编写启动代码片段**
下面给出一段简单的 C 语言代码示例,展示如何为 STM32F103 设置 USART1 的全重映射到 PA9(TX)/PA10(RX),而不是其默认的位置 PB6/TX & PB7/RX:
```c
#include "stm32f1xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init(); // 初始化 GPIO
MX_USART1_UART_Init();// 初始化 USART1
while (1){}
}
// 定义函数体...
static void MX_GPIO_Init(void){
__HAL_RCC_AFIO_CLK_ENABLE(); // 启用 AFIO 时钟
__HAL_AFIO_REMAP_USART1_ENABLE(); // 开启 USART1 全部重映射
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能 GPIOA 时钟
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 设定为推挽输出方式下的复用功能
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
```
阅读全文
相关推荐


















