首页 >>  正文

串口接收数据顺序错乱

来源:baiyundou.net   日期:2024-09-23

串口通信,就是我们常说的串口通讯,是一种短距离、点对点的数据传输方式。它基于串行通信协议,通过串口线连接设备进行数据交互。串口在很多硬件系统中广泛使用,是工控机、单片机、外设设备之间信息交换的重要接口。

那串口是怎么工作的呢?我们举个形象的例子。假设A和B是两台设备,它们通过串口线相连。现在A要向B发送数据“12345”,下面就看看串口是怎么一步步处理和传输这组数据的。

第一步是“整体打包”。A会把要传的数据“12345”作为一个整体打包起来,加上一些必要的控制信息,像邮寄一个包裹那样。这里的控制信息类似我们填好的快递单,记载了重要参数–发送设备地址、接收设备地址、数据长度等等。 


第二步是“字符分割”。A会把刚才打包的整体数据分割成一个个字符,按照串口协议规则,把每8个bit位作为一个字符。比如“12345”会被分割为多个8bit序列。这个过程就像把一个大箱子里的东西取出来,平整的摆放。

第三步是“串行发送”。串口只有一根发送数据线,所以不能多个bit并行传输。A会按照事先规定好的波特率,从第一个bit开始,按顺序串行发送分割好的字符。就像饭店服务员端菜一样,只有一手,所以一次只能端一个盘子。 

第四步是“串行接收”。相对应的,B这边也是采用单线串行的方式,按照规定波特率,时钟线同步,一位一位的接收A发送来的字符。依次把从线上传来的字符填充到自己的缓冲区,就像服务员端上一个又一个盘子。

第五步是“重新装箱”。B这边会对接收到的所有字符进行校验、解析,把相关的控制字符及数据整理到一起,还原成A端发送时的完整数据包。这个过程就像快递员收到寄来的包裹,会核对单号、数物品,然后打包存放。


至此整个串口发送接收的基本过程就完成了。每一次串口通信,这几个步骤都会依次执行,最终实现设备之间点对点的数据传输。理解这一原理,对我们调试和应用串口通信就更加得心应手了。

","gnid":"92c98270f49a6ba92","img_data":[{"flag":2,"img":[{"desc":"","height":280,"title":"","url":"https://p0.ssl.img.360kuai.com/t01d9731f743c86009a.jpg","width":500},{"desc":"","height":"400","title":"","url":"https://p0.ssl.img.360kuai.com/t01d2879941d31da132.jpg","width":"693"},{"desc":"","height":"293","title":"","url":"https://p0.ssl.img.360kuai.com/t011cae45accb30be40.jpg","width":"538"}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"pika","pub_time":1700538775000,"pure":"","rawurl":"http://zm.news.so.com/87e5c66462dd873b5c455cc2f5ca57ac","redirect":0,"rptid":"5811ab594d6e4814","rss_ext":[],"s":"t","src":"星创易联5G","tag":[],"title":"串口工作流程硬核解析,没有比这更简单的了!

汪剂郊1006Android串口收发偶见乱码问题 -
人秀秒18535914228 ______ 统一一下数据格式试试,双方发送的数据都默认设置为16进制,发送字符也都转换为16进制数据,你的可能是一方是16进制,一方是字符,或者是某一个功能发送的数据格式不统一....

汪剂郊1006求问,stc12c5406ad单片机编程,串口接收数据显示乱码 -
人秀秒18535914228 ______ 把波特率设低一点,先从2400,再到4800,再到9600,估计是硬件的设计问题,单片机的波特率达不到9600

汪剂郊1006按厂家要求设置com口,串口调试助手接收的数据跟发送的数据不一样,是乱码;com口设置的波特率设低就好点 -
人秀秒18535914228 ______ com口的通信参数要和设备匹配;检查串口和串口线是否有问题,可以更换一个串口或串口线,或者通过其他串口软件,如格西烽火等,测试一下是否是和串口软件有关.

汪剂郊1006MATLAB通过串口接收从单片机发出来的数据的时候数据出错 -
人秀秒18535914228 ______ 可能是你的电脑和单片机串口工作模式不一致.

汪剂郊1006串口通信接收数据错误 -
人秀秒18535914228 ______ 设备发给你的数据含有很多个意思,比如标记,数据,校验等等,你只需要取其中的一部分作为你真正的数据,对于软件开发人员来说应该不是什么问题吧

汪剂郊1006关于单片机串口同时收发数据的时序问题 -
人秀秒18535914228 ______ 回答这些问题之前,你要先复习一下串口部件的结构和数据收发的原理.1.不管你有没有处理RI,还是在继续接收数据的.数据接收完成之后,数据从移位寄存器转移到数据寄存器中,这时才产生中断,但移位寄存器是空的,还可以继续接收数...

汪剂郊1006关于串口通信,用VB编的.发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误.用其 -
人秀秒18535914228 ______ 这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如 "abc1"这个字符串的ASCII码(16进制)在ANSI编码下为...

汪剂郊1006PC串口问题... -
人秀秒18535914228 ______ 通讯电缆的插头呢?能否保证可靠连接?PC机端接收的那根线会不会和地短路?或者下位机相应插座上发送线和地短路、断路?另外采用USB转串口时,是否就能收到下位机发来的数据呢?你没描述清楚.USB转串电缆目前问题很多,不太好说明问题.如果实在找不到原因,我觉得你不要轻易排除下位机.可以先编制一段最简单的代码,只做一件事,就是上电后不停的发送数据,从而验证下位机确实没问题.还有就是硬件上:232电平转换芯片的特性是否不太好,外围电容的容值选择及焊接是否正常.如果还是找不到问题,我就实在想不出还有什么原因了.

汪剂郊1006可以进行串口通信可是接收的数据怎么都是错误的 -
人秀秒18535914228 ______ 查查接口是不是接紧了,接口没问题的话用串口调试工具试试是不是也这样,如果串口调试工具没问题的话就看看你自己的代码是不是有问题

汪剂郊1006用RS232接收数据,数据出现错误 -
人秀秒18535914228 ______ 时会报“实时错误“6”,溢出”,数据无法接收完整.请高手指点,给出程序msdn 吧 推荐看书 Visual_Basic与_RS-232_串行通信控制

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024