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引脚波形
理解这一流程有助于调试串口通信问题,并深入掌握嵌入式外设的自动化工作机制。