一、概念
USART 通用 同步异步收发器,全双工数据交换,利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和irDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTX/RTS)操作。它还允许多处理器通信 。 用多缓冲器配置的DMA方式,可以实现高速数据通信。
STM32 有3个USART接口(通用同步/异步接收、发送端口,比UART增强了同步功能)
STM32的USART串口,采用分数波特率发生器,最高速率=72M/16=4.5Mb/S
- 全双工异步通信
- 单线半双工通信
- 使用DMA的可配置的多缓冲通信
- 单独的发送器和接收器使能位
- 检测标示 接收缓冲器满,发送缓冲器空 传输结束标志
- 校验控制 发送检验位 对接收数据进行检验(奇偶校验)
- 四个错误检测标志
- 10个带标志的中断源
任何USART通信,需要用到
2个对外连接的引脚:RxD、TxD
SCLK:发送器时钟输出(同步模式用到)
在IrDA模式里需要下列引脚:
IrDA_RDI:IrDA模式下的数据输入
IrDA_TDO:IrDA模式下的数据输出
调制解调模式中需要:
nCTS:清除发送
nRTS:发送请求
数据接收过程:
数据发送过程:
异步串行通信协议需要定义以下5个内容:
- 起始位
- 数据位(8、9)
- 奇偶校验位(9位包含)
- 停止位(1、1.5、2周期)
- 波特率设置(速度)
范围解析:
应用场合:
- 芯片间近距离通信
- 与PC机通信
- 模块间远距离通信
芯片通信连接示意图:
PC机通信连接示意图:
RS-485接口最大传输距离可达3000米,最高传输速率10Mbps:
二、数据发送过程
USART框图:
1.USART特征描述
通过USART_CR1寄存器M位,选择成8位或9位。起始位期间,TX脚处于低电平,在停止位期间处于高电平。
空闲符号被视为完全由“1”组织的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位。
断开符号被视为在一个帧周期内全部收到“0”(包括停止位期间也是0)。在断开帧结束时,发送器再插入1或2个停止位来应答起始位。
发送和接收由一共用的波特率发生器鸡翅。
2.USART寄存器描述
(1)状态寄存器(USART_SR)
(2)数据寄存器(USART_DR)
位8:0
DR[8:0]:数据值
包含了发送或接收的数据。由于它是由两个寄存器组成的,一个
接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供
器之间的并行接口(参见图1)。RDR寄存器提供了输入移位寄
接口。
当使能校验位(USART_CR1种PCE位被置位)进行发送时,写
度不同,MSB是第7位或者第8位)会被后来的校验位该取代。
当使能校验位进行接收时,读到的MSB位是接收到的校验位。
(3)波特率寄存器(USART_BRR)
位31:16 保留位
位15:4 DIV_Mantissa[11:0]:DIV的小数部分
这12位定义了USART分频器除法因子(DIV)的小数部分
位3:0 DIV_Fraction[3:0]
这4位定义了USART分频器除法因子(DIV)的整数部分
(4)控制寄存器1(USART_CR1)
数据发送过程:
(i)在USART_CR1 UE位使能(1);
(ii)编程USART_CR1的M位来定义字长;
(iii)在USART_CR2中定义STOP停止位;
如果采用多缓冲器通信,配置DMA使能;
(iv)设置USART_CR1的TE位,发送一个空闲帧作为第一次数据发送;
(v)利用USART_BRR寄存器选择要求的波特率;
(vi)把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。
在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7.
数据接收过程:
(i)在USART_CR1 UE位使能(1);
(ii)编程USART_CR1的M位来定义字长;
(iii)在USART_CR2中定义STOP停止位;
如果采用多缓冲器通信,配置DMA使能;
(iv)设置USART_CR1的RE位,激活接收器,使它开始寻找起始位;
RXNE位被置位,它表明移位寄存器的内容被转移到RDR。如果RXNEIE位被设置,产生中断。
在接收期间如果检测到帧错误,噪音或溢出错误,(USART_SR)错误标志将被置起。
(5)控制寄存器2(USART_CR2)
(6)控制寄存器3(USART_CR3)
(7)保护时间和预分频寄存器(USART_GTPR)
三、引脚图示
我用的是STM32C8T6最小板,接口如下:
STM32通过PA9、PA10连接MAX3232(或SP)
USART功能图:
STM32 有3个USART接口(通用同步/异步接收、发送端口,比UART增强了同步功能)
STM32的USART串口,采用分数波特率发生器,最高速率=72M/16=4.5Mb/S
STM32 有3个USART接口(通用同步/异步接收、发送端口,比UART增强了同步功能)
STM32的USART串口,采用分数波特率发生器,最高速率=72M/16=4.5Mb/S
我用的是STM32C8T6最小板,接口如下:
STM32通过PA9、PA10连接MAX3232(或SP)
每个USART有7个设置寄存器,
- 状态寄存器:USART_SR
- 数据寄存器:USART_DR
- 波特率寄存器:USART_BRR
- 控制寄存器1:USART_CR1
- 控制寄存器2:USART_CR2
- 控制寄存器3:USART_CR3
- 保护时间和预分频寄存器:USART GTPR
USART功能图: