OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5007|回复: 17

串口232通信协议输出的数据怎么才算一帧

[复制链接]

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
发表于 2017-9-28 14:40:18 | 显示全部楼层 |阅读模式
5金钱
麻烦问下群里大神,就是关于串口通信方面的,就是表返回的这17个字节数是一帧数据还是就里面一个如2D(00101101)八位加上起始位和停止位才为一帧数据呢?39(00111001)这样一帧一帧数据组成一个电表读出来的一个完整数呢?谢谢

file:///C:\Users\ne\AppData\Local\Temp\WeChat Files\207e6acd1383168c941c7a2c42d5cdd.jpg


207e6acd1383168c941c7a2c42d5cdd.jpg

最佳答案

查看完整内容[请看2#楼]

方案二;这是一组数据,具体每个数什么意思就要看你的通讯协议了。 接收数据首先你要开一个数组去存,接收完毕后再根据协议去解析。另外,这17个字节代表的这个数需要你去合成。2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A转成ASCII就是-9.6 340000E-05,想知道这个数是啥意思,去看通讯规约吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-9-28 14:40:19 | 显示全部楼层
KC1265005878 发表于 2017-9-28 15:52
大神,还要再麻烦你下就是pc收到的数据为17个字节,代表一个数
2D 39 2E 36 20 33 34 30 30 30 30 45 2D ...

方案二;这是一组数据,具体每个数什么意思就要看你的通讯协议了。
接收数据首先你要开一个数组去存,接收完毕后再根据协议去解析。另外,这17个字节代表的这个数需要你去合成。2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A转成ASCII就是-9.6 340000E-05,想知道这个数是啥意思,去看通讯规约吧。
我有故事,你有酒吗
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-9-28 14:42:30 | 显示全部楼层
17个字节
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-9-28 14:44:25 | 显示全部楼层

大神,但是34401A电压表和单片机通信时,串口设置的数据位为8,那不是超出了8的限制了吗?
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2017-9-28 15:16:32 | 显示全部楼层
KC1265005878 发表于 2017-9-28 14:44
大神,但是34401A电压表和单片机通信时,串口设置的数据位为8,那不是超出了8的限制了吗?

不会,8位是指接收一个字节。接收中断里,要把接收到的数据缓存起来,知道收完一帧报文再去解析
我有故事,你有酒吗
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-9-28 15:52:14 | 显示全部楼层
来俩不甜的 发表于 2017-9-28 15:16
不会,8位是指接收一个字节。接收中断里,要把接收到的数据缓存起来,知道收完一帧报文再去解析

大神,还要再麻烦你下就是pc收到的数据为17个字节,代表一个数
2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A
它的传输过程是
方案一:1个起始位+(00101101)【2D】+(0011 1001)【39】+。。。。+(0000 1101)【0D】+(00001010)【0A】+2个停止位

还是方案二: (1)1个起始位+(00101101)【2D】+2个停止位
                      (2)1个起始位+(00111001)【39】+2个停止位
                      (3)1个起始位+(00001101)【0D】+2个停止位
                      (4)1个起始位+(00001010)【0A】+2个停止位

第二个问题是,这么长的数据是接收端先全部接收完,再全部解析成最后的一个读数吗?
感谢大神!!
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2017-9-28 15:56:14 | 显示全部楼层
这就是流控的问题了,有软件流控和硬件流控。用0D 0A 做结尾,表示为一帧结束,就是一种典型的软流控
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-9-28 16:04:30 | 显示全部楼层
shikihane 发表于 2017-9-28 15:56
这就是流控的问题了,有软件流控和硬件流控。用0D 0A 做结尾,表示为一帧结束,就是一种典型的软流控

大神,那串口通信时设置的数据位8位,怎么和2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A联系起来,就是数据位的8与最后收到的数据的字节数有什么关系呢?
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2017-9-28 16:39:53 | 显示全部楼层
本帖最后由 adlu 于 2017-9-28 16:41 编辑

LZ基础没过关啊

类似于 9600,n,8,2是串口传输一个字符格式。9600,n,8,2表示波特率为9600,无校验位,8位数据,2位停止。

至于你说的2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A这一串,是应用层的东西,一般是称为数据包。
发送这一串数据中的每一个字节,都遵循n,8,2的格式。

数据包的格式,就是应用层定义的了。比如,规定2D为数据包头,0D 0A为数据包尾。

帧的概念更多的应该使用在音频或视频数据中。一般的通讯,使用数据包的概念。你说的一帧数据,应该指的是一个数据包。
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-9-29 09:05:26 | 显示全部楼层
来俩不甜的 发表于 2017-9-28 14:40
方案二;这是一组数据,具体每个数什么意思就要看你的通讯协议了。
接收数据首先你要开一个数组去存,接 ...

感谢大神细心指导!!!
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-9-29 09:10:26 | 显示全部楼层
本帖最后由 KC1265005878 于 2017-9-29 09:15 编辑
adlu 发表于 2017-9-28 16:39
LZ基础没过关啊

类似于 9600,n,8,2是串口传输一个字符格式。9600,n,8,2表示波特率为9600,无校验位 ...

非常感谢,
大神能否推荐下有关串口通信方面的容易理解的书籍或资料,好多都是一知半解,网上有些资料讲的是错的,而且有些概念很模糊。。麻烦大神了!!!


这个是一个字符帧的概念,那通常常说的数据里面的帧头与帧尾就是一个字符数据的起始位和停止位吗?还是就是层主说的接收到的一个数据包的开头(2D)和结尾(0D 0A)是叫帧头与帧尾,好多人都说收到的那17个字节数是一帧数据,也是感觉怪怪的。



微信图片_20170929090844.jpg
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2017-9-29 10:46:28 | 显示全部楼层
KC1265005878 发表于 2017-9-29 09:10
非常感谢,
大神能否推荐下有关串口通信方面的容易理解的书籍或资料,好多都是一知半解,网上有些资料讲 ...

不要太纠结别人怎么描述的,其实都对。只是描述用的词不一样。

我个人一般不用帧这个概念来描述串口通讯。

鉴于你对串口通讯还不怎么理解,建议先简化概念。
你就用两个概念就行:字符格式,数据包格式。

字符格式,就是类似于9600,n,8,2指定的发送一个字符的格式。
数据包格式,就是应用层用于判断数据完整性的格式。
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-9 11:45:44 | 显示全部楼层
adlu 发表于 2017-9-28 16:39
LZ基础没过关啊

类似于 9600,n,8,2是串口传输一个字符格式。9600,n,8,2表示波特率为9600,无校验位 ...

大神,在吗,打扰你下,就比如2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A这一串,这个表它没给出通信协议,那这个数据,可不可以把2D作为报头,0D 0A作为报尾,但开头的2D与倒数第五个的2D会不会产生冲突。
不知道这个表的通信协议,我看其他的表有帧头、帧尾,数据位等,要那种完整的通信协议,用单片机把表的数据读出来,再通过以太网把数据打包发到上位机去,但不知道34401A这个表的通信协议,不知道改怎么做,所以想麻烦大神指导下,谢谢!
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2017-10-9 12:04:46 | 显示全部楼层
KC1265005878 发表于 2017-10-9 11:45
大神,在吗,打扰你下,就比如2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A这一串,这个表它没给 ...

你是想破解这个数据包的格式吗?有点麻烦。
最好还是找34401A这个表的说明。

如果是数据包长度是固定的,还比较好猜,多采集一些数据,分析数据跟实际读数的关系,看看那几个数据是什么意思。不过,看看这一长串,还是要花很多时间的。

如果数据包长度不固定,就更麻烦一点。
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-9 12:17:15 | 显示全部楼层
adlu 发表于 2017-10-9 12:04
你是想破解这个数据包的格式吗?有点麻烦。
最好还是找34401A这个表的说明。

恩恩,是的。
就是它返回的数据  2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A
        代表的值为     -9.6 340000E-05
它返回的数据代表的物理值多少,这个知道,2D代表“-”,2E代表“.”,但现在不知道它数据什么时候代表开始接收,接收的数据包头包尾不知道。
大神,这个以2D作为包头,0D 0A作为包尾不行吧,不是那种完整的协议
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1730
金钱
1730
注册时间
2016-3-8
在线时间
678 小时
发表于 2017-10-9 14:19:18 | 显示全部楼层
KC1265005878 发表于 2017-10-9 12:17
恩恩,是的。
就是它返回的数据  2D 39 2E 36 20 33 34 30 30 30 30 45 2D 30 35 0D 0A
        代表的 ...

找34401A这个表的说明,比自己瞎猜好,还剩时间
回复

使用道具 举报

19

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-2-25
在线时间
29 小时
 楼主| 发表于 2017-10-9 15:11:47 | 显示全部楼层
adlu 发表于 2017-10-9 14:19
找34401A这个表的说明,比自己瞎猜好,还剩时间

恩恩,说明书看了很多次,只有输出数据代表什么意思,没有那种完整的通信协议的。
还是非常感谢大神耐心的指导,谢谢!!!
回复

使用道具 举报

6

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
金钱
320
注册时间
2017-10-14
在线时间
80 小时
发表于 2017-10-15 00:06:38 | 显示全部楼层
KC1265005878 发表于 2017-10-9 15:11
恩恩,说明书看了很多次,只有输出数据代表什么意思,没有那种完整的通信协议的。
还是非常感谢大神耐心 ...

我记得好多串口设备的包头一般都是两个字节,这样误码率会很低,哪一包数据出错了直接丢掉接收下一包
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 10:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表