首页 > 编程知识 正文

usart串口工作原理,uart串口通信时序图

时间:2023-05-04 12:47:18 阅读:174099 作者:2204

STM32 的 USART 简介

universalsynchronousasynchronousreceiverandtransmitter是一种可灵活与外部设备进行全双工数据交换的串行通信设备。 通用异步传输器(USART )与USART分开。 它基于USART删除了同步通信功能,只有异步通信。 要简单区分同步和异步,查看通信时不需要向外部提供时钟输出,我们平时使用的串行通信基本上是UART。

串行通信一般通过帧格式传输数据。 也就是说,是逐帧传输。 每帧都包含开始信号、数据信息、停止信息,可能还有检查信息。 USART是指对这些传输参数有具体的规定。 当然,并不是唯一的参数值。 许多参数值可以定制,但只能提高兼容性。 USART能够满足行业标准NRZ异步串行数据格式的外部设备要求,并使用小数波特率发生器提供多种波特率,使其应用更为广泛。 USART支持同步单向通信和半双工单线通信; 它还支持本地互联网LIN、智能卡(SmartCard )协议和红外数据协会(lrDA ) SIR ENDEC规范。

USART 支持使用 DMA,可进行高速数据通信。

USART用STM32“打印”程序信息的情况最多。 通常,在硬件设计时保留USART通信接口并连接到计算机。 调试器可以将一些调试器信息“打印”到计算机的串行调试助手工具,以了解程序是否正常运行,如果出现错误,则知道发生了什么错误。

USART 功能框图

1. 功能引脚

TX :发送数据输出端子。

RX :接收数据输入引脚。

SW_RX :数据接收端子仅用于单线和智能卡模式,为内部端子,没有具体的外部端子。

NTS :请求为发送(Request To Send ),n表示低电平有效。 启用RTS流控制后,当USART接收器准备接收新数据时,nRTS将变为低电平。 当接收寄存器已满时,nRTS将被设置为高电平。 此引脚仅适用于硬件流控制。

nCTS :清除并发送(Clear To Send ),n表示低电平有效。 如果CTS流控制有效,则发送机在发送下一帧数据之前检测nCTS管脚,指示可以从低电平发送数据,并在发送了当前数据帧后停止发送。 此引脚仅适用于硬件流控制。

slk :发射机时钟输出引脚。 此管脚仅适用于同步模式。

(此表可通过STM32F10x-中文数据手册中的STM32F103xx引脚定义此处。)

STM32F103RCT6系统控制器有三个USART和两个UART,其中USART1 和时钟来源于 APB2 总线时钟,其最大频率为72MHz,其他四个的时钟来源于 APB1 总线时钟,其最大频率为 36MHz。UART 只是异步传输功能,所以没有 SCLK、nCTS 和 nRTS 功能引脚。

2. 数据寄存器

USART数据寄存器(USART_DR )只有低 9 位有效,第9位数据是否有效取决于USART控制寄存器1 )、USART_Cr1 )的m位设定m位为0时表示8位的数据字长,m位为1时表示9位的数据字长,一般使用8位

USART_DR包含已发送或已接收的数据。 USART_DR实际上包含两个寄存器:仅发送的可写TDR和仅接收的可读RDR。 进行发送操作时,写入USART_DR的数据会自动保存在TDR中; 进行读取操作时,向USART_DR读取数据时会自动提取RDR数据。

TDR和RDR都位于系统总线和移位寄存器之间。 串行通信逐位传输,发送时将TDR的内容传输给发送移位寄存器,接下来逐位发送移位寄存器的数据,接收时在接收移位寄存器中依次保存接收到的位,然后传输给RDR。 USART支持DMA传输,可以实现高速数据传输。

3. 控制器

USART包括专用于发送的发射器、用于接收控制的接收器、唤醒单元和中断控制等。使用 USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART,UE 位用来开启供给给串口的时钟。发送或者接收数据字长可选 8 位或 9 位,由 USART

