不知道单片机开发的朋友们有没有遇见过一个这样的问题,在一台计算机和多个单片机系统同时通讯时,会出现乱码甚至不能通讯的问题。
在处理一对多通讯任务时,一般情况下,我们只要将PC机的串口RX\TX\GND与每个单片机TX\RX\GND三根线顺序相连,然后制定一个带ID信息的通讯协议,就可以编写程序进行通讯了。但是这样的硬件基础下通讯时会发生如下的情况,在PC机向下传送命令后,每个单片机系统都能得到这个命令,但当被通讯的那个单片机向上回传数据时,该TX上的电平很容易受到其他单片机的干扰,PC机很难得到一个完整的数据帧。这样,PC机在得不到正确信息时,会又一次向下发送命令,直到收到一个完整的数据帧为止。通讯虽然能够完成,但是PC和单片机都要不停地接收数据再判断数据的合法性,并且双方都要设置一个较长的数据接收缓冲区,影响其他功能程序的相应速度,整体程序效率低,浪费了很大资源,并且不可靠。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
如上的处理方法,实际上是硬件人员没有搭建好可靠的硬件平台,而软件人员却要去做大量的工作去弥补。而最直接有效的方法,就是用IN4148串联在单片机的TX线上,每个TX一个,方向朝PC机。这样,通讯起来非常顺畅健康。(问题就这样解决了,我的总工老师也默认了,要知道很难得到这个认可的。)虽然后来有人也在RX加了个IN4148,方向和TX上的相反,效果是一样的。
搞嵌入式软件开发,一定要有一种能力,就是要在遇见问题时,有能力判断出来问题是属于硬件方面的还是软件方面的,这是决定解决问题成败的关键一步,因为现在的项目基本上都是好几个人做,如果没有这个能力,受累的也只有你自己了。
用户1710130 2014-4-24 13:15
用户1494427 2009-11-3 10:56
用户1371116 2009-10-13 17:38
用户52478 2009-4-14 23:24