11842|19

411

帖子

9

TA的资源

一粒金砂(高级)

楼主
 

串口通信,帧头帧尾校验和不懂,大神指导 [复制链接]

 
串口通信,
1.帧头帧尾校验和是自己定的么?这算是一个协议么?
2.我看到有的协议有帧头没有帧尾但是有校验和,帧尾是可以有可以没有么?
3.帧尾就是校验和么?帧尾和校验和有一个就可以吗?
4.帧头跟帧尾都必须有吗还是帧头必须有帧尾不必须有?
作为小白,网上查着查着就乱了,求大神解释上面问题                                                               
此帖出自stm32/stm8论坛

最新回复

数据帧是数据传输的一个基本单位,指的是一次传输的数据,这可以是一个异步串口字节,也可以是通讯协议的一次传输内容。显然,只要有数据传送,帧头、帧尾都是必然存在的,内容与是否为协议无关。通讯协议的引入是为了保障数据传输的可靠性,为此必然需要采取一些措施,所以协议必然有结构。协议结构则是多样化的,跟具体应用有关,甚至协议本身还可以是分级的,这一点,其实跟人与人之间交流的性质完全一致。通过分析人与人的交流方式,对理解通讯协议大有好处,不妨先做点“诗外功夫”。  详情 回复 发表于 2018-7-3 17:28
点赞 关注(1)
 

回复
举报

6040

帖子

203

TA的资源

版主

沙发
 
如果是你自定义的协议,那么就随便你定义,任何东西有没有都可以。
如果是标准协议,就要按着标准来。
此帖出自stm32/stm8论坛

点评

嗯嗯  详情 回复 发表于 2018-7-2 10:58
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
添加帧头或帧尾或两者都有的目的是为了保证通信的可靠性和接收数据时的便利性,在解析的时候会很方便,增加校验和的目的是为了保证通信数据的正确性,也是提升通信的可靠性。一般来说一个通信协议都会包含这两个元素,当然自己定义的协议也可以不包含有,而且位置也根据个人的喜好来设置,并不是要求一定要有帧头、帧尾和校验和,你只要保证使用你的协议能正常通信,达到你的需求就可以。另外一些标准的通信协议,比如Modbus、以太网等就要严格按照协议标准来实行。
此帖出自stm32/stm8论坛

点评

串口通信,工程中实现功能时,主从设备间应该怎样互传,比如校验和什么的是否需要互传之类的,大神能简单讲一下这个传输的过程么  详情 回复 发表于 2018-7-2 11:01
什么算是解析?  详情 回复 发表于 2018-7-2 10:58
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

4
 
lcofjp 发表于 2018-7-2 10:10
如果是你自定义的协议,那么就随便你定义,任何东西有没有都可以。
如果是标准协议,就要按着标准来。

嗯嗯
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

5
 
bobde163 发表于 2018-7-2 10:22
添加帧头或帧尾或两者都有的目的是为了保证通信的可靠性和接收数据时的便利性,在解析的时候会很方便,增加 ...

什么算是解析?
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

6
 
bobde163 发表于 2018-7-2 10:22
添加帧头或帧尾或两者都有的目的是为了保证通信的可靠性和接收数据时的便利性,在解析的时候会很方便,增加 ...

串口通信,工程中实现功能时,主从设备间应该怎样互传,比如校验和什么的是否需要互传之类的,大神能简单讲一下这个传输的过程么
此帖出自stm32/stm8论坛

点评

两个设备间通信,就好比两个人之间在聊天对话,首先这两个人至少要说同一种语言吧,比如中文或者是英语之类,语言不同当然是听不懂了,串口通信中,大家使用的“语言文字”就是一个个字节,一共256个字节,就像是汉  详情 回复 发表于 2018-7-2 15:14
 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 
1.帧头帧尾校验和是自己定的么?这算是一个协议么?
如何把串口的一个个字节分成一个个数据包是要有一个标准,典型的modbus就是用时间间隔来分包,当然你也可以根据自己的实际情况自己定义,校验是为了提高数据抗干扰或可靠性,和分包没关系.

2.我看到有的协议有帧头没有帧尾但是有校验和,帧尾是可以有可以没有么?
在帧头放上特殊标记和要发送数据长度(或规定好长度)是可以的,这样可以在接受端限制好待接受缓冲区大小,主要针对于数据包长度不固定的情况.

