【stm32】USART串口概念详解
USART框图解释
-
发送移位寄存器—TX,RX—接收移位寄存器
-
发送数据寄存器和接收数据寄存器占用同一个地址,在程序上只表现为一个寄存器,就是数据寄存器DR,实际硬件中分成两个,一个用于发送的TDR,一个用于接收的RDR,TDR只写,RDR只读
-
当进行写操作时,数据就写到TDR,当进行读操作时,数据就从RDR读出
-
发送移位寄存器,把数据一位一位的移出去,接收移位寄存器,把数据一位一位的读进来
-
硬件检测到你忘tdr写入了数据,就会检查,当前移位寄存器是不是有数据正在移位,如果没有,数据01010101就会立刻全部移动到移位寄存器,准备发送,当数据从tdr移动到移位寄存器时,会置一个标志位,叫TXE(TX Empty),发送寄存器空,检查这个标志位,如果置1,就可以在TDR写入下一个数据,注意,当TXE标志位置1时,数据还没有发送出去,只要数据从TDR转移到发送移位寄存器了,TXE就会置1,就可以写入新的数据了,然后发送移位寄存器就会在下面,这里的发生器控制的驱动下,向右移位,然后一位一位的,把数据输出到TX引脚,当数据移位完成后,新的数据就会再次自动的从TDR转移到发送移位寄存器里,如果移位没有完成,TDR的数据就会等待,一旦移位完成,就会立刻转移过来
-
数据从RX引脚通向接收移位寄存器,在接收器控制的驱动下,一位一位的读取RX电平,先放在最高位,然后向右移,移位8次,就能接受一个字节,同样,因为串口协议规定是低位先行,所以接收移位寄存器是从高位往低位这个方向移动,当一个字节移位完成之后,一个字节的数据就会整体地一下子转移到接收数据寄存器RDR里来,转移的过程中也会置一个标志位,RXNE,接收数据寄存器非空,当检测到EXNE置1之后,就可以把数据读走了,当数据从移位寄存器转移到RDR时,就可以直接移位接收下一帧数据了,这就是USART外设整个的工作流