⑴ 单片机串行通讯与并行通讯区别
单片机串行通讯与并行通讯区别
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但送速度慢。串行通讯的距离可以从几米到几千米。 根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。 串行通讯又分为异步通讯和同步通讯两种方式。在单片机中,主要使用异步通讯方式。
串行通讯中,两个设备之间通过一对信号线进行通讯,其中一根为信号线,另外一根为信号地线,信号电流通过信号线到达目标设备,再经过信号地线返回,构成一个信号回路。
初级读者会产生疑问:为何不让信号电流从电源地线返回?答案:公共地线上存在各种杂乱的电流,可以轻而易举地把信号淹没。因此所有的信号线都使用信号地线而不是电源地线,以避免干扰。
这一对信号线每次只传送1bit(比特)的信号,比如1Byte(字节)的信号需要8次才能发完。传输的信号可以是数据、指令或者控制信号,这取决于采用的是何种通讯协议以及传输状态。串行信号本身也可以带有时钟信息,并且可以通过算法校正时钟。因此不需要额外的时钟信号进行控制。
并行通讯中,基本原理与串行通讯没有区别。只不过使用了成倍的信号线路,从而一次可以传送更多bit的信号。
并行通讯通常可以一次传送8bit、16bit、32bit甚至更高的位数,相应地就需要8根、16根、32根信号线,同时需要加入更多的信号地线。比如传统的PATA线路有40根线,其中有16根信号线和7根信号地线,其他为各种控制线,一次可以传送2Byte的数据。并行通讯中,数据信号中无法携带时钟信息,为了保证各对信号线上的信号时序一致,并行设备需要严格同步时钟信号,或者采用额外的时钟信号线。
通过串行通讯与并行通讯的对比,可以看出:串行通讯很简单,但是相对速度低;并行通讯比较复杂,但是相对速度高。更重要的是,串行线路仅使用一对信号线,线路成本低并且抗干扰能力强,因此可以用在长距离通讯上;而并行线路使用多对信号线(还不包括额外的控制线路),线路成本高并且抗干扰能力差,因此对通讯距离有非常严格的限制。
⑵ 单片机串行通信程序调试原因
串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳理,可作为调试参考。串口可分为异步串口(UART)和同步串口(USART),后者多出时钟信号线用作通讯时信号同步。本偏仅介绍异步串口。
一、串口通信常见问题
串口通信乱码
串口通讯乱码通常是指接收方接收到的数据不符合预期,出现此情况时需要考虑的因素通常包含以下几个方面:
双方设定的串口参数是否匹配,需检查设置的:串口波特率、串口数据格式等参数。
串口通讯电压不匹配,不同的串口设备接收可正常进行解码的高低电平门限不同,如同样是3.3V串口通讯,A设备低电平门限1.5V,B设备低电平门限1V。当实际串口电压低电平只有1.5V时,B设备无法正常接收数据。又如:A设备为5V串口,B设备为3.3V串口,同样有电压不匹配的问题。
串口通讯实际工作波特率误差较大,即:串口工作实际波特率和理论值偏差较大,因一些MCU和串口设备所用时钟为了兼顾其他资源和应用需要,实际工作的串口速率和设定会有偏差。比如:标称为9600bps时,实际工作在了10000bps(误差超过4%),此时可能已经超出接收方的设计标准。
串口通讯信号质量差,如通讯时信号上升下降抖动严重,信号有过冲或者变化比较迟缓,此时检查硬件上共地是否良好,以及线路上有无串接/并联其他器件导致。
数据格式显示问题,通常使用十六进制或ASCII码格式居多,使用时需要区分。
串口无法发送
串口无法发送通常是指与此串口的TXD连接的对端设备RXD通道接收不到任何数据,总结如下:
使用仪器对TXD通道进行实际测量,观察硬件波形,确定信号是否有输出以及是否正常。(串口电压、串口信号上升下降时间)
短接设备的TXD和RXD通道回环测试,看自收发是否可以成功。排除是自身设备异常还是对端异常。
确定应用软件是否打开串口硬件流控,如当启用RTS/CTS硬件流控后但实际该引脚并没有连接或连接但不生效时,按照协议规定,CTS输入无效则发送方暂停发送数据。
MCU软件编码问题或计算机端软件工作异常。
串口无法接收
当串口接收不到任何数据的原因通常如下:
对端串口实际未能成功发送数据。
串口发送有效电压不满足芯片接收解码要求。
MCU软件编码问题或计算机端软件工作异常。
二、常用的排查小技巧
对于以上的常见串口调试问题,有以下几个方法和技巧可供参考使用。
使用硬件仪器
善于使用示波器等硬件采集或分析工具查找问题,用此方法可以确定线路上信号的串口电压、串口数据格式、串口通信波特率等参数。
串口Loopback检测
当手头没有硬件仪器时,将设备自身的TXD和RXD短接起来进行自收发测试也是一个不错的选择,此方式可以简单确认硬件通路和整个逻辑是否是打通的。但缺点是定位问题不够精准。
更换串口调试软件
计算机端串口软件种类较多,不排除一些设备或驱动软件没法成功适配所有的串口调试软件,此时可尝试多使用几款不同的软件对比测试。
三、串口通信基础
当两个设备使用UART进行通信时,它们至少通过三根导线连接:TXD串口发送、RXD串口接收、GND。串口设备通过改变TXD信号线上的电压来发送数据,接收端通过检测RXD线上的电压来读取数据。
什么是串口通信
计算机一次传输信息(数据)一位或多个比特位。串行是指传输数据一次只传输一位。当进行串口通信时发送或者接收的每个字(即字节或字符)一次发送一位。每一位都是逻辑‘1’或者‘0’。也用Mark表示逻辑1,Space表示逻辑0。
串口数据速率使用 bits-per-second ("bps") 或者 baud rate ("baud")。这表示一秒内可以传输多少逻辑1和0。当波特率超过 1000,你会经常看到用Kbps表示的速率。对于超过 1000000 的速率一般用Mbps 来表示。
⑶ 单片机多机通信
单片机之间的多机通信方式1是通过双机串行连接,当SM0、SM1配置为01时,串口进入方式1,利用TXD和RXD脚进行数据传输。这种方式支持10位帧,包括1位起始位、8位数据位和1位停止位,数据按最低位先发送或接收。
波特率可通过公式确定,其中SMOD位影响频率。发送时,先写入数据到SBUF,然后串口以方式1发送,数据通过TXD输出,每发送完一帧,中断标志TI置位。接收时,串口接收RXD的数据,起始位的负跳变触发接收,使用RX时钟和采样脉冲检测数据,确保数据的可靠性。
为确保同步,所有通信双方的波特率必须一致。在T1定时器方式2下,通过调整初值X,可以精确控制波特率,考虑到误差,通常选择时钟频率为11.0592MHz。例如,当使用11.0592MHz时钟,选择2400bit/s波特率,初值X为244,即F4H。
多机通信时,通过设置SM2位的不同来实现主机选择特定从机通信。主机先发送地址信息,设置TB8位,从机根据接收到的地址和自身的地址匹配决定是否接收数据,TB8为0表示数据帧,仅SM2为0的从机能接收。
在实际应用中,如图所示的主从结构中,通过串口连接多个单片机进行通信。设计串行通信接口时,需考虑速率、距离、接口标准、通信线选择等因素,以确保通信的稳定性和有效性。
⑷ 单片机双机串行通信能否只用一根导线直接连接单片机1的txd和单片机2的rxd
当然不可以啦,至少还要有一根的地线,因为没有地线,两个单片机的电压就没有一个标准点。这就好比如两个人要比高却不知道站立的地点一样不一样,比不出身高。同样,没有了地线的连接,两个单片机也没有了电压的高低比较的参照物,从而使得它们无法知道对方传来的是0电平还是1电平。在一些特殊的情况下你可能发现它们有机会通信成功,比如你用干电池。但是这也是在没有干扰的情况下可能出现的情况。但是如果你用市电经变压器,或是开关电源供电,它们的电压起点不一样时,两个单片机之间的电压差可能会很大。这样会马上将单片机烧坏。
另外,只有这两根电线只能做单方面的串行通信:单片机1发信号给单片机2,单片机2收到信号按指令进行后续工作。但是单片机2并不能传送数据给单片机1。
不过,如果你只需要单片机2简单地反馈一个信号给单片机1的话,用软件做也可设计成双机通信的,举个例子:当单片机2接收到一个数据后,就马上将rxd引脚电平接低,这样单片机1读出txd引脚为低电平表示对方已收到信号。