最近有使用串口的需求,用于两块板间的TTL串口通信,目前常见的串口通信协议可以归纳为两种模式

  • 使用串口和一个定时器的通信协议【严格限制时间,常见协议为Modbus RTU】
  • 使用单个串口的通信协议【存在数据头、数据尾,常见协议为三菱PLC使用的串口控制协议】

对于上述两种模式的优劣势我是如下理解的:

  • 串口加定时器模式能够较好的限制通信时间,优势是在多设备通信过程中不会存在因某个通信包未发送完而导致通信系统瘫痪的问题;其劣势在于MCU板上资源紧张的情况下可能会无法抽出定时器给串口使用,串口通信效率为100%;
  • 单串口通信的优势也就在于仅需一个串口即可实现数据的正常收发,缺点在于需要对电文进行额外处理,需要严格区分包头和包尾与中间数据,根据不同协议,串口通信效率一般低于100%。

综上即可根据不同的通信场景选择对应的通信模式,能够趋利避害,发挥对应优势

  • 针对于需要多机在同一总线通信的情况下需要使用串口+定时器的通信模式,以防某个设备的通信故障导致其余正常设备无法通信。
  • 针对于单点对单点通信则可以选择单串口通信模式,因为仅存在单设备,若出现通信故障则需要修整,不存在干涉到其它设备的问题。

单串口通信的几种方式
单串口通信的数据包基本可以固定为以下模式

包头 长度 数据1 数据2 。。。 数据N 校验 包尾

由于通信过程中可能出现的数据位0x00~0xFF,涵盖了所有发送过程会出现的字符,所以在区分包头和包尾有了以下几种解决方案

  • 将数据转换为ASCII码进行发送,例如数据0xA1需要解析成0x41和0x31【A的ASCII码和1的ASCII码】,该方法我是在三菱的串口通信协议中习得,显而易见的是该方法将单个数据拆分为两个数据,而数据仅使用了ASCII码的0-9、A-F,包头选择为0x01,包尾为0x03,数据与包头尾的问题得到解决。但缺点在于通信效率只有正常通讯效率的50%【一个数据拆分为两个字符发送】,可见效率较为低下;
  • 采用关键字进行特殊处理,就是所谓的Escape协议,例如使用关键字0x81,包头变为0x81后接0x01,包尾变为0x81后接0x03,正常数据发送时,若要发送0x81,则发送0x81后接0x81实现,该方法也同样能解决包头包尾与数据内容的冲突,其通讯效率在极端情况下【传递的所有数据都与关键字相同】此时由于包头包尾都带关键字,所以效率会略低于50%,但在正常情况下,其期望通信效率约为99.8%,其通讯效率根据数据包内关键字的数量会出现变动。

Escape协议为串口底层协议,仅用于区分包头与数据内容

包头 包头 数据1 数据2 。。。 数据N 包尾 包尾
关键字 包头码 数据 数据 。。。 数据 关键字 包尾码

如果数据内容与关键字一致,则需要发送一次关键字、一次数据内容。

本文仅提供一种思路,具体编码方案因人而异,我仅提供一种解决思路,代码文件点击此处Escape代码

