老铁爱金衫 2025-10-26 10:40 采纳率: 98.9%
浏览 45
已采纳

STM32F103最多支持几个串口?

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:仅提供基本异步功能,不支持同步模式。

    这些串口的物理引脚分配依赖于芯片的具体封装形式。例如:

    芯片型号封装类型可用串口数量支持的串口备注
    STM32F103ZET6LQFP1005USART1~3, UART4~5全部串口均可使用
    STM32F103VET6LQFP1005USART1~3, UART4~5同ZET6配置
    STM32F103C8T6LQFP483USART1~3无UART4/5引脚
    STM32F103RBT6LQFP644USART1~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. 实际应用中的常见问题分析

    在项目实践中,以下问题频繁出现:

    1. 未开启AFIO时钟即尝试重映射,导致配置无效。
    2. 误认为小封装芯片支持全部5个串口,结果发现UART4/5无对应引出引脚。
    3. 多个串口共用NVIC中断通道时未正确配置优先级,引发中断抢占异常。
    4. DMA传输未对齐缓冲区边界,造成数据丢失或HardFault。
    5. 波特率计算误差过大,尤其是在72MHz主频下未精确匹配标准值。
    6. 未处理接收溢出(ORE)、帧错误(FE)等状态标志,影响通信稳定性。
    7. 使用串口下载程序后未禁用BOOT引脚相关功能,导致启动异常。
    8. 低功耗设计中忽略UART4/5的唤醒能力,错失节能机会。
    9. printf重定向至串口时未实现_nonreturning函数属性,干扰RTOS调度。
    10. 多任务环境中未加互斥锁,导致串口发送混乱。

    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[完成初始化]
        
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月27日
  • 创建了问题 10月26日