目录
串行通信基础
串行异步通信数据格式
USART介绍
USART的主要特性
USART的功能
USART的通信时序
USART的中断
串行通信基础
在串行通信中,参与通信的两台或多台设备通常共享一条物理通路。发送者依次逐位发送一串数据信号,按一定的约定规则被接收者接收。由于串行端口通常只是规定了物理层的接口规范,所以为确保每次传送的数据报文能准确到达目的地,使每一个接收者能够接收到所有发向它的数据,必须在通信连接上采取相应的措施。
串行异步通信数据格式
无论是RS-232还是RS-485,均可采用通用异步收发数据格式。 通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)通信的数据格式如图
串行同步同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。 串行同步同步通信传送的多字节数据由于中间没有空隙,因而传输速度较快,但要求有准确的时钟实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。串行同步收发通信的数据格式如图
STM32的USART工作原理
通信是嵌入式系统的重要功能之一。嵌入式系统中使用的通信接口有很多,如UART、SPI、I2C、USB和CAN等。其中,UART是最常见、最方便、使用最频繁的通信接口。在嵌入式系统中,很多微控制器或者外设模块都带有UART接口
USART介绍
通用同步/异步收发器可以说是嵌入式系统中除了GPIO外最常用的一种外设。USART常用的原因不在于其性能超强,而是因为USART简单、通用。自Intel公司20世纪70年代发明 USART以来,上至服务器、PC之类的高性能计算机,下到4位或8位的单片机几乎都配置了USART接口,通过USART,嵌入式系统可以和绝大多数的计算机系统进行简单的数据交换。USART接口的物理连接也很简单,只要2~3根线即可实现通信。 SM32F103微控制器的小容量产品有2个USART,中等容量产品有3个USART,大容量产品有3个USART+2个UART。
USART的主要特性
USART主要特性如下:
(1)全双工,异步通信。
(2)NRZ标准格式。
(3)分数波特率发生器系统。发送和接收共用的可编程波特率,最高达10.5Mb/s。
(4)可编程数据字长度(8位或9位)。
(5)可配置的停止位(支持1或2个停止位)。
(6)LIN主发送同步断开符的能力以及LIN从检测断开符的能力。当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符。
(7)发送方为同步传输提供时钟。
(8)IRDA SIR编码器/解码器。在正常模式下支持3/16位的持续时间。
(9)智能卡模拟功能。智能卡接口支持ISO7816-3标准中定义的异步智能卡协议;智能卡用到0.5和1.5个停止位。
(10)单线半双工通信。
(11)可配置的使用DMA的多缓冲器通信。在SRAM中利用集中式DMA缓冲接收/发送字节。 (12)单独的发送器和接收器使能位。
(13)检测标志:接收缓冲器满;发送缓冲器空、传输结束标志。
(14)校验控制:发送校验位、对接收数据进行校验。
(15)四个错误检测标志:溢出错误、噪声错误、帧错误、校验错误。
(16)10个带标志的中断源:CTS改变、LIN断开符检测、发送数据寄存器空、发送完成、接收数据寄存器满、检测到总线为空闲、溢出错误、帧错误、噪声错误、校验错误。
(17)多处理器通信:如果地址不匹配,则进入静默模式。
(18)从静默模式中唤醒:通过空闲总线检测或地址标志检测。
(19)两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲。
USART的功能
任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输入。通过过采样技术区别数据和噪声,从而恢复数据。 TX:发送数据串行输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式中,此I/O被同时用于数据的发送和接收。
(1)总线在发送或接收前应处于空闲状态。
(2)一个起始位。
(3)一个数据字(8或9位),最低有效位在前。
(4)0.5、1.5、2个的停止位,由此表明数据帧结束。
(5)使用分数波特率发生器-12位整数和4位小数的表示方法。
(6)一个状态寄存器(USART_SR)。
(7)数据寄存器(USART_DR)。
(8)一个波特率寄存器(USART_BRR),12位的整数和4位小数。
(9)一个智能卡模式下的保护时间寄存器(USART_GTPR)。 在同步模式下需要引脚CK:发送器时钟输出。此引脚输出用于同步传输的时钟。这可以用来控制带有移位寄存器的外部设备(如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式下,CK可以为智能卡提供时钟。
在IrDA模式里需要下列引脚:
(1)IrDA_RDI:IrDA模式下的数据输入。
(2)IrDA_TDO:IrDA模式下的数据输出。
在硬件流控模式下需要以下引脚:
(1)nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
(2)nRTS:发送请求,若是低电平,表明USART准备好接收数据。
1. 波特率控制
波特率控制即图下部虚线框的部分。通过对USART时钟的控制,可以控制USART的数据传输速度。 USART外设时钟源根据USART的编号不同而不同:对于挂载在APB2总线上的USART1,它的时钟源是fpcLk2;对于挂载在APB1总线上的其他USART(如 USART2和USART3等),它们的时钟源是fpcLk1。以上USART外设时钟源经各自USART的分频系数——USARTDIV分频后,分别输出作为发送器时钟和接收器时钟,控制发送和接收的时序。 通过改变USART外设时钟源的分频系数USARTDIV,可以设置USART的波特率。
2. 收发控制
收发控制即图的中间部分。该部分由若干个控制寄存器组成,如USART控制寄存器(Control Register)CR1、CR2、CR3和USART状态寄存器(Status Register)SR等。
3. 数据存储转移
数据存储转移即图8-3 上部灰色的部分。它的核心是两个移位寄存器:发送移位寄存器和接收移位寄存器。这两个移位寄存器负责收发数据并进行并串转换。
1)USART数据发送过程 当USART 发送数据时,内核指令或DMA外设先将数据从内存(变量)写入发送数据寄存器(TDR)。然后,发送控制器适时地自动把数据从TDR加载到发送移位寄存器,将数据一位一位地通过Tx引脚发送出去。
2)USART数据接收过程 USART数据接收是USART数据发送的逆过程。
USART的通信时序
可以通过编程USART_CR1寄存器中的M位,选择8或9位字长。 在起始位期间,TX引脚处于低电平,在停止位期间,TX引脚处于高电平。空闲符号被视为完全由1组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位。断开符号被视为在一个帧周期内全部收到0。在断开帧结束时,发送器再插入1或2个停止位(1)应答起始位。发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。
USART的中断
STM32F103系列微控制器的USART主要有以下各种中断事件:
(1)发送期间的中断事件包括发送完成(TC)、清除发送(CTS)、发送数据寄存器空 (TXE)。
(2)接收期间的中断事件包括空闲总线检测(IDLE)、溢出错误(ORE)、接收数据寄存器非空(RXNE)、校验错误(PE)、LIN断开检测(LBD)、噪声错误(NE,仅在多缓冲器通信)和帧错误(FE,仅在多缓冲器通信)。 如果设置了对应的使能控制位,这些事件就可以产生各自的中断
串口操作的常用HAL 函数