MCU串口多字节数据解析问题

[复制链接]
2291|11
 楼主| warcraftiii 发表于 2015-11-18 12:55 | 显示全部楼层 |阅读模式
28335通过串口发送16位数据到PC。数据位是8位。PC能收到数据,但解析有问题。出现前一个字节高8位与后一个字节低8位组成16位现象。
如待发送数据(28335转成8位送出):0x00ff、0xee00、0x00dd、……
PC接收到:0x00、0xff、0xee、0x00、0x00、0xdd、……
但PC程序读接收缓冲区时,可能刚好从0xff开始读,还原成16位后:0xffee、0x0000……
不知道说明白没有,还请给位大侠给指点一下,这个问题该怎么解决。
要求串口以最大速率,连续不断的传。
dirtwillfly 发表于 2015-11-18 13:46 | 显示全部楼层
楼主的串口通讯没有起始位么?
打着哈欠说 发表于 2015-11-18 15:22 | 显示全部楼层
数据类型的处理中出现的问题。仔细单步调试看看
 楼主| warcraftiii 发表于 2015-11-19 10:59 | 显示全部楼层
回2楼:“起始位”指什么,是每帧中、8个数据位前面那一位么? 还是指28335发送的16位数据应该添加自己的起始标志?
------------------------------------------------------------------------------
回3楼:数据类型的问题注意了。最终要用的是16位整型,但内存中是8位。没头没尾。


如下图:28335连续发送 32767(0x7ffff)。PC接收缓冲区起始地址0x004192a4。上图是正确的,下图是错位的情况。
每次启动PC程序,对齐、错位随机的



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
baimiaocun2015 发表于 2015-11-19 14:02 | 显示全部楼层
这个是需要根据一定的协议进行解析的吧
 楼主| warcraftiii 发表于 2015-11-19 15:12 | 显示全部楼层
协议怎么搞,能说下思路吗?
数据是16位AD采上来的,要连续传到PC。0x0000 - 0xffff都是有效数据。
搞成socket那种,先建立连接,再传数据。太麻烦的。

pc串口程序自发自收,发一遍,总是收到两遍,错误也没找到......
精彩人生sun 发表于 2015-11-19 15:21 | 显示全部楼层
warcraftiii 发表于 2015-11-19 10:59
回2楼:“起始位”指什么,是每帧中、8个数据位前面那一位么? 还是指28335发送的16位数据应该添加自己的起 ...

好奇怪的问题,估计涉及到指令的区别了吧。用官方的例程试试
 楼主| warcraftiii 发表于 2015-11-19 16:50 | 显示全部楼层
28335的例程?官方好像只是SCI模块单字节的收发演示。现在28335发送8位字节数据,PC接收,都是对的。就是PC收到数据后,无**确还原为原始的16位数据
huyuezhan 发表于 2015-11-19 18:27 | 显示全部楼层
本帖最后由 huyuezhan 于 2015-11-19 18:31 编辑

建议设计个通讯协议,比如发数据之前先发几个字节当字头,这时候PC用8位收,匹配之后再发数据。就像GPS数据前面的$GPGGA之类的

dirtwillfly 发表于 2015-11-20 10:15 | 显示全部楼层
warcraftiii 发表于 2015-11-19 16:50
28335的例程?官方好像只是SCI模块单字节的收发演示。现在28335发送8位字节数据,PC接收,都是对的。就是PC ...

这种情况是上位机的问题
 楼主| warcraftiii 发表于 2015-11-20 13:45 | 显示全部楼层
感谢版主大人和各位的回复!
个人觉得9楼和5楼的方法更适合些。比如以两个连续的最大值和最小值表示起始或对齐标志(0x7fff,0x8000,0x7fff,0x8000)。28335发送缓冲区起始4个U16就是这个四个值,在PC缓冲区(char)buf[]中查找这个字符串(7fff80007fff8000)即可。
代价是收发效率降低一些。
android2 发表于 2015-11-24 20:19 | 显示全部楼层
用官方的例程运行一下试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

56

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部