假如我们需要从一个MCU发送一段数据到另一个MCU,我们可以选择两种通信方式,串行通信或者并行通信。
假如我们要发送的数据是数字198转化为二进制,就是11000110,如果使用串行通信协议,我们只需要一根数据线按照位顺序发送数据即可,通讯距离可以从几米到几千米,也可以使用并行通信协议,我们需要八根数据线直接并行发送数据即可。
由于并行数据无法携带时钟信息,为确保信号持续一致,需要额外的时钟信号线,并且通信速度快,但是相应的线路成本也更高,抗干扰能力也更差,因此通信距离非常有限。
在我们使用MCU进行通信的时候,串行协议往往因为其外设简单、成本低而通信距离远,所以更受欢迎。
我们常用的串行协议有Sbus,PPM,USB,RS232,Morse Code,JTAG,UART,I2C,CAN,SPI,MIDI等,甚至摩尔斯电码也是串行通讯。根据使用时钟的不同,我们可以把串行通讯方式分为同步通讯和异步通讯。
我们常用的I2C和SPI都是同步通信,同步通信的双方需要使用频率一致的时钟,接收方需要时刻准备好接收数据,只需要辅助bit串作为启停标识,因此传输效率高,也可以一对多的进行通信。
异步通信的典型代表就是串口UART。异步通信的双方使用各自的时钟,接收方式通过识别数据包中的起始位和结束位来实现信息同步,因此数据效率低,只能一对一的通信。
我们先来看一下我们常用的串口通信,需要三根线,发送数据线TX,接收数据线RX和参考的GND即可进行通讯。
在通讯之前双方要知道通讯的波特率、数据长度、开始位和停止位,比如我们要发送198这个数字转换为二进制为11000110,我们可以把要发送的数据加载到数据位中,进行通讯时,我们还需要一个起始位和一个结束位。
我们通常用高信号表示通讯停止,因为这样的话受到干扰信号也不会出现通讯错误。当接收器检测到信号由高变低时,就表示开始通信,就可以开始读取数据。
我们还需要配置一个参数,就是波特率,我们常用的波特率为9600波特每秒,意思就是每秒发送9600个码元,每个码元的长度为一除以9600等于104微秒。
但在实际的应用中,当我们检测到数据起始位开始读取数据时,通常延后52微秒再开始读取数据,因为刚开始的数据可能不稳定,之后接收器要做的就是每104微秒采集一次数据,直到八位数数据读取完毕读取到数据停止位,即使我们使用其他的波特率发送不同的数据,我们也需要使用相同的方式读取起始位和停止位。
版权声明:本文为CSDN博主「华维单片机林北」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_66707146/article/details/122926021
暂无评论