stm32板间串口通信escape协议相关推荐

  1. 安卓开发板之串口通信,通过modbus Rtu协议控制下位机

    安卓开发板之串口通信,通过modbus Rtu协议控制下位机 1.环境准备 2.编写串口操作核心类 3.编写测试类 前言:因为公司最近有个人脸识别门禁的项目,这个项目主要业务是实现远程人脸注册,管理员 ...

  2. Ardunio 完成STM32板子的串口通信

    目录 一.Ardunio简介 二.Ardunio配置 三.实验 四.其它 实验目的: 安装 Ardunio IDE 和相关软件支持库,在Ardunio 上完成STM32板子的串口通信程序:持续向串口输 ...

  3. STM32和ROS串口通信常见问题汇总答疑

    STM32和ROS串口通信常见问题汇总答疑 大家好,我是白茶清欢,最近看了博客文章<stm32和ros的串口通信>有很多问题的评论,这里汇总回复一下. 问题1:运行时报错如下: rosru ...

  4. STM32最小核心板F103串口通信USART

    文章目录 一.串口协议和RS-232标准,RS232电平与TTL电平的区别,"USB/TTL转232"模块的工作原理 1.串口协议 2.RS-232标准 3.RS232电平与TTL ...

  5. STM32的USART串口通信小程序

    文章目录 前言 一.串口协议和RS-232.485标准 1.串口通信协议的概念 2.常用协议 2.1 RS-232 2.2 RS-485 3.RS232.485电平与TTL电平的区别 二.STM32的 ...

  6. 在Arduino 完成STM32板子的串口通信程序

    文章目录 要求 一.软件安装 二.编译及烧录 三.结果 四.标准库函数与HAL库函数的stm32编程方式差异 五.国人版的MCU集成开发平台 要求 安装 Ardunio IDE 和相关软件支持库,在A ...

  7. STM32物联网项目-RS485通信(Modbus协议)

    RS485通信(Modbus协议) 协议介绍 RS485介绍:http://t.csdn.cn/bOuFX Modbus协议:http://t.csdn.cn/mgioX CubeMX配置 RS-48 ...

  8. stm32单片机使用串口通信连接GY-33颜色传感器完成对颜色的识别并且打印出其颜色和对应的RGB值

    目录 1.GY-33介绍及其接线 2.通信原理 3.代码 4.GY-33发送出来的数据及如何处理数据​ 5.软件使用 所需:stm32单片机(这里使用的是正点原子stm32mini板),GY_33传感 ...

  9. STM32中关于串口通信的printf()函数重定向问题

    在STM32串口通信程序中使用printf()函数发送数据非常方便,但是需要先进行简单的配置,下面介绍两种配置方法. 方法一.对工程属性进行配置 第1步:在main.c中包含"stdio.h ...

最新文章

  1. UI培训教程分享:常用的商业插画风格有哪些?
  2. 1202: [HNOI2005]狡猾的商人
  3. first day in microsoft
  4. 【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】
  5. 【渝粤教育】国家开放大学2018年春季 0599-22T工程造价管理基础理论与相关法规 参考试题
  6. 稀疏数组(数据结构)
  7. 学术牛人教你如何阅读外国文献
  8. 安徽省第二次计算机水平考试,2006第二次安徽省计算机水平考试试卷(ACCESS).doc...
  9. 【kafka】Kafka消费者分区分配策略详解
  10. C语言中定义整形可以连等吗,关于一道分解整数为N个连数整数的编程题
  11. 使用Redis Desktop Manager连接Redis服务器
  12. Matlab: 汉字转拼音函数包
  13. 学习矩阵分析与应用过程中的点滴记录(一)
  14. 微信小程序视频+微信视频号视频下载教程
  15. python mql4跟单_MT4本地跟单EA设置教程 -
  16. VC++6.0:一点击【打开】就闪退
  17. html新浪短域名api,新浪(t.cn)短网址API-API文档-免费api接口-短网址工具
  18. BZOJ1189: [HNOI2007]紧急疏散evacuate(二分答案,最大流)
  19. 冰蝎shell_冰蝎动态二进制加密WebShell特征分析
  20. windows磁盘引导分区

热门文章

  1. 迈克尔逊干涉仪仿真程序_迈克尔逊入门:Tezos的脚本语言(第3部分)
  2. Python3网络爬虫快速入门实战解析
  3. Mybatis错误总结
  4. 地图绘制和四色算法,图搜索算法,最小生成树算法,最短路径算法
  5. 实践练习六(必选):OceanBase TPC-C 测试和查看 执行计划
  6. 爬虫:获取豆瓣电影爱情片榜单封面图片
  7. wps或者office打印设置缩印
  8. b/s系统扫描仪扫描上传
  9. 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题解析
  10. K8s 集群中存储对象灾备的落地实践