3.帧尾就是校验和么?帧尾和校验和有一个就可以吗?
还是那个意思,分包和校验是两个东西,不能确定一个数据包的长度校验根本就无从谈起.

4.帧头跟帧尾都必须有吗还是帧头必须有帧尾不必须有?
不说了
此帖出自stm32/stm8论坛

点评

再问一个另外的问题哈,你说如果我要一个单片机的USART2传到另一个单片机的USART2,这个时候程序应该怎么写呢?USART_SendData(USART2,'A');用这个么?但是怎么区分两个单片机的USART2呢?如果这么写会不会发送到原  详情 回复 发表于 2018-7-2 18:36
大神大神大神  详情 回复 发表于 2018-7-2 18:33
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

8
 
shijizai 发表于 2018-7-2 11:01
串口通信,工程中实现功能时,主从设备间应该怎样互传,比如校验和什么的是否需要互传之类的,大神能简单 ...

两个设备间通信,就好比两个人之间在聊天对话,首先这两个人至少要说同一种语言吧,比如中文或者是英语之类,语言不同当然是听不懂了,串口通信中,大家使用的“语言文字”就是一个个字节,一共256个字节,就像是汉语中的一个个汉字一样,然后你要对话,那一般是一句一句话的说吧,才能更好的理解对方的意思,很少见到一个字一个字的说吧,相应的串口通信协议中,大多都是多个字节“组成一句话”,再发送出去。
帧头就好比说话前先打个招呼:“我要说话了,你听着”,然后说要说的话
帧尾就好比一句话说完了,也打个招呼:“我说完了”,然后对方就去处理你说的话的意思了。
校验和就好比一个暗号,事先双方定义好对暗号的规则,比如说所有字的笔画加起来一定要等于100画等这样的规则,这样对方在听到你说的话之后,会去计算这些笔画的总数对不对,不对的话那说明要么是对方说错话了,要么是我这一方听错了,不能处理。

所以以我们日常中的对方过程来作模型,可以看到帧头和帧尾还有校验和你都可以自己定义的取舍,比如你两个人挨着在说悄悄话时,就可以不需要这些东西了,但是如果在隔着桌子在问答时,那可能就需要帧头或者帧尾来表示要开始说话或者结束说话。

这样解释,不知道你能不能理解
此帖出自stm32/stm8论坛

点评

已经很通俗了,非常能理解,多谢大神  详情 回复 发表于 2018-7-3 08:52
你说的这个更像是系统应用层程序,协议的复杂程度和硬件有关系. 比如数据包在网络传输就不能假设先发的数据先到,就必须加帧号或时间戳来区分,简单的串口是不会出现这种情况的. 搞得太复杂没必要,你到底要弄啥,摆出  详情 回复 发表于 2018-7-2 20:50
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

9
 
huo_hu 发表于 2018-7-2 11:22
1.帧头帧尾校验和是自己定的么?这算是一个协议么?
如何把串口的一个个字节分成一个个数据包是要有一个标 ...

大神大神大神
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

10
 
huo_hu 发表于 2018-7-2 11:22
1.帧头帧尾校验和是自己定的么?这算是一个协议么?
如何把串口的一个个字节分成一个个数据包是要有一个标 ...

再问一个另外的问题哈,你说如果我要一个单片机的USART2传到另一个单片机的USART2,这个时候程序应该怎么写呢?USART_SendData(USART2,'A');用这个么?但是怎么区分两个单片机的USART2呢?如果这么写会不会发送到原单片机的USART2上?我这时候发送应该怎么发送?
此帖出自stm32/stm8论坛

点评

这边发送数据,那边接收数据,两套程序不搭嘎呀  详情 回复 发表于 2018-7-2 20:53
 
 
 

回复

4008

帖子

0

TA的资源

版主

11
 
bobde163 发表于 2018-7-2 15:14
两个设备间通信,就好比两个人之间在聊天对话,首先这两个人至少要说同一种语言吧,比如中文或者是英语之 ...

你说的这个更像是系统应用层程序,协议的复杂程度和硬件有关系.
比如数据包在网络传输就不能假设先发的数据先到,就必须加帧号或时间戳来区分,简单的串口是不会出现这种情况的.
搞得太复杂没必要,你到底要弄啥,摆出来看看
此帖出自stm32/stm8论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