_CR1 的 M 位控制.(1个总开关UE;  两个小开关TE,RE; 一个位数控制为M,决定是否有校验码)

发送器

     当 USART_CR1 寄存器的发送使能位 TE 置 1 时,启动数据发送,发送移位寄存器的数据会在 TX 引脚输出,低位在前,高位在后。如果是同步模式 SCLK 也输出时钟信号。

     一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从最低位开始传输的;停止位是一定时间周期的高电平。停止位时间长短是可以通过 USART 控制寄存器 2(USART_CR2)的 STOP[1:0]位控制,可选 0.5 个、1 个、1.5 个和 2 个停止位。默认使用 1 个停止位。2 个停止位适用于正常 USART 模式、单线模式和调制解调器模式。0.5 个和 1.5 个停止位用于智能卡模式.

    当选择 8 位字长,使用 1 个停止位时,具体发送字符时序图见图 。

      过程:当发送使能位 TE 置 1 之后,发送器开始会先发送一个坚强的板栗(一个数据帧长度的高电平),接下来就可以往 USART_DR 寄存器写入要发送的数据。在写入最后一个数据后,需要等待 USART 状态寄存器(USART_SR)的 TC 位为 1,表示数据传输完成,如果 USART_CR1 寄存器的 TCIE 位置 1,将产生中断。

      在发送数据时,编程的时候有几个比较重要的标志位我们来总结下。

接收器

      如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART 接收,使得接收器在 RX 线开始搜索起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器数据移到 RDR 内,并把 USART_SR 寄存器的 RXNE 位置 1,同时如果 USART_CR2 寄存器的 RXNEIE 置 1 的话可以产生中断。

     在接收数据时,编程的时候有几个比较重要的标志位我们来总结下。

4. 小数波特率生成

 

     波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与比特率相等,以后不区分这两个概念。波特率越大,传输速率越快。

USART 的发送器和接收器使用相同的波特率。计算公式如下:

      其中,fPLCK 为 USART 时钟,(注意挂载的总线不同72 36M) USARTDIV 是一个存放在波特率寄存器(USART_BRR) 的 一个 无符 号定 点数。 其中 DIV_Mantissa[11:0] 位 定义 USARTDIV 的 整数 部分 , DIV_Fraction[3:0]位定义 USARTDIV 的小数部分。

     例如:DIV_Mantissa=24(0x18),DIV_Fraction=10(0x0A),此时 USART_BRR 值为 0x18A;那么 USARTDIV 的小数位 10/16=0.625(1111为2^4,每个刻度为1/16);整数位 24,最终 USARTDIV 的值为 24.625。

     如果知道 USARTDIV 值为 27.68,那么 DIV_Fraction=16*0.68=10.88,最接近的正整数为 11,所以 DIV_Fraction[3:0]为 0xB;DIV_Mantissa=整数(27.68)=27,即为 0x1B。

     波特率的常用值有 2400、9600、19200、115200。下面以实例讲解如何设定寄存器值得到波特率的值。

     我们知道 USART1 使用 APB2 总线时钟,最高可达 72MHz,其他 USART 的最高频率为 36MHz。我们选取 USART1 作为实例讲解,即 fPLCK=72MHz。为得到 115200bps 的波特率,此时:

 

    解得USARTDIV=39.0625 , 可 算 得 DIV_Fraction=0.0625*16=1=0x01 , DIV_Mantissa=39=0x27,即应该设置USART_BRR 的值为 0x271。

5. 校验控制

     STM32F103 系列控制器 USART 支持奇偶校验。当使用校验位时,串口传输的长度将是 8 位的数据帧加上 1 位的校验位总共 9 位,此时 USART_CR1 寄存器的 M 位需要设置为 1,即 9 数据位。将 USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验控制,奇偶校验由硬件自动完成。启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会见 USART_SR 寄存器的 PE 位置 1,并可以产生奇偶校验中断。使能了奇偶校验控制后,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。

6. 中断控制

    USART 有多个中断请求事件,具体见表 。

转载于:https://www.cnblogs.com/wenshinlee/p/8970528.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。