USART外设介绍
- USART (Universal Synchronous/AsynchronousReceiver/Transmitter)通用同步/异步收发器
- USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里
- 自带波特率发生器,最高达4.5Mbits/s
- 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
- 可选校验位(无校验/奇校验/偶校验)
- 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
- STM32F103C8T6 USART资源:USART1、USART2、USART3
注意:同步时钟SCLK只支持输出不支持输入,因此一般用作异步收发器
USART基本框图
写数据:通过写操作,将数据写入发送数据寄存器TDR,当检测到有数据写入TDR时,硬件自动检测发送移位寄存器是否有数据,没有数据的话自动移动到发送移位寄存器。当数据移动到发送移位寄存器时,TXE位置1,这样就可以在TDR写入下一个数据。发送移位寄存器在发送控制器的控制下,将数据发送到TX
读数据:接收到的RX的数据在接收器的控制下,一位一位的写入接收移位寄存器,低位先行,数据移动完后会自动移动到接收数据寄存器,当RXNE接受数据寄存器非空 标志位为1时,数据就可以使用读操作读走。
硬件数据流控: nRTS(negative Request toSend)是输出脚,低电平有效。可以接到另一个串口设备的nCTS(negative Clear to Send)接收脚,它用于接收方向发送方发送控制信息。当一个设备接收数据效率太低时,可以用nRTS发送1,这样表示暂停发送。
唤醒单元:实现串口挂载多设备。可以填入一个串口地址,表示唤醒该串口,一般不常用
波特率发生器:本质上是分配器,但是可以实现更精准的分配,分配系数可以是小数。
数据帧
起始帧检测设计【读数据】
为了保证每一次采样的位置刚好都在位的正中间,串口通信专门设置了起始位帧检测,即在开始的一帧进行16分频检测,如果检测到下降沿0信号后,分别在3,5,7,8,9,10继续检测,必须保证每3位中有俩个0才算检测到,否则放弃之前捕获的下降沿信号重新捕获进行检测。当通过起始帧检测后,往后的每一帧都是在16分频后第7,8,9次进行采样,此时正好保证了在位中心进行采样。
波特率发生器
16分频正好对应前面提到的每一帧数据都要分为16次来采样以保证采样的位置对齐位中心