0%

9-2USART串口外设

USART简介

•USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器
•USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里
•自带波特率发生器,最高达4.5Mbits/s
•可配置数据位长度(8/9),包含奇偶校验位,一般不需要校验位选8位;需要校验位选9位。
•停止位长度(0.5/1/1.5/2),决定帧的间隔,一般是1位停止位。
•可选校验位(无校验/奇校验/偶校验),通常用无校验
•支持同步模式(多了时钟CLK的输出)、硬件流控制(准备信号,防止数据丢失)、DMA(串口可以使用DMA转运数据,减轻CPU负担)、智能卡、IrDA、LIN

•STM32F103C8T6 USART资源: USART1(APB2)、 USART2(APB1)、 USART3(APB1)

USART框图

USART框图
左上角的TX和RX,就是发送和接收的引脚。
发送数据寄存器(TDR)和接收数据寄存器(RDR)这2个寄存器占用同一个地址,在程序上,只表现为一个寄存器,就是数据寄存器(DR),在实际硬件中,分成2个寄存器,一个用于发送(TDR),一个用于接收(RDR),TDR只写,RDR只读。
进行写操作时,数据写入到TDR。进行读操作时,数据从RDR读出。
发送移位寄存器,把一个字节的数据一位一位地移出,正好对应串口协议的波形数据位。

例如,某刻给TDR写入了数据0x55,在寄存器中就是二进制数0101 0101,硬件检测到写入数据,会检查当前移位寄存器是否有数据在移位,如果没有,0101 0101会立刻全部移动到发送移位寄存器,准备发送,数据从TDR移动到发送移位寄存器时,会置TXR标志位(发送寄存器空),我们检查到这个标志位置1了,就可以在TDR写入下一个数据,注意当TXR置1时,数据并没有发送出去。发送移位寄存器会在发送器控制的驱动下,向右移位,然后一位一位地,把数据输出到TX引脚,向右移位正好和串口规定的低位先行一致,数据移动完成后,新数据再次从TDR移动到发送移位寄存器。

如果当前移位寄存器移位没有完成,TDR数据会进行等待,移位完成后,会立刻转移过来。

接收数据过程与发送类似。

发送器控制,用来控制发送移位寄存器工作;接收器控制,用来控制接收移位寄存器工作。
硬件数据流控(简称流控),nRTS是请求发送,是输出脚。
nCTS是清除发送,是输入脚,用于接受nRTS的信号。
CTS和RTS要交叉连接,用于判断是否可以发送数据。

唤醒单元可以用来实现多设备的功能,可以给串口分配一个USART地址,发送指定地址时,唤醒的设备开始工作。

USART基本结构

USART基本结构
波特率发生器,用于产生约定的通信速率,时钟来源是PCLK2或1。

数据帧

数据帧
最好选择9位字长,有校验。或者8位字长,无校验。这样每一帧的有效载荷都是1字节。
数据帧2

起始位侦测

起始位侦测
输入电路侦测到一个数据帧的起始位之后,就会以波特率的形式,连续采样一帧的数据,同时,从起始位开始,采样位置要对齐到正中间,只要第一位是对齐的,后面肯定都是对齐的。

输入部分电路对采样时钟进行细分,以波特率的16倍频率进行采样。

数据采样

数据采样

波特率发生器

•发送器和接收器的波特率由波特率寄存器BRR里的DIV确定
•计算公式:波特率 = fPCLK2/1 / (16 * DIV)
波特率发生器