STM32F103系列最多支持5个串口(USART/UART),其中包含3个通用同步/异步收发器(USART1、USART2、USART3)和2个低功耗异步收发器(UART4、UART5)。具体可用串口数量取决于芯片封装和引脚资源,例如LQFP100封装的STM32F103ZET6拥有全部5个串口,而小封装如LQFP48的STM32F103C8T6仅支持3个(USART1~3),且部分需复用IO。开发者常因忽略引脚重映射功能或封装限制,误以为串口不足。合理配置AFIO重映射可优化串口使用。
1条回答 默认 最新
三月Moon 2025-10-26 10:42关注1. STM32F103系列串口资源概览
STM32F103系列微控制器基于ARM Cortex-M3内核,广泛应用于工业控制、通信设备和嵌入式系统中。其串行通信接口(USART/UART)是实现设备间数据交互的核心模块之一。
该系列最多支持5个串行通信接口:
- USART1:高性能通用同步/异步收发器,工作频率高,支持主从同步模式。
- USART2:通用异步收发器,常用于连接外部传感器或调试输出。
- USART3:功能完整,支持中断、DMA及多处理器通信模式。
- UART4:低功耗异步收发器,适用于对能耗敏感的应用场景。
- UART5:仅提供基本异步功能,不支持同步模式。
这些串口的物理引脚分配依赖于芯片的具体封装形式。例如:
芯片型号 封装类型 可用串口数量 支持的串口 备注 STM32F103ZET6 LQFP100 5 USART1~3, UART4~5 全部串口均可使用 STM32F103VET6 LQFP100 5 USART1~3, UART4~5 同ZET6配置 STM32F103C8T6 LQFP48 3 USART1~3 无UART4/5引脚 STM32F103RBT6 LQFP64 4 USART1~3, UART4 缺少UART5引脚 2. 引脚复用与AFIO重映射机制详解
在实际开发中,许多开发者遇到“串口不够用”的问题,往往并非硬件限制所致,而是忽略了GPIO引脚复用与AFIO(Alternate Function I/O)重映射功能。
STM32F103通过AFIO模块允许将部分外设信号重新映射到不同的GPIO引脚上,从而提升布局灵活性。以USART3为例:
- 默认引脚:
PC10(TX),PC11(RX) - 部分重映射:
PD8(TX),PD9(RX) - 完全重映射:
PD10(TX),PD11(RX)(需开启AFIO时钟)
启用重映射的关键步骤如下:
// 启用AFIO时钟 RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // 配置部分重映射 USART3 AFIO->MAPR &= ~AFIO_MAPR_USART3_REMAP; AFIO->MAPR |= AFIO_MAPR_USART3_REMAP_PARTIALREMAP; // 或FULLREMAP此机制可有效解决PCB布线冲突或关键引脚被占用的问题。
3. 实际应用中的常见问题分析
在项目实践中,以下问题频繁出现:
- 未开启AFIO时钟即尝试重映射,导致配置无效。
- 误认为小封装芯片支持全部5个串口,结果发现UART4/5无对应引出引脚。
- 多个串口共用NVIC中断通道时未正确配置优先级,引发中断抢占异常。
- DMA传输未对齐缓冲区边界,造成数据丢失或HardFault。
- 波特率计算误差过大,尤其是在72MHz主频下未精确匹配标准值。
- 未处理接收溢出(ORE)、帧错误(FE)等状态标志,影响通信稳定性。
- 使用串口下载程序后未禁用BOOT引脚相关功能,导致启动异常。
- 低功耗设计中忽略UART4/5的唤醒能力,错失节能机会。
- printf重定向至串口时未实现_nonreturning函数属性,干扰RTOS调度。
- 多任务环境中未加互斥锁,导致串口发送混乱。
4. 优化策略与高级配置建议
为最大化利用有限的串口资源,推荐采取以下策略:
- 优先使用大封装芯片(如LQFP100),确保UART4/5可用。
- 结合DMA实现零负载数据收发,释放CPU资源。
- 利用IDLE中断实现不定长帧接收,替代定时轮询。
- 通过软件模拟(Bit-Banging)扩展额外UART(适用于低速场景)。
- 采用串口服务器或多路复用芯片(如MAX3107)进行硬件扩展。
下面是一个典型的串口初始化流程图:
graph TD A[开始] --> B{选择串口号} B --> C[启用对应时钟] C --> D[配置GPIO为复用推挽] D --> E[设置波特率、数据位、停止位] E --> F{是否需要重映射?} F -- 是 --> G[开启AFIO时钟并配置MAPR寄存器] F -- 否 --> H[继续配置中断/DMA] G --> H H --> I[使能串口外设] I --> J[完成初始化]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报