STM32串口重映射
时间: 2025-05-14 18:42:18 浏览: 19
### STM32串口重映射方法及HAL库GPIO复用配置
#### 1. STM32串口重映射简介
STM32微控制器支持通过端口复用和重映射机制来改变某些外设(如USART)的引脚位置。这种灵活性允许开发者根据实际硬件设计需求重新分配外设的功能引脚[^2]。
对于USART模块,其默认的TX/RX引脚可以通过AFIO(Alternate Function I/O)寄存器进行重映射到其他GPIO引脚上。具体来说,STM32F1系列提供了部分 USART 的重映射选项,而更高性能的 F4 系列则进一步扩展了这一功能[^1]。
---
#### 2. 使用 HAL 库实现串口重映射的关键步骤
以下是基于 HAL 库实现 STM32 串口重映射的主要技术要点:
##### (a) 启用 AFIO 和相关时钟
为了启用重映射功能,必须先开启 `RCC_APB2ENR` 寄存器中的 `AFIO` 时钟以及目标 GPIO 的时钟。这一步通常在初始化函数中完成[^3]。
```c
__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE(); // 假设使用 PA9/PA10 或者 PB6/PB7
```
##### (b) 配置 GPIO 引脚为复用模式
将选定的 GPIO 引脚配置为复用推挽输出模式(Mode: Alternate function push-pull)。例如,假设我们将 USART1 的 TX 和 RX 映射至 PB6 和 PB7,则需如下设置:
```c
GPIO_InitTypeDef GPIO_InitStruct = {0};
// USART1_TX on PB6
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// USART1_RX on PB7
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
```
##### (c) 设置 USART 重映射
利用 `AFIO_MAPR` 寄存器控制 USART 的重映射行为。以 STM32F103ZET6 开发板为例,若希望将 USART1 的 TX/RX 移动到 PB6/PB7 上,则需要执行以下操作[^4]:
```c
// USART1 Remapping to PB6/TX and PB7/RX
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); // 可选优先级分组调整
__HAL_AFIO_REMAP_USART1_ENABLE(); // 启用 USART1 的重映射
```
> **注意**: 如果不调用上述宏定义 (`__HAL_AFIO_REMAP_USART1_ENABLE`),那么 USART1 默认会连接到 PA9(TX)/PA10(RX)。
##### (d) 初始化 USART 并启动通信
最后按照常规方式初始化 USART 模块并使能中断或其他事件处理逻辑:
```c
UART_HandleTypeDef huart1;
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
if(HAL_UART_Init(&huart1) != HAL_OK){
Error_Handler(); // 错误处理函数
}
```
---
#### 3. 示例代码总结
完整的示例代码片段展示了如何结合 HAL 库完成 USART1 到 PB6(Pin-TX)/PB7(Pin-RX) 的重映射过程。此方案适用于大多数基于 STM32F1xx 芯片的应用场景,并可根据不同型号灵活修改对应参数。
---
阅读全文
相关推荐


















