UART串口通信¶
概要¶
在本节课程1Z实验室为大家讲解串口通信的接线方式,ESP32中的串口UART资源与相关API, 并给出了一个UART的小应用实例。
keywordsuart communication micropython-esp32 usb2ttl
什么是串口通信¶
串口通信的英文缩写是UART(Universal Asynchronous Receiver Transmitter) 全称是通用异步收发器。
定义都是一些看似简单实则难以理解的文字。
但是,听起来很高深的概念,其实就是上面gif里的模型,两个设备,一根线串起来,发送方在线的一头将数据转换为二进制序列,用高低电平按照顺序依次发送01信号,接收方在线的另一头读取这根信号线上的高低电平信号,对应转化为二进制的01序列。这就是最基本的串口通信的概念,本节教程接下来所讲解的也是这种最基础的串口通信。
异步收发¶
为什么叫异步收发呢?因为如果我给上图的两个设备再加一根线,比如下图,让左边的设备也可以成为接收方,右边的设备也可以成为发送方,那么对于左右两个设备而言,发送和接受便可以在两根线上同时进行,所以说,发送和接收是异步的。
波特率¶
概念¶
波特率(bandrate)是指,每秒钟我们的串口通信所传输的bit个数,通俗的讲就是在一秒内能够发送多少个1和0的二进制数。
比如,波特率是9600,就意味着1S中可以发送9600个0和1组成的二级制序列。
波特率机制潜在的问题¶
在串口通信的过程中,波特率直接影响着通信的速率,而且在发送端和接收端必须保证同样的波特率,这样才能在一定程度上保证发送和接收保持同步。
然而实际上在发送方和接收方波特率不匹配或者波特率较高的时候,或者有信号干扰,很可能发送和接收的顺序会发生错乱,导致数据的溢出,就像下面的动图中展示的那样——发送方波特率高于接收方:
暂时请忽略上面的DTR和DSR所连接的线,笔者只借此图说明串口通信中波特率不一致或波特率极高的情况下会出现的数据丢失问题。
当然一般在9600和115200的波特率下,上面的情况几乎不会发生,但是这种靠发送接收速率来保持数据同步的方式显然还是存在缺陷的。
针对于波特率的改进¶
为了改进上面的问题,很