USART
上文知道了,我们USART是属于全双工异步通信通用同步和异步收发器,并且可以设置单线半双工模式
通用同步异步收发器 (USART) 能够灵活地与外部设备进行全双工数据交换,简单的说就是USART是可以进行双工通信的,USART通过小数波特率发生器提供了多种波特率
首先我们看USART的完整框图
1:为什么可以实现双工通讯
从图中我们可以看出,在USART中,发送和接收各拥有一个移位寄存器
移位寄存器是干嘛的?
移位寄存器是一种存储器,存在里边的数据可以从低位向高位移动或从高位向低位移动。
在USART里的作用,可以理解为先把数据放在TDR和RDR是一个数据缓冲器,里面存着数据,
移位寄存器就是负责与外部设备一个一个bit传输
接收数据
移位寄存器先一个位一个位的接收外部设备的内容(一般8bit),再一次性的将内容传入缓冲器
发送数据
数据缓存器先将数据一次性的发送给移位寄存器,移位寄存器再一个位一个位发送给外部设备
值得注意:缓冲器与移位寄存器和移位寄存器与外部设备之间的数据传输都是硬件自动完成的,我们只需要配置相应的寄存器即可,传输的速度与波特率相关!
因为存在两个移位寄存器,所以可以异步传输(发送和接收不同时完成),而SPI的发送和接收是公用一个移位寄存器,这就导致在发送的时候也一边接收的数据
2:小数波特率发生器
这个通过控制寄存器来设置具体的值
3:框图中的状态标志位
标志位对应的内容,消除标志位对应的映射关系如下
- CTS:CTS 标志 (CTS flag)
如果 CTSE 位置 1,当 nCTS 输入变换时,此位由硬件置 1。通过软件将该位清零(通过向
该位中写入 0)。如果 USART_CR3 寄存器中 CTSIE=1,则会生成中断。
0:nCTS 状态线上未发生变化
1:nCTS 状态线上发生变化
注意:该位不适用于 UART4 和 UART5
- LBD:LIN 断路检测标志 (LIN break detection flag)
检测到 LIN 断路时,该位由硬件置 1。通过软件将该位清零(通过向该位中写入 0)。如果
USART_CR2 寄存器中 LBDIE = 1,则会生成中断。
0:未检测到 LIN 断路
1:检测到 LIN 断路
注意:如果 LBDIE=1 ,则当 LBD=1 时生成中断
- TXE:发送数据寄存器为空 (Transmit data register empty)
当 TDR 寄存器的内容已传输到移位寄存器时,该位由硬件置 1。如果 USART_CR1 寄存器
中 TXEIE 位 = 1,则会生成中断。通过对 USART_DR 寄存器执行写入操作将该位清零。
0:数据未传输到移位寄存器
1:数据传输到移位寄存器
注意:单缓冲区发送期间使用该位
- TC:发送完成 (Transmission complete)
如果已完成对包含数据的帧的发送并且 TXE 置 1,则该位由硬件置 1。如果 USART_CR1 寄存
器中 TCIE = 1,则会生成中断。该位由软件序列清零(读取 USART_SR 寄存器,然后写入
USART_DR 寄存器)。TC 位也可以通过向该位写入‘0’来清零。建议仅在多缓冲区通信
时使用此清零序列。
0:传送未完成
1:传送已完成
- RXNE:读取数据寄存器不为空 (Read data register not empty)
当 RDR 移位寄存器的内容已传输到 USART_DR 寄存器时,该位由硬件置 1。如果
USART_CR1 寄存器中 RXNEIE = 1,则会生成中断。通过对 USART_DR 寄存器执行读入
操作将该位清零。RXNE 标志也可以通过向该位写入零来清零。建议仅在多缓冲区通信时使
用此清零序列。
0:未接收到数据
1:已准备好读取接收到的数据
- IDLE:检测到空闲线路 (IDLE line detected)
检测到空闲线路时,该位由硬件置 1。如果 USART_CR1 寄存器中 IDLEIE = 1,则会生成中
断。该位由软件序列清零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。
0:未检测到空闲线路
1:检测到空闲线路
注意:直到 RXNE 位本身已置 1 时(即,当出现新的空闲线路时) IDLE 位才会被再次置 1
- ORE:上溢错误 (Overrun error)
在 RXNE = 1 的情况下,当移位寄存器中当前正在接收的字准备好传输到 RDR 寄存器时,该
位由硬件置 1。如果 USART_CR1 寄存器中 RXNEIE = 1,则会生成中断。该位由软件序列清
零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。
0:无上溢错误
1:检测到上溢错误
注意:当该位置 1 时, RDR 寄存器的内容不会丢失,但移位寄存器会被覆盖。如果 EIE 位置 1 ,
则在进行多缓冲区通信时会对 ORE 标志生成一个中断
- PE:奇偶校验错误 (Parity error)
当在接收器模式下发生奇偶校验错误时,该位由硬件置 1。该位由软件序列清零(读取状态
寄存器,然后对 USART_DR 数据寄存器执行读或写访问)。将 PE 位清零前软件必须等待
RXNE 标志被置 1。
如果 USART_CR1 寄存器中 PEIE = 1,则会生成中断。
0:无奇偶校验错误
1:奇偶校验错误