UART,USART讲解

对于USART,想必很多人想知道和UART的区别。其实看英文名就可以理解。

USART:universal synchronous asynchronous receiver and transmitter

S代表同步,A代表异步

通用同步/异步收/发器支持同步/异步。

UART:通(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。

但是我们用串口往往是使用异步全双工通信,所以两者在使用的时候基本差不多,至于USART的同步主要是发出时钟信号,但是只支持时钟输出,不支持时钟输入,所以往往用来模仿一些协议,例如:SPI当中的主机发出,不能表示从机接收有局限性,但是基于硬件的成熟,往往这种通信协议我们用专属的硬件外设或者是模拟协议。

一 UART串口通信

名称

引脚

双工

时钟

电平

设备

USART

TX、RX

全双工

异步

单端

点对点

介绍:是一种应用十分广泛的通讯接口,串口成本低、相较于I2C,SPI这种而言非常容易使用、通信线路简单,可实现两个设备的互相通信 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力。例如我们常用的蓝牙模块就是一种很简单的串口通信,一般来说可以看引脚分辨是上面通信协议。

对于串口通信只要记住下面这张图,就已经理解一大半

二串口参数及时序介绍:

1.波特率:传输数据的速率,决定了每隔多久发送一位,每隔多久接收一位。

这里在通信上解释一下:波特率和比特率(bit代表一位二进制)

波特率:每秒传输码元的个数,单位:码元/s,也可以说;Baud;(码元就是传输的数据)

比特率:每秒传输的比特数,    单位:bit/s  ,或bps;

在二进制(像单片机下),一个码元就是一个bit,此时波特率就等于比特率,所以单片机当中常常混说,

在多进制条件下,两者不一样

2.起始位:标志一个数据帧的开始,固定为低电平。 

    因为串口通信时候,空闲状态为高电平,所以要用一个低电平打破,产生下降沿,代表通信的开始。

后面几种通信条件差不多。

其次,在接收的过程中,由于空闲状态为高电平所以,我们一般选择上拉输入,或者浮空输入

不能使用下拉输入来保证空闲状态为高电平。

在发送的过程中,一般也是选择复用开漏输出(需要移交使用权给串口,其次保证空闲状态为高电平)

3.数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

我们将要传输的数据转换为2进制,看下图:

4.校验位:用于数据验证,根据数据位计算得来

主要分为以下三种方式:

1.无校验:没有采用校验方法,所以对应数据帧就是只有10位

 2.奇校验;计算传输数据中 1的个数,包含校验位,为奇数。

当数据位1的个数位偶数,校验位就是1,使得整个数据1的个数为奇数;

当数据位1的个数位奇数,校验位就是0,使得整个数据1的个数为奇数;

3.偶校验;计算传输数据中 1的个数,包含校验位,为偶数。

当数据位1的个数位偶数,校验位就是0,使得整个数据1的个数为偶数;

当数据位1的个数位奇数,校验位就是1,使得整个数据1的个数为偶数;

 4.CRC校验:后面会介绍,检出率比奇偶校验高得多。

5.停止位:用于数据帧间隔,固定为高电平

将电平拉回空闲状态,代表通信的结束,同时也是为下次通信开始的准备。

6.数据帧就是包含开始位,数据位,校验位,和结束位的整个数据。

当没有校验时,数据帧时10位。

当没有校验时,数据帧时11位。

我们也可以在根据波特率多长时间需要什么高低电平,自己通过GPIO/IO口拉高拉低,完成模拟的过程,这也是可以的。

三 USART硬件外设:

1.功能介绍

  USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里

2.自身具备波特率发生器,最高达4.5Mbits/s

相当于一种预分频器,从主频分取得到波特率。

3.可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)

8/9主要取决于数据长度是否包含校验位,停止长度是指我们在发送完停止信号以后会停留的时间间隔

4.可选校验位(无校验/奇校验/偶校验) 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

一般选择无校验。

硬件流控制,就是指当A设备发送数据太快,B来不及处理就会导致数据被覆盖丢失等等。我们通过硬件连线控制,当B来不及接受就会通过线发送停止信号,当准备好以后就会重新发送开始信号。

5.STM32F103C8T6 USART资源: USART1(APB2总线)、 USART2 ,3(APB1总线)

使用时候需要注意不要开启错总线。

看一下结构图:

主体分为两部分就是:

上半部分主要是针对于,RX和TX的一些状态,数据,配置寄存器。下半部分主要是针对于波特率产生的。

波特率计算过程,首先USART对主频率进行PCLKX的预分频,其次对其16分频,将数据设置在BRR寄存器。

其中USARTDIV的数据存储在BRR寄存器当中,

波特率=主频率/分频系数PCLK/16/BRR。

​其中BRR是32为寄存器,而高16位由硬件保留不可以操作,低4位到低15位是对应整数部分,低3位到低0位存放小数部分。

预分频系数,PCLK X手册当中明确规定,

对于USART1,X为2,其余的USART均为2

对于RX,TX的原理,主要理解以下几个寄存器包括:

SR(status Register)状态寄存器,存放各种标志位;

CR(Config Register)配置寄存器,存放各种配置参数;

DR(Data  Register)数据寄存器,用来存放数据;

基本上所有外设都是这些寄存器和一些其他的特殊寄存器。

下面讲解以下发送和接收的过程;

发送过程TX:首先将我们想发送的数据存放在发送数据寄存器(TDR),然后按照低位优先的数据一位一位存放在,发送移位寄存器,当数据被发送出去,状态寄存器对应标志位就会TXE(Transmit data register empty)==0 ,标志着数据已经发出,硬件会自动清零。

接收过程过程RX:我们将接收的数据放在接收数据寄存器RDR,移位寄存器把RDR里面的数据一位一位的移出来。然后当我们通过检测状态寄存器 SR里面是否有数据,如果RXNE:读数据寄存器非空 (Read data register not empty)==1 代表有数据,读取数据寄存器,该位读取以后会由硬件清零,也可以由软件手动清零。

我们读取可以通过2种方法:

1.主程序中读取,程序会在一直停留在数据的读取,其他程序无法继续进行。

(适用于只需要读取数据的时候);

2.中断读取,程序有数据就会触发中断,读取数据;ju

(建议使用这种);

补充:

当我们发送端发送的太快,接收端无法及时接收会导致数据被覆盖导致数据丢失或者无效,硬件支持条件下ju我们可以通过

RTS和CTS来发送停止(表示发送太快来不及接收)和开始(表示准备好了,可以开始数据转运);

实际接线如下

其次,我们也可以通过DMA转运数据,具体参考手册。

以上内容实际参考手册为准。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值