串口通讯格式:

  串口通讯可以分为同步通讯(Synchronous)和异步通讯(Asynchronous)。同步通讯时有一根时钟信号,数据格式中没有起始位和停止位;异步通讯中没有时钟信号,数据格式中包含起始位和停止位。此次记录内容为使用STM32的异步通信配置学习。

  串口异步传输一帧数据需要多个位,这些位的描述为 起始位+数据位+校验位+停止位。起始位是固定的 1bit ,数据位、校验位和停止位是可配置的,常见的配置类型如:数据位可配置格式为 5bit、6bit、7bit、8bit和9bit(PC端无法配置9bit),STM32好像不能配置5bit和6bit;校验位1bit,可配置为无校验、奇校验、偶校验、1校验(Mark)和0校验(Space),Mark校验和Space校验在STM32中好像不能直接配置;停止位可配置格式为1bit、1.5bit和2bit,STM32好像都是1bit停止位。重要的提示:平常使用中,校验位会单独拿出来配置和介绍,但是如果开启了校验功能,校验位是填充在数据位的MSB位置。意思是如果你开起了校验位,那么数据位需要设置为你所需要传输数据的位数加一,否则可能出问题。以几张时序图作为参考(第一次画,看着别扭):

  1、传输无校验位

            

  左图中起始位占据1bit,数据位占据8bit(如果设为数据位7bit,那数据位只有7个方格,同理至5bit、6bit),停止位占据1bit,不含校验位,两端表示空闲状态,这种数据格式配置是普通使用最常见的。右图中起始位占据1bit,数据位占据9bit,停止位占据1bit,不含校验位,两端表示空闲状态;一般我们都是以字节数据传输,这种配置时有9bit可用,MSB这一位通常用作校验位,而且这个校验位可以由用户随意指定;对于STM32使用者来说,虽然寄存器配置无法直接实现Mark校验和Space校验,但用户可使用该格式手动设置MSB,充当Mark校验或者Space校验结果使用,因为真实的校验结果也是放在数据位的MSB位置。

  2、传输有校验位

            

  左图配置起始位1bit、数据位8bit、停止位1bit,开启了校验功能,校验结果1bit占据了数据位的MSB位置,如此当设置为8bit数据位而且开启了校验功能时,用户可传输有效数据只有7bit,MSB会被校验结果强行占据。右图配置起始位1bit、数据位9bit、停止位1bit,开启校验功能,校验结果1bit占据MSB,用户可传输有效数据为8bit数据,恰好是常用的一个字节数据,所以当用户打算开启校验功能而且要保留当前传输数据有效位不变,就要配置数据位加1。对于这个情况,从STM32H7xx参考手册里截图说明如下:

  对于这一点通过程序设置串口为8bit数据位,开启奇校验,使用示波器探测波形进行验证。使用串口发送0xFF数据时,示波器显示传输数据为0x7F,因为0xFF经过校验后会把MSB的1变成0;使用串口发送0x7F数据时,示波器显示传输数据为0x7F。

码元学习:

  百度百科里面介绍:码元,承载信息量的基本信号单位。在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为(二进制)码元。 而这个间隔被称为码元长度。值得注意的是当码元的离散状态有大于2个时(如M大于2个) 时,此时码元为M进制码元。

  码元传输速率,又称为码元速率或传码率。其定义为每秒钟传送码元的数目,单位为"波特",又可以称为波特率,常用符号"Baud"表示,简写为"B"。一个码元可能由多个位组成,所以波特率不一定等于比特率。如果一个码元只需要表示2个级别状态(0和1),那么一个码元就是一个位,此时波特率等于比特率;如果一个码元需要表示4个级别状态(0、1、2和3),那么一个码元需要两个位表示(即一个码元占据两个位,对数关系),此时波特率等于比特率的1/2。

MODBUS 超时时间:

1、两帧之间超时时间为3.5字符  2、一帧数据中每个字符超时时间为1.5字符

MODBUS 中处理一个字符相当于串口处理一帧。

超时时间根据通信速率计算:

  串口传输数据时,一个码元只占据一个位,所以串口的波特率等于比特率。

  bps = bit / s = 位 每 秒!  

  比如串口一帧数据常用的通信格式:起始位(1位) + 数据位(8位) + 校验位(0位) + 停止位(1位) = 10(位)

  9600bps 的比特率下,串口发送字节数据速度为 9600/10 = 960 字符/秒;

  每个字符对应时间为 1s / 960 ,3.5字符时间为 3.5 * 1 / 960 = 0.0036458 s = 3.6458 ms

