STM32中Usart的使用
目录
一、USART简介
1.电平标准
2.通信接口
3.硬件电路
4.串口参数以及时序
5.串口时序
二、USART结构介绍
1.USART功能框图
编辑 1.1 功能引脚
1.2 数据寄存器
1.3 控制器
1.4 波特率发生器
1.5简化结构图
2.数据帧
一、USART简介
USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 是一种串行通信接口,用于实现设备之间的数据交换。它支持 同步模式和 异步模式,在 STM32 中最常用的是 异步串行通信(UART)模式。
- USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器 USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里
- 自带波特率发生器,最高达4.5Mbits/s
- 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
- 可选校验位(无校验/奇校验/偶校验)
- 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
- STM32F103C8T6 USART资源: USART1、 USART2、 USART3(USARRT1是APB2总线上的设备,其他的都是APB1总线)
1.电平标准

2.通信接口
- 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。
- 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发。
双工模式 | 解释 |
全双工 |
|
半双工 |
|
时钟特性 | 解释 |
异步 |
|
同步 |
|
电平特性 | 解释 |
单端信号 |
|
差分信号 |
|
3.硬件电路
- 简单双向串口通信有两根通信线(发送端TX和接收端RX)
- TX与RX要交叉连接 当只需单向的数据传输时,可以只接一根通信线
- 当电平标准不一致时,需要加电平转换芯片
当有独立供电的时候,VCC可以不连接。单设备1有供电,设备2没有供电的时候,就需要接VCC,用VCC给设备2供电。
4.串口参数以及时序
- 波特率:串口通信的速率,异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,串口数据包的基本组成中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。
- 起始位:标志一个数据帧的开始,固定为低电平,串口的空闲状态位高电平。数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。
- 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行。在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。
- 校验位:用于数据验证,根据数据位计算得来。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity)。
- 停止位:用于数据帧间隔,固定为高电平,为下一个起始位做准备。

![]() | ![]() |
5.串口时序








每一位的时间计算:1/波特率
硬件的话会自动执行
软件模拟:定时调用GPIO_ReadInputDataBit来读取每一位
二、USART结构介绍
1.USART功能框图
1.1 功能引脚
- TX:发送数据输出引脚。
- RX:接收数据输入引脚。
- SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
- nRTS:请求以发送(RequestToSend),n表示低电平有效。如果使能RTS流控制,当USART接收器准备好接收新数据时就会将nRTS变成低电平;当接收寄存器已满时,nRTS将被设置为高电平。该引脚只适用于硬件流控制。
- nCTS:清除以发送(ClearToSend),n表示低电平有效。如果使能CTS流控制,发送器在发送下一帧数据之前会检测nCTS引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。
- SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。
1.2 数据寄存器
第二个方框中的发送数据寄存器(TDR Transmit DR)和接收数据寄存器(RDR Receive DR)将发送或者接收的数据存储在这里,这两个寄存器占用同一个地址,在程序上,只表现为一个寄存器,就是数据寄存器DR(Data RRegister),但是实际硬件中,是分成两个寄存器,TDR只写,RDR只读,写操作的时候写到了TDR,读操作的从RDR中读出来。
下面的发送移位寄存器和接收移位寄存器。 发送移位寄存器的作用:把一个字节的数据一位一位的移出去,正好对应串口协议的波形的数据位。接收也是类似的。
发送移位寄存器和接收移位寄存器的工作原理:就是当写入0X55的数据时,即写入到TDR中,寄存器中就是二进制存储:01010101,此时硬件监测到我们写入的数据,就会检查当前发送移位寄存器是不是又数据正在移位,如果没有,这个0X55的二进制数据就会立刻全部移动到发送移位寄存器中,准备发送,当数据从TDR移动到移位寄存器时,会置一个标志TXE(TX Empty),发送寄存器空,检查这个标志位,如果置1,就可以在TDR中写如下一个数据。然后发送移位寄存器就会在下面发送控制的驱动下,向右移位(低位先行),然后一位一位的把数据输出到TX引脚。当数据移位完成后,新的数据就会再次自动的从TDR转移到发送移位寄存器里面。接收移位寄存器 同理。
1.3 控制器
第三个框中的发送控制和接收控制就是用来控制发送/接收移位寄存器的工作。
USART有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。使用USART之前需要向USART_CR1寄存器的UE位置1使能USART。发送或者接收数据字长可选8位或9位,由USART_CR1的M位控制。


为得到一个信号真实情况,需要用一个比这个信号频率高的采样信号去检测,称为过采样,这个采样信号的频率大小决定最后得到源信号准确度,一般频率越高得到的准确度越高,但为了得到越高频率采样信号越也困难,运算和功耗等等也会增加,所以一般选择合适就好。
接收器可配置为不同过采样技术,以实现从噪声中提取有效的数据。USART_CR1寄存器的OVER8位用来选择不同的采样采样方法,如果OVER8位设置为1采用8倍过采样,即用8个采样信号采样一位数据;如果OVER8位设置为0采用16倍过采样,即用16个采样信号采样一位数据。
USART的起始位检测需要用到特定序列。如果在RX线识别到该特定序列就认为是检测到了起始位。起始位检测对使用16倍或8倍过采样的序列都是一样的。该特定序列为:1110X0X0X0000,其中X表示电平任意,1或0皆可。
8倍过采样速度更快,最高速度可达fPCLK/8,fPCLK为USART时钟,采样过程见图8倍过采样过程。使用第4、5、6次脉冲的值决定该位的电平状态。

左边的硬件数据流控制:简称流控,就是如果发送设备发的太快,接收设备来不及处理,就会出现丢弃或者覆盖数据的现象,有了流控,就可以避免这个问题。流控有两个引脚,一个时nRTS(请求发送,是输出脚,告诉别人,我当前可不可以接收),另外一个是nCTS(清除胡发送,是出入脚,用于接收别人nRTS的信号),前面的n是低电平有效的意思。
1.4 波特率发生器
波特率发生器就是分频器,APB时钟进行分频,得到发送和接收移位的时钟fPCLKx(x=1或者x=2),USART挂载APB2,所以就是PCLK2的时钟,一般就是72M,在STM32F103C8T6中,其他的都挂载在APB1,所以是PCLK1的时钟,一般就是36M,然后对时钟进行分频,除以一个USARTDIV的分频系数。