串口通讯格式:

  串口通讯可以分为同步通讯(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. Width Height -- (2)

    上回说到,宽高对于块级元素和行内元素发生的改变,结果是块级元素会接受宽高属性所发生的改变的,而行内元素不接受宽高属性所发生的改变. 但是,事无绝对 —— CSS属性display 通过上回进行的测试我 ...

  2. js 实现watch监听数据变化

    1.js /** * @desc 属性改变监听,属性被set时出发watch的方法,类似vue的watch * @author Jason * @study https://www.jianshu.c ...

  3. CDA数据分析【数据处理工具SPSS】

    一.概述 SPSS[Statistical Package for the Social Science]社会科学统计软件包.SPSS统计软件在社会学.经济学.心理学.教育学等多个学科的研究工作和通信 ...

  4. centos7安装mysql注意点

    yum安装yum -y install mariadb-server 启动服务systemctl start mariadb.service 开机自动启动systemctl enable mariad ...

  5. [windows]c盘瘦身、系统盘清理临时文件、缓存等垃圾文件

    前言 虽然现在已经9102年了硬盘空间越来越大越便宜,但win系统用久了系统盘还是会渐渐变小的,公司的电脑系统盘就已经不够用了经常爆红,这个时候两个简单快速高效的办法 1.扩大系统盘空间,可以使用 w ...

  6. vue-router编程式跳转

    除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现. [语法] .

  7. python 数据库小测试

    1.整理博客 2.详细解释下列mysql执行语句的每个参数与参数值的含义 ​ mysql -hlocalhost -P3306 -uroot -proot # mysql (连接数据库) # hloc ...

  8. javascript中 encodeURIComponent() 与 encodeURI() 的区别

    前言:js 中仅有的几个全局函数中,有两个全局函数可以用来编码url 字符串. 一.encodeURIComponent() 将转义用于分隔 URI 各个部分的标点符号 ,也就是可以编码 " ...

  9. Pandas | 19 合并/连接

    Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似.Pandas提供了一个单独的merge()函数,作为DataFrame对象之间所有标准数据库连接操作的入口 - pd.me ...

  10. Pandas | 01 数据结构

    Pandas的三种数据结构: 系列(Series) 数据帧(DataFrame) 面板(Panel) 这些数据结构,构建在Numpy数组之上,这意味着它们很快 维数和描述 考虑这些数据结构的最好方法是 ...