网上资料指明,在通信速率等于或低于 19200 bps 时,这两个定时必须严格遵守;
对于比特率大于 19200 bps 的情形, 应该使用 2 个定时的固定值 :

  字符间超时时间(t1.5)为 750µs ,

  帧间的超时时间 (t3.5) 为 1.750ms 。

MODBUS 数据格式相关记录的更多相关文章

  1. [Android学习笔记]理解焦点处理原理的相关记录

    焦点处理相关记录 以下所涉及的焦点部分,只是按键移动部分,不明确包含Touch Focus部分 需解决问题 控件的下一个焦点是哪? 分析思路 当用户通过按键(遥控器等)触发焦点切换时,事件指令会通过底 ...

  2. 关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset)

    关于视觉跟踪中评价标准的相关记录(The Evaluation of Visual Tracking Results on OTB-100 Dataset) 2018-01-22  21:49:17 ...

  3. Linux系列笔记 - vim相关记录

    一.常用到的vim命令 这里只简单记录常用到的命令,后面会有自己记录的命令,但有些可能不常用. 常规模式: gg 跳到文件头 shift+g 跳到文件尾 行数+gg 跳到指定行 如:123gg 跳到1 ...

  4. web app 相关记录

    今天在手机浏览器上运行cocos2d-html5的sample, crystalcraze运行起来只有10~20帧, moonwarrior只有20~30帧,很不理想的数据: 记录下几个web app ...

  5. quartz相关记录

    1.http://www.quartz-scheduler.org/api/2.3.1-SNAPSHOT/ api地址 2.https://www.jianshu.com/p/3c3e166a7da1 ...

  6. Jexus使用的相关记录

    前言 本文是零零散散的记录,部分内容是我在平时工作中用到的,部分是从群里"偷"来的,所以难免会有一些错误. 主要还是希望能帮到部分使用Jexus的朋友. 安装 curl https ...

  7. powerdesigner相关记录

    背景 项目逐步开始规范化,表设计直接用designer来,然后生成语句,到oracle数据库,把相关的操作等记录一下, designer版本:15.1 oracle版本:11.2,64位 oracle ...

  8. git使用相关记录

    上传github操作记录:https://blog.csdn.net/pql925/article/details/72772660 git提交仓库相关:https://blog.csdn.net/M ...

  9. MODBUS协议相关代码(CRC验证 客户端程序)

    Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议.通过此协议,控制器相互之间.或控制器经由网络(如以太网)可以和其它设备之间进行通信.Modbus协议使用的是主从通讯技术,即由主设备主 ...

随机推荐

  1. 用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本

    用chrome的snippets片段功能创建页面js外挂程序,从控制台创建js小脚本 Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行.可以访问和从 ...

  2. MYSQL的修改表结构SQL语句

    更多java学习资料>>> 1.背景 使用sql语句对表结构进行修改 2.案例演示 案例:表结构 CREATE TABLE `login_user` ( `id` ) NOT NUL ...

  3. vmware关闭嘟嘟嘟嘟警告

    在使用VMware workstation时,安装的windows或者Linux遇到错误操作时,会发生刺耳的嘟嘟声.如何关闭呢?在VMware虚拟机windows系统中的命令提示符处键入以下命令, 然 ...

  4. k8s集群搭建(一)

    k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...

  5. 十九、Python之socket编程

    socket(套接字)就是建立连接,发送,接收.大部分网络协议都是建立在socket之上的,例如:http,ftp,smtp等等     socket用于描述IP地址和端口,是一个通信链的句柄.应用程 ...

  6. springmvc配置访问静态文件

    xmlns:mvc="http://www.springframework.org/schema/mvc" <mvc:annotation-driven /><m ...

  7. vuex中mapGetters的使用及简单实现原理

    一.项目中的mapGetters在Vue项目的开发过程中必然会使用到vuex,对vue项目公用数据进行管理,从而解决组件之间数据相互通信的问题,如果不使用vuex,那么一些非父子组件之间的数据通信将会 ...

  8. centos7编译安装pgbouncer

    1.下载pgbouncer程序包和libevent依赖包 wget https://github.com/libevent/libevent/releases/download/release-2.1 ...

  9. Kdevelop的安装-2种方法

    使用 Ubuntu 的自带的源: sudo apt-get update sudo apt-get install kdevelop 这就可以了.update这部,假如不换源,更新非常慢.换源方法很简 ...

  10. 为什么mysql事务回滚后,自增ID依然自增

    因为innodb的auto_increament的计数器记录的当前值是保存在存内 存中的,并不是存在于磁盘上,当mysqlserver处于运行的时候,这个计数值只会随着insert改增长,不会随着de ...