STM32F103 学习笔记-21-串口通信(第4节)—串口发送和接收代码讲解(上)

STM32F10xxx 串口数量与对应引脚说明


一、串口总数与型号适配关系

STM32F10xxx系列的串口分为同步异步串口USART (支持硬件流控、同步通信)和异步串口UART(仅基础异步收发),不同子型号/闪存容量的串口资源数量不同,核心对应关系如下:

产品系列 子型号/闪存容量 串口外设资源 串口总数
STM32F101(基本型) 小/中容量(16~128KB) USART1、USART2、USART3 3个
STM32F101(基本型) 大容量(256~512KB) USART1、USART2、USART3、UART4、UART5 5个
STM32F102(USB型) 全容量 USART1、USART2、USART3 3个
STM32F103(主流型) 小/中容量(16~128KB) USART1、USART2、USART3 3个
STM32F103(主流型) 大容量(256~512KB) USART1、USART2、USART3、UART4、UART5 5个
STM32F105/F107(互联型) 全系列 USART1、USART2、USART3、UART4、UART5 5个

:你文档中重点提及的STM32F107xx 属于互联型产品,标配5个串口(3个USART+2个UART)。


二、各串口详细引脚定义

以下为每个串口的核心收发引脚(TX/RX) 、硬件流控/同步时钟引脚,以及STM32F1系列特有的AFIO引脚重映射配置,同时标注封装适配性。

1. USART1(APB2总线,全系列标配)

USART1是全系列型号都支持的串口,支持重映射,所有封装均引出基础收发引脚。

功能 默认复用(无重映射) 重映射配置(USART1_REMAP=1) 封装适配
TX(发送) PA9 PB6 48/64/100/144脚全支持
RX(接收) PA10 PB7 48/64/100/144脚全支持
CTS(清除发送) PA11 无重映射 48/64/100/144脚全支持
RTS(请求发送) PA12 无重映射 48/64/100/144脚全支持
CK(同步时钟) PA8 无重映射 48/64/100/144脚全支持

2. USART2(APB1总线,全系列标配)

USART2是全系列型号都支持的串口,支持部分重映射,重映射引脚仅在大封装引出。

功能 默认复用(无重映射) 部分重映射(USART2_REMAP=01) 封装适配
TX(发送) PA2 PD5 默认引脚48脚及以上支持;重映射仅100/144脚
RX(接收) PA3 PD6 默认引脚48脚及以上支持;重映射仅100/144脚
CTS(清除发送) PA0 PD3 默认引脚48脚及以上支持;重映射仅100/144脚
RTS(请求发送) PA1 PD4 默认引脚48脚及以上支持;重映射仅100/144脚
CK(同步时钟) PA4 PD7 默认引脚48脚及以上支持;重映射仅100/144脚

3. USART3(APB1总线,64脚及以上封装支持)

USART3支持无重映射、部分重映射、完全重映射三种模式,小封装无对应引脚。

功能 默认复用(无重映射) 部分重映射 完全重映射 封装适配
TX(发送) PB10 PC10 PD8 默认引脚64脚及以上;部分/完全重映射仅100/144脚
RX(接收) PB11 PC11 PD9 默认引脚64脚及以上;部分/完全重映射仅100/144脚
CTS(清除发送) PB13 PB13 PD11 默认引脚64脚及以上;完全重映射仅144脚
RTS(请求发送) PB14 PB14 PD12 默认引脚64脚及以上;完全重映射仅144脚
CK(同步时钟) PB12 PB12 PD10 默认引脚64脚及以上;完全重映射仅144脚

重映射配置:USART3_REMAP[1:0]=00(无重映射)/01(部分重映射)/11(完全重映射)。

4. UART4(APB1总线,仅大容量/互联型支持)

UART4仅支持异步基础收发,无硬件流控、同步时钟功能,无引脚重映射,仅100/144脚封装引出。

功能 固定引脚 说明
TX(发送) PC10 与USART3部分重映射TX引脚共用,不可同时使用
RX(接收) PC11 与USART3部分重映射RX引脚共用,不可同时使用

5. UART5(APB1总线,仅大容量/互联型支持)

UART5仅支持异步基础收发,无硬件流控、同步时钟功能,无引脚重映射,仅100/144脚封装引出。

