湘情盾网络科技有限公司

自定义串口通信协议,如何实现?

作者:发布时间:2021-06-05 20:28:52点击:1550

一.什么通信协议?通信协议不难理解,就是两个(或多个)设备之间进行通信,必须要遵循的一种协议。

百度百科的解释:

通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。通过通信信道和设备互连起来的多个不同地理位置的数据通信系统,要使其能协同工作实现信息交换和资源共享,它们之间必须具有共同的语言。交流什么、怎样交流及何时交流,都必须遵循某种互相都能接受的规则。这个规则就是通信协议。

相应该有很多读者都买过一些基于串口通信的模块,市面上很多基于串口通信的模块都是自定义通信协议,有的比较简单,有的相对复杂一点。

二.过于简单的通信协议引发的问题上面那种只有三个字节的通信协议,相信大家都看明白了。虽然它也能通信,也能传输数据,但它存在一系列的问题。

比如:多个设备连接在一条总线(比如485)上,怎么判断传输给谁?(没有设备信息)

还比如:处于一个干扰环境,你能保障传输数据正确吗?(没有校验信息)

再比如:我想传输多个不确定长度的数据,该怎么办?(没有长度信息)。

上面这一系列问题,相信做过自定义通信的朋友都了解。

所以,在通信协议里面要约定更多的“协议信息”,这样才能保证通信的完整。

三.通信协议常见内容基于串口的通信协议通常不能太复杂,因为串口通信速率、抗干扰能力以及其他各方面原因,相对于TCP/IP这种通信协议,是一种很轻量级的通信协议。

所以,基于串口的通信,除了一些通用的通信协议(比如:Modubs、MAVLink)之外,很多时候,工程师都会根据自己项目情况,自定义通信协议。

四.通信协议代码实现自定义通信协议,代码实现的方式有很多种,怎么说呢,“条条大路通罗马”你只需要按照你协议要写实现代码就行。

当然,实现的同时,需要考虑你项目实际情况,比如通信数据比较多,要用消息队列(FIFO),还比如,如果协议复杂,最好封装结构体等。

1.消息数据发送

a.通过串口直接发送每一个字节

b.通过消息队列发送

在上面基础上,用一个buf装下消息,然后“打包”到消息队列,通过消息队列的方式(FIFO)发送出去。

c.用“结构体”代替“数组SendBuf”方式

结构体对数组更方便引用,也方便管理,所以,结构体方式相比数组buf更高级,也更实用。(当然,如果成员比较多,如果用临时变量方式也会导致占用过多堆栈的情况)

.其他更多

串口发送数据的方式有很多,比如用DMA的方式替代消息队列的方式。

五.最后以上自定义协议内容仅供参考,最终用哪些、占用几个字节都与你实际需求有关。

基于串口的自定义通信协议,有千差万别,比如:MCU处理能力、设备多少、通信内容等都与你自定义协议有关。

有的可能只需要很简单的通信协议就能满足要求。有的可能需要更复杂的协议才能满足。


在线客服
技术支持
热线电话
返回顶部

湘情盾

在线客服:
点击这里给我发消息湘情盾-笑笑
点击这里给我发消息湘情盾-文
点击这里给我发消息湘情盾-峰
点击这里给我发消息湘情盾-嘟嘟
点击这里给我发消息湘情盾-小宋
点击这里给我发消息湘情盾-小洁
点击这里给我发消息湘情盾-迎彤
点击这里给我发消息湘情盾-9
点击这里给我发消息湘情盾-欣欣
点击这里给我发消息湘情盾-瑶瑶
点击这里给我发消息湘情盾-知若
点击这里给我发消息湘情盾-茂茂
点击这里给我发消息湘情盾-靓靓
点击这里给我发消息湘情盾-寒雪
点击这里给我发消息湘情盾-若兰
点击这里给我发消息湘情盾-冰巧
渠道合作:
点击这里给我发消息渠道合作
财务QQ:
点击这里给我发消息湘情盾-财务
技术支持:
点击这里给我发消息技术支持

售后服务热线:

0745-2261996

技术邮箱:Server@15dun.com

总公司地址:湖南省怀化市鹤城区人民路新悦城608号