15.USART 串口发送:一个字节从内存到波形的 “变形记”

USART串口发送机制解析

数据从内存到寄存器的传递

在嵌入式系统中,当CPU执行USART数据寄存器写入操作时,数据通过总线(如APB总线)从内存传输到USART数据寄存器(USART_DR)。这一步需要USART外设已完成初始化配置,包括时钟使能、引脚复用、波特率设置和数据格式(如8N1)等。

c 复制代码
uint8_t data = 0x55;
USART1->DR = data;  // 数据写入USART数据寄存器

发送缓冲区的角色

写入USART_DR的数据首先进入发送数据缓冲区(TDR)。此时USART的发送数据空标志(TXE)会被清零,表示缓冲区中有数据待处理。当数据从TDR转移到移位寄存器后,TXE标志会自动置1,表示可以接收下一个字节。

移位寄存器的工作流程

移位寄存器负责将字节数据按位分解为比特流。数据按照"低位先发"的规则逐位输出。以0x55(二进制01010101)为例,发送顺序为b0→b1→b2→b3→b4→b5→b6→b7,即1→0→1→0→1→0→1→0。

串口帧的组成与输出

串口通信的一帧数据包含起始位、数据位和停止位。以8N1格式为例:

  • 起始位:1个低电平(逻辑0)
  • 数据位:8个比特(按低位先发顺序)
  • 停止位:1个高电平(逻辑1)

对于0x55,完整的帧结构为: 起始位(0)→b0(1)→b1(0)→b2(1)→b3(0)→b4(1)→b5(0)→b6(1)→b7(0)→停止位(1)

移位寄存器根据波特率定时(如115200bps下每个比特持续8.68μs)将帧数据输出到TX引脚,形成连续的波形。

状态标志的意义

  • TXE(Transmit Data Register Empty):表示发送缓冲区空闲,可以写入新数据。
  • TC(Transmission Complete):表示一帧数据(包括停止位)已完全发送。

在连续发送场景中,通常通过TXE标志判断是否可以写入下一字节;而在关闭串口或确认发送结束时,需检查TC标志。

数据传输的完整路径

数据从内存到波形输出的完整流程为: SRAM→CPU→USART_DR→TDR→移位寄存器→串口帧→TX引脚波形

理解这一流程有助于调试串口通信问题,并深入掌握嵌入式外设的自动化工作机制。