功能 固定引脚 说明
TX(发送) PC12 无引脚复用冲突,独立使用
RX(接收) PD2 无引脚复用冲突,独立使用

三、关键使用注意事项

  1. 引脚重映射前提:使用重映射功能时,必须开启AFIO外设时钟,配置AFIO_MAPR寄存器对应的重映射位,同时将GPIO配置为复用推挽/输入模式。

  2. 封装限制

    • 48脚封装:仅可使用USART1、USART2,无法使用USART3/UART4/UART5;

    • 64脚封装:可使用USART1、USART2、USART3,无法使用UART4/UART5;

    • 100/144脚封装:大容量/互联型型号可使用全部5个串口。

  3. 时钟配置:USART1挂载在APB2总线,最高时钟72MHz;USART2/3、UART4/5挂载在APB1总线,最高时钟36MHz,波特率配置需匹配对应总线时钟。

  4. 引脚共用冲突:UART4的TX/RX与USART3部分重映射引脚共用,同一时刻只能选择一个外设使用对应引脚。


讲解:如何理解串口发送和接收中的"串口"

在嵌入式开发中,当我们谈论"串口发送和接收"时,这里的"串口"是一个综合概念,可以从三个层面来理解:

1. 核心:一个独立的"数据流水线"

你可以把每一个串口(如USART1、UART4)想象成MCU内部一条独立的、专门负责串行通信的"流水线"。这条流水线有固定的"入口"(TX引脚,用于发送数据)和"出口"(RX引脚,用于接收数据)。当你配置并使用USART1时,你就是在启用并操作这条名为"USART1"的流水线。

2. 硬件实体:引脚、时钟与寄存器

  • 引脚(Pin):这是流水线连接外部的物理接口。如上文表格所示,每个串口的TX、RX引脚是固定的(或可通过重映射改变)。你必须正确地将这些引脚连接到外部设备(如USB转串口模块、传感器等)。

  • 时钟(Clock):流水线的工作节拍。不同的串口挂载在不同的总线(APB1/APB2)上,时钟频率不同。配置波特率时,必须基于这个时钟来计算,否则数据传输速度会出错。

  • 控制寄存器:你是流水线的调度员,通过读写一系列寄存器来"下达指令",例如:开启流水线、设置数据格式(波特率、数据位、停止位等)、查询流水线状态(数据是否准备好发送/接收)、以及实际读写数据。

3. 软件配置:让流水线工作起来

在代码中,"使用串口"本质上就是按照以下步骤配置和操作这条流水线:

  • 步骤一:选对流水线 ------根据你的芯片型号和封装(见上文第一部分),确定你有几个可用的串口(流水线),并选择一个来使用(例如USART2)。

  • 步骤二:接通水管 ------根据第二部分的引脚定义,将选定的串口TX、RX引脚配置为复用功能模式,并正确连接到外部电路。如果需要,还要配置重映射来改变引脚位置。

  • 步骤三:设置流速和规格------通过寄存器,设置这条流水线的通信参数:波特率(水流速度)、数据位、校验位、停止位(数据包的规格)。

  • 步骤四:启动与操作------开启串口,然后通过"发送寄存器"将数据放入流水线发送出去,或从"接收寄存器"读取从流水线送进来的数据。

相关推荐
Cat_Rocky2 小时前
docker简单学习
学习·docker·容器
qingwufeiyang_5302 小时前
Mybatis-plus学习笔记1
笔记·学习·mybatis
weifengdq2 小时前
SJA1124 SPI转4路LIN STM32 测试笔记
stm32·spi·nxp·lin·sja1124·spi4lin
bingd012 小时前
慕课网、CSDN、菜鸟教程…2026 国内编程学习平台实测对比
java·开发语言·人工智能·python·学习
史蒂芬_丁2 小时前
STM32平台原子操作详解:原理与实践
stm32·单片机·嵌入式硬件
ElePower95272 小时前
基本和复合逻辑运算
嵌入式硬件
Sophie_U2 小时前
【Agent开发速成笔记】一、从0到1基础Python学习
笔记·python·学习·agent·智能体
Fanfanaas2 小时前
Linux 系统编程 进程篇 (三)
linux·运维·服务器·c语言·单片机·学习
半壶清水2 小时前
[软考网规考点笔记]-局域网之VLAN
网络·笔记·网络协议·tcp/ip