原创 精讲串口通信协议,小白少走弯路的东西

      最后更新:2022-05-20 00:41:58 手机定位技术交流文章

      精讲 串口通信协议 小白少走弯路的东西

      // / 今年年初,我创立了一个介绍性方案。你可以免费获得它,如果你想要的的话。你可以依靠我。 ~ 你可以像黑字和我的土白金一样得到我的头。 幸运的是,你一直忙碌, 在一个基础上, 并且把孩子带到省一级或更高一级。 ///

      但许多人还没有读过其中的复杂之处,这篇论文十分详细,并将在协议中深入阐述。

      1 、串口协议简介

      什么是串口通信?

      简而言之,连环通信是通过一条线索进行的。 T X 只需提及发送。当然,它仍然被覆盖。 GN D ),将需要的数据 bi t 流动流向接收端,由于这些流动是通信,应由所涉各方制定数据传输的程序和标准。

      您可以随时打开序列助手。如果您想要使用序列,必须指定端口、端口费率、数据比特、停止比特、检查位置和流程控制等规格。

      如果接收和传输端的配置不同,则可能发生数据异常。

      端口:这是不言自明的:插入序列芯片,并在计算机上显示端口号。

      现在,我们研究一下港口费率、数据位置、停靠位置、校准位置和流量控制(因为很少使用)在平方信号方面的作用。

      2 、电平信号分析

      开放串行工具, 独立修改以下设置 。

      调整参 9600/8/N/ 1 ,发送十六进制数 55 AA

      调整参 115200/8/N/ 1 发送十六进制数 55 AA

      调整参 9600/7/N/ 1 发送十六进制数 55 AA

      调整参 9600/8/O/ 1 发送十六进制数 55 BA

      调整参 9600/8/E/ 1 发送十六进制数 55 BA

      调整参 9600/8/N/ 2 发送十六进制数 55 AA

      B 代表起始位 E 显然,这是首先通报的。 bi t ,再传输的 bi t

      分析,调整 波特率 它对波浪的整体形式没有影响,只是.. bi t 的持续时长不同 960 0 波特率时的一 bi t 大概 104u s 11520 0 波特率大概 9u s ,这是可以算出来 960 0 1000ms/9600 = 104.1u s 11520 0 1000/115200=8.6u s 传送速度越快,港口费率越高。

      分析,调整 数据位 5 5 本来应该 0101010 1 但是数据位调整 7 之后 5 5 变成 101010 1 A A 本来 1010101 0 变成 010101 0 一般而言,数据位设置不修改,除非有独特的需要。

      ①④ 分析,将 校验位 调整至奇校 (ODD ) 后,传输 bi t 还有另外一种奇怪的校准, 这意味着如果它处于第一位, 它就处于第一位。 8 bi t bi t 位数是偶数, 顶部需要一个位数 。 1 ,否则 0 5 5 传输变成 (1)0101010 1 B A (0)1011101 0 ,同样偶校验 EVE N MAS K 校验(校验位始终 1 SPAC E 校验(校验位始终 0 )是相同的道理。

      分析,将 停止位 设置 2 ,转让的结论(如图所示) E )变成之前 2 乘法 。 分析 。 设置停止位, 在数据传输完成后调整停止位置 。 bi t 持续的时间。

      3 为什么开始和结束?

      一般理解波段、数据比特和校准是为了满足各种业务要求,但开始和停止位置的目的是什么?

      起始位置:通常,电线是高层次的,探测到接收数据的低层次信号,发送者可以借此告诉接收者接受数据。 (不考虑液体控制)

      停止点:发送方将结束交货的方法通知接收方。 暂停一 继续发送以下字节 。

      “最初姿势的目的显而易见,但为什么停止呢?” 质疑这位华丽的男人。这并非总能达成一致。 8 bi t ,接收方不能就接受 8 bi t 此后,一个字节传输被视为已完成。 O K 了吗?

      考虑这个阶段是个好主意。如果我们是设计师, 我们会为接收数据创建一个虚构的代码。

      / / 接收端接收数据线程

      while(1) {

      / / 楼下,我得到了一个启动。

      if((isGetStartFlag == 0) && getDownEdge()) {

      Delayus(52);

      / / 检测起始位低电平

      if(isLowPin()) {

      isGetStartFlag = 1;

      getBitIndex = 0;

      }

      }

      / / 已经接收到起始位

      if(isGetStartFlag) {

      Delayus(104);

      if(getHighOrLow() == high) {

      / / 接收 1bit

      }else {

      / / 接收 0bit

      }

      getBitIndex++;

      if(getBitIndex == 8) {

      / / 字节接收完成

      isGetStartFlag = 0;

      getBitIndex = 0;

      }

      }

      }

      如果没有停留地点,根据这种假编码推理,存在两个困难。

      1 我们也许无法避免最坏的情况。

      如果转让了最后字节 0 ,以及以下字节的开始 0 我将再次问那个帅哥。 如果下一个字节的开始没有被识别, 下一个字节的转换无法启动, 数据丢失了。 我不会看负面的; 我只会看低层次的 。 getDownEdg e isLowPi n 功能是好的,这将导致 第二次调查。

      2 、时钟同步问题

      A B 1 0 确实,你让我在一分钟内喝水。 B 就看着自己的表 1 0 分钟后提 A ,这 A 一看表,才过 9 场景的真相将出现, 事业将随之而来。 A B 它不同步, 或正在引入错误 。 A B 所指 1 0 这不一样,是发件人和收件人 960 0 这就是安排,波特的费率 104.1u s 根据上述虚构代码,应发送一个字节,并设立几个收集点。

      然而,由于错误,这可能导致收集点被转用于:

      这两张照片显示时钟没有同步, 导致接收器的接收点转移, 如果在那一刻插入停止位置, 第二张图像就会出现 。 BYT E 因为它仍在从开始的下降线中收集, 它被重置到顶部。 BYT E 引入的误差。

      4 、总结

      它基本上是对序列协议的全面调查, 重要的是从设计的角度来考虑这个设计的功能, 如果有什么问题, 请指出来。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/25317.html

          热门文章

          文章分类