STM32 串口收发是操作同一个数据寄存器,为什么能实现全双工?
[color=rgba(0, 0, 0, 0.9)]串口是支持全双工工作的,也就是在收数据的时候同时也能发数据:
串口支持全双工一样,上面的问题自然都不存在,写的同时来了一个数据,自然发送的仍然是你写入寄存器的数据,后面读取的仍然是你接收到的数据,两者即使同时发生,也不会冲突。
数据寄存器拥有双重功能(读和写),因其实际上由两个寄存器组成,一个是发送寄存器(TDR),另一个是接收寄存器(RDR)。
TDR 提供了内部总线与输出位移寄存器之间的并行接口。
RDR 提供了内部总线与输入位移寄存器之间的并行接口。
看到这里应该就明白了,虽然表面上是一个寄存器 DR ,但其内部硬件实际上是由两个寄存器组成的,也就是说我们在执行读取和写入命令的时候,表面上软件操作的是一个寄存器,但实际上在硬件上是操作到了两个独立的寄存器 TDR 和 RDR,自然就不可能出现冲突了!
|