12
 
shijizai 发表于 2018-7-2 18:36
再问一个另外的问题哈,你说如果我要一个单片机的USART2传到另一个单片机的USART2,这个时候程序应该怎么 ...

这边发送数据,那边接收数据,两套程序不搭嘎呀
此帖出自stm32/stm8论坛

点评

那程序呢?我写这句话USART_SendData(USART2,'A'); 是这个单片机能传到另一个那边还是这个单片机传到上位机?大神,你说,如果MCU1的USART2传到MCU2的USART3,这时我应该这么写USART_SendData(USART2,'A'); 还是这么  详情 回复 发表于 2018-7-3 08:57
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

13
 
bobde163 发表于 2018-7-2 15:14
两个设备间通信,就好比两个人之间在聊天对话,首先这两个人至少要说同一种语言吧,比如中文或者是英语之 ...

已经很通俗了,非常能理解,多谢大神
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

14
 
huo_hu 发表于 2018-7-2 20:53
这边发送数据,那边接收数据,两套程序不搭嘎呀

那程序呢?我写这句话USART_SendData(USART2,'A'); 是这个单片机能传到另一个那边还是这个单片机传到上位机?大神,你说,如果MCU1的USART2传到MCU2的USART3,这时我应该这么写USART_SendData(USART2,'A'); 还是这么写USART_SendData(USART3,'A'); ?
此帖出自stm32/stm8论坛

点评

mcu1写到usart2里,那边用啥接收我这边不管  详情 回复 发表于 2018-7-3 15:18
 
 
 

回复

4008

帖子

0

TA的资源

版主

15
 
shijizai 发表于 2018-7-3 08:57
那程序呢?我写这句话USART_SendData(USART2,'A'); 是这个单片机能传到另一个那边还是这个单片机传到上位 ...

mcu1写到usart2里,那边用啥接收我这边不管
此帖出自stm32/stm8论坛
 
 
 

回复

1万

帖子

141

TA的资源

版主

16
 
1.帧头帧尾校验和是自己定的么?这算是一个协议么?
A1:未必需要自定,有些协议有强制要求。仅有帧头帧尾和校验未必就能称得上是“协议”,典型11位异步串口格式(1起始位、1结束位、1校验位、8数据位)就不能称为是协议,协议必须有对内容解析的约定。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

141

TA的资源

版主

17
 
2.我看到有的协议有帧头没有帧尾但是有校验和,帧尾是可以有可以没有么?
A2:一个数据帧的结构可以是前导码+长度码+数据码+校验码,显然,有长度码或者数据码的长度始终为常数时,那么就无需结束码。注意,楼主在这里弄错了概念,帧尾是一定有的,最后一个字节甚至最后一个数据位不论其性质是什么,都是帧尾。显然,说帧头、帧尾是不严谨的,应该说前导码、结束码。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

141

TA的资源

版主

18
 
3.帧尾就是校验和么?帧尾和校验和有一个就可以吗?
A3:结束码在协议中是特殊约定的,对于不需要结束码的帧结构,显然无需结束码,这里还是帧尾和结束码的概念错误引起的误解。另外,校验码也不仅仅是校验和,可以有很多形式,甚至绝大多数都不是校验和,因为校验和的容错性太差。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

141

TA的资源

版主

19
 
4.帧头跟帧尾都必须有吗还是帧头必须有帧尾不必须有?
A4:帧头、帧尾显然必须有,否则就是什么都没有,但引导码、结束码则未必。这里依然是帧头、帧尾的概念错误导致的误解。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

141

TA的资源

版主

20
 
数据帧是数据传输的一个基本单位,指的是一次传输的数据,这可以是一个异步串口字节,也可以是通讯协议的一次传输内容。显然,只要有数据传送,帧头、帧尾都是必然存在的,内容与是否为协议无关。通讯协议的引入是为了保障数据传输的可靠性,为此必然需要采取一些措施,所以协议必然有结构。协议结构则是多样化的,跟具体应用有关,甚至协议本身还可以是分级的,这一点,其实跟人与人之间交流的性质完全一致。通过分析人与人的交流方式,对理解通讯协议大有好处,不妨先做点“诗外功夫”。
此帖出自stm32/stm8论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表