helllo,小伙伴们,大家好。这里是左左右。这期视频我们讲USART串口通信。这里假设单片机要将一个字节的数据发送到另一台设备。那么,怎样才能做到呢?
首先,我们将两台设备的引脚用导线连在一起。这里将他们的一端命名为发送端,另一端为接收端。这里的难点是怎么将一个字节的数据通过导线传输到另一台设备?我们先建立一个直角坐标系。横坐标代表时间,单位为秒。纵坐标代表高低电平。学过前面视频的同学都知道引脚是可以输出高低电平的。这里我们从发送端在间隔一秒的时间交替输出高低电平。
在直角坐标系随着时间的推移,是不是就形成了这样的一个方波信号?我们将高电平代表1 低电平代表0。接收端只要将收到的高低电平转换为二进制的1和0。放入其内存中是不是就实现了数据的传输?回到刚才的画面中来演示一下。理解起来会更加容易。因为USART通信协议是低位先行。
首先,要读取第一位0,向外输出低电平。同时,单片机中的8位二进制数向右移一位。这时串口屏读到低电平,将0放入串口屏内存中的最高位。一秒后再次读取单片机中的8位二进制数,此时的最低位已经是1。向外输出高电平,串口屏读到高电平,在将1放入最高位时先将之前的0向右移一位,之后将读到的高电平1放入最高位。

以此类推,8秒正好就将1个字节的数从单片机传送到串口屏了。这里为什么两个设备的时间间隔都是1秒呢?假设发送端是1秒读一次最低位,而接收端是0.5秒读一次接收到的高低电平会怎么样呢?这时第一位的低电平会被接收端读到两次,也就会填入内存两个0。这时读到的数据就是一个错误的数据。
所以,要求输入和输出要一样的时间间隔。这里的1秒是方便大家理解。现实单片机的传输速度是很快的,这里就要引入波特率这个概念了。常用的波特率有9600bit/s和115200bit/秒等等,也就是每秒传输9600或者115200个bit。所以,这个速度还是很快的,在单片机中真实的USART通信过程,比这个还是要复杂一点点的,要想发送一个字节的数据,还需要有起始位,终止位,奇偶校验位。
我们仍然以发送一个字节的数10101010为例。由于是低位先行,随时间推移依次向外发出是01010101,那么,什么是是奇偶校验呢?假如采用奇校验,现在数据中1的个数为偶数,此时要将我们奇偶校验位置1,1的个数达到奇数。当接收端接收到的数据中1的个数为偶数时,说明数据传输发生错误,这就是奇校验,偶校验指的是要将数据中1的个数设置为偶数,原理是一样的。

这就是奇偶校验。起始位为0,终止位为1,这里的奇偶校验位是可有可无的。单片机将这样的一组数据称为1帧数据,当有奇偶校验位时这组数据的个数为11,没有奇偶校验位时数据个数为10。我们接着画之前的方波图。默认空闲状态为高电平,起始位0将高电平拉低。作为数据开始传输的标志,我们接着画。

到终止位时我们将电平拉高,这是因为要恢复到空闲状态下的高电平。为下次数据传输做好准备。这个我们画好的方波图在数据通信中叫做时序图,它很重要。我们是不是不知不觉也将他画出来了?这个很重要,一定要会画,还有值得注意的是,这里的数据帧是由stm32内部集成的硬件外设自动生成的。
接收端会将收到的这帧数据中的起始位,终止位,奇偶校验位去掉。将真正想要的数据存起来,这个过程也是自动完成的。我们只要在软件中设置好就可以了,还有就是这里的发送端在单片机中是叫TX引脚,而这里的接收端叫RX引脚。发送端的这个寄存器叫做发送移位寄存器。接收端的这个寄存器叫做接收移位寄存器。
usart通信是全双工的,也就是说串口屏也是可以给单片机发送数据的。这里我再加一根导线就可以了。这时导线的一端要与串口屏的TX引脚相连。另一端与单片机的RX引脚相连。R 就是receive(收到)的首字母,知道这个就很好记了,如果自己接线的时候要注意,千万不要接错了。我讲上半部分就行了,也就是单片机向串口屏发送数据这一部分。
下半部分与上半部分正好相反就不需要讲了。如果我们想要连续发送多字节的数据,这时就要引入两个寄存器和两个标志位了,发送数据寄存器、TXE标志位。接收数据寄存器,RXNE标志位。当我们输出多字节数据时,此时TXE为1,表示发送数据寄存器为空。单片机CPU将第一个字节的数据放到输出数据寄存器。


同时TXE标志位置0,发送数据寄存器会将数据发送到发送移位寄存器,TXE置1。CPU会将第二个字节的数放到输出数据寄存器。TXE标志位同时置0,当发送移位寄存器的数发送完成后,发送数据寄存器会将第二个字节的数发送到发送移位寄存器。TXE标志位置1。CPU会将第三个字节的数放到输出数据寄存器。
TXE标志位同时置0,以此类推 一直到数据发送完成。这里的TXE标志位的作用。就是告诉CPU是否可以往发送数据寄存器中发送数据?起到一个“喊话”的作用。当TXE为1时表示可以。为0时表示不可以,否则会将现有数据覆盖。接收端也是一样的原理。当接收移位寄存器接收到一个字节的数据后,将接收到的数据发送到接收数据寄存器。
RXNE标志位置1。接收数据寄存器将数据发送到串口屏的CPU。RXNE标志位置零,以此类推,一直到数据接收完成。usart全称是通用同步/异步串行接收/发送器。在使用usart通信协议时。如果单片机只需要发送数据或者只需要接收数据时,我们只要接一根线就可以了。其实usart通信就像我和你打电话。
这里的听筒就相当于RX引脚,话筒相当于是TX引脚。我的声音可以通过我的话筒传送到你的听筒再到你的耳朵里。你的声音也可以通过你的话筒传输到我的听筒再到我的耳朵里。我们可以一边说一边听 也可以同时说同时听。还可以只说不听 或者只听不说。之前好多学过单片机的小伙伴一遇到通信协议就发怵。
这期视频听下来是不是觉得通信协议也没有那么可怕?这些都是人类创造的,也是符合人类的思维的。多看几遍,多思考,不难。好的,今天的视频就到这里了,您的点赞收藏和关注是我更新下去的最大动力。我们一起努力,下期见。