串口通信格式:异步
串口通信能够分为同步通信(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位置。意思是若是你开起了校验位,那么数据位须要设置为你所须要传输数据的位数加一,不然可能出问题。以几张时序图做为参考(第一次画,看着别扭):spa
一、传输无校验位3d
左图中起始位占据1bit,数据位占据8bit(若是设为数据位7bit,那数据位只有7个方格,同理至5bit、6bit),中止位占据1bit,不含校验位,两端表示空闲状态,这种数据格式配置是普通使用最多见的。右图中起始位占据1bit,数据位占据9bit,中止位占据1bit,不含校验位,两端表示空闲状态;通常咱们都是以字节数据传输,这种配置时有9bit可用,MSB这一位一般用做校验位,并且这个校验位能够由用户随意指定;对于STM32使用者来讲,虽然寄存器配置没法直接实现Mark校验和Space校验,但用户可以使用该格式手动设置MSB,充当Mark校验或者Space校验结果使用,由于真实的校验结果也是放在数据位的MSB位置。blog
二、传输有校验位get
左图配置起始位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。it
码元学习:class
百度百科里面介绍:码元,承载信息量的基本信号单位。在数字通讯中经常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为(二进制)码元。 而这个间隔被称为码元长度。值得注意的是当码元的离散状态有大于2个时(如M大于2个) 时,此时码元为M进制码元。百度
码元传输速率,又称为码元速率或传码率。其定义为每秒钟传送码元的数目,单位为"波特",又能够称为波特率,经常使用符号"Baud"表示,简写为"B"。一个码元可能由多个位组成,因此波特率不必定等于比特率。若是一个码元只须要表示2个级别状态(0和1),那么一个码元就是一个位,此时波特率等于比特率;若是一个码元须要表示4个级别状态(0、一、2和3),那么一个码元须要两个位表示(即一个码元占据两个位,对数关系),此时波特率等于比特率的1/2。
MODBUS 超时时间:
一、两帧之间超时时间为3.5字符 二、一帧数据中每一个字符超时时间为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 。