目录
USART的简图和简单理解
不考虑帧格式的收发过程
考虑帧格式
详细过程
接收过程
USART的简图和简单理解
CPU是怎么控制USART的?——控制USART内部的寄存器
在参考手册内部有USART内部的图,但是过于复杂,先看简化的图,搞懂基本原理。
不考虑帧格式的收发过程
考虑帧格式
先看看寄存器
这个数据寄存器有两个,一个是TDR一个是RDR那他们为什么指向同一块物理地址?
官方并没有披露,推测是在控制地址总线的时候他的读写方向不一致,就把读写两个不同的方向看成两个不同的寄存器了。
详细过程
主要过程:
CPU把数据通过数据总线发送到USART内部,通过发送数据寄存器(TDR)暂存。
TDR并行数据移动到发送移位寄存器(USART自己做的),在RCC的驱使下逐位串行移动到接收方。
万一发送移位寄存器在发送的时候,又在TDR写入数据了怎么办?
因此就有了状态寄存器
TXE(Transmit Data Register Empty):TDR空了,可以写下一个数据了。
TC(Transmission Complete):整帧发完了,包括移位寄存器也空了。
要等TXE决定了能不能把数据是否为空,TC决定了数据是否发完。
| 阶段 | TXE | TC | 用户能做什么 |
|---|---|---|---|
| 刚写入TDR | 0 | 0 | 等待 |
| 搬到移位寄存器 | 1 | 0 | 可以写下一个 |
| 正在发送 | 1 | 0 | 可以写下一个 |
| 整帧发完 | 1 | 1 | 可以关USART/切模式 |
接收过程
他也有一个寄存器进行辅助。
RXNE(Read data register Not Empty):接收数据寄存器非空。
RXNE=1 表示 RDR 里有数据了,用户可以读了。
| 阶段 | RXNE | 说明 |
|---|---|---|
| 正在接收 | 0 | RDR空,还没数据 |
| 收满一帧 | 1 | RDR有数据了,可以读 |
| 用户读RDR | 0 | 数据被取走,RXNE清零 |