一种检测RS232串口波特率的方法转让专利

申请号 : CN201510582005.4

文献号 : CN105095038B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈杰

申请人 : 西安航空学院

摘要 :

本发明属于通信领域,公开了一种检测RS232串口波特率的方法。该方法包括如下步骤:数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字;检测所述数据字的第一低电平的时长、第一高电平的时长、第二低电平的时长;根据所述第一低电平的时长、所述第一高电平的时长以及所述第二低电平的时长,确定所述RS232串口波特率,不需要检测码即可对信号的波特率进行智能检测。

权利要求 :

1.一种检测RS232串口波特率的方法,所述RS232用于连接计算机和数字处理芯片,以使得所述计算机和所述数字处理芯片采用标准ASCII码进行数据传输,其特征在于,所述方法包括如下步骤:所述数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字;每个数据字的比特位依次为1个比特的起始位,8个比特的数据位,1个比特的校验位,以及1个比特的高电平结束位;或者所述每个数据字的比特位依次为1个比特的起始位,8个比特的数据位,以及1个比特的高电平结束位;

检测任意一个数据字第一低电平的时长、第一高电平的时长、第二低电平的时长,所述数据字起始位的开始时刻为所述数据字第一低电平的开始时刻,所述数据字第一低电平的结束时刻为所述数据字第一高电平的开始时刻,所述数据字第一高电平的结束时刻为所述数据字第二低电平的开始时刻;

根据所述数据字第一低电平的时长、所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率;

其中,在数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字之前,所述方法还包括:计算并记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值;

所述计算并记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,具体包括:以表格的形式记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至

10倍的数值,其中,表格的第一列为从小到大排列的所述RS232各个串口波特率,所述表格的第二列至第十一列依次为每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,所述RS232的串口波特率包括1200波特,2400波特,4800波特,9600波特,19200波特,

38400波特,115200波特,所述每个串口波特率对应传输1个比特位所需时长以检测时钟周期为单位进行表示,其中所述检测时钟周期为115200波特率数据周期的1/2n,n为自然数。

2.根据权利要求1所述的检测RS232串口波特率的方法,其特征在于,所述根据所述数据字第一低电平的时长、所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率,具体包括:若所述数据字第一低电平的时长为第一波特率传输1个比特位所需时长的9倍,则确定所述RS232串口波特率为所述第一波特率;

若所述数据字第一低电平的时长为第二波特率传输1个比特位所需时长的5倍,或者若所述数据字第一低电平的时长为第三波特率传输1个比特位所需时长的10倍,则确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,所述第二波特率为所述第三波特率的两倍;

其中,所述第一波特率、所述第二波特率及所述第三波特率为1200波特、2400波特、

4800波特、9600波特、19200波特、38400波特和115200波特7个波特率之一。

3.根据权利要求2所述的检测RS232串口波特率的方法,其特征在于,所述确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,具体包括:采用所述第二波特率接收所述RS232串口传输的第一数据字,若所述第一数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第二波特率为所述RS232串口波特率,否则所述第三波特率为所述RS232串口波特率;

或者,采用所述第三波特率接收所述RS232串口传输的第二数据字,若所述第二数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第三波特率为所述RS232串口波特率,否则所述第二波特率为所述RS232串口波特率。

4.根据权利要求1所述的检测RS232串口波特率的方法,其特征在于,所述根据所述数据字第一低电平的时长,所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率,还具体包括:若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数5,则所述数据字第一高电平的时长除以公约数5之后的值即为所述RS232串口波特率;

若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数7,则所述数据字第一高电平的时长除以公约数7之后的值即为所述RS232串口波特率;

若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数3,则所述数据字第一高电平的时长除以公约数3之后的值为第四波特率,所述数据字第一高电平的时长除以公约数3之后的值的两倍为第五波特率,确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,所述第四波特率为所述第五波特率的两倍;

若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长不存在公约数3、公约数5、公约数7和公约数9,则所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长的最大公约数的值为第六波特率,所述第六波特率的两倍为第七波特率,确定所述RS232串口波特率为所述第六波特率或者所述第七波特率。

5.根据权利要求4所述的检测RS232串口波特率的方法,其特征在于,所述确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,具体包括:采用所述第四波特率接收所述RS232串口传输的第三数据字,若所述第三数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第四波特率为所述RS232串口波特率,否则所述第五波特率为所述RS232串口波特率;

或者,采用所述第五波特率接收所述RS232串口传输的第四数据字,若所述第四数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第五波特率为所述RS232串口波特率,否则所述第四波特率为所述RS232串口波特率。

6.根据权利要求4所述的检测RS232串口波特率的方法,其特征在于,所述确定所述RS232串口波特率为所述第六波特率或者所述第七波特率,具体包括:采用所述第六波特率接收所述RS232串口传输的第五数据字,若所述第五数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第六波特率为所述RS232串口波特率,否则所述第七波特率为所述RS232串口波特率;

或者,采用所述第七波特率接收所述RS232串口传输第六数据字,若所述第六数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第七波特率为所述RS232串口波特率,否则所述第六波特率为所述RS232串口波特率。

7.根据权利要求1所述的检测RS232串口波特率的方法,其特征在于,若所述数字处理芯片检测到所述数据线上高电平的持续时长大于或者等于10毫秒,则确定由所述高电平跳变至所述低电平时即为所述数据字起始位的开始时刻。

说明书 :

一种检测RS232串口波特率的方法

技术领域

[0001] 本发明涉及通信领域,尤其涉及一种检测RS232串口波特率的方法,本发明检测RS232串口波特率的方法用于采用RS232串口通信的系统。

背景技术

[0002] 常见的采用RS232串口通信的系统,其发送端和接收端必须事先约定传输的速率才能实现正常通信;当信号发送端的数据传输速率改变或接收端事先不知道发送端的传输速率时,即需要检测数据传输的波特率。
[0003] 现有检测波特率的方法大多需要事先约定检测码,并且只能对几个特定的速率检测,缺乏灵活性。

发明内容

[0004] 针对上述问题,本发明的目的在于提供一种检测RS232串口波特率的方法,不需要检测码即可对RS232串口波特率进行智能检测,且检测的范围可以涵盖所有可能的RS232串口波特率。
[0005] 为达到上述目的,本发明的实施例采用如下技术方案予以实现。
[0006] 一种检测RS232串口波特率的方法,所述RS232用于连接计算机和数字处理芯片,以使得所述计算机和所述数字处理芯片采用标准ASCII码进行数据传输,所述方法包括如下步骤:
[0007] 所述数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字;每个数据字的比特位依次为1个比特的起始位,8个比特的数据位,1个比特的校验位,以及1个比特的高电平结束位;或者所述每个数据字的比特位依次为1个比特的起始位,8个比特的数据位,以及1个比特的高电平结束位;
[0008] 检测任意一个数据字第一低电平的时长、第一高电平的时长、第二低电平的时长,所述数据字起始位的开始时刻为所述数据字第一低电平的开始时刻,所述数据字第一低电平的结束时刻为所述数据字第一高电平的开始时刻,所述数据字第一高电平的结束时刻为所述数据字第二低电平的开始时刻;
[0009] 根据所述数据字第一低电平的时长、所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率。
[0010] 本发明的特点和进一步的改进为:
[0011] (1)在数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字之前,所述方法还包括:
[0012] 计算并记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值。
[0013] (2)计算并记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,具体包括:
[0014] 以表格的形式记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,其中,表格的第一列为从小到大排列的所述RS232的各个串口波特率,所述表格的第二列至第十一列依次为每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,所述RS232的串口波特率包括1200波特,2400波特,4800波特,9600波特,19200波特,38400波特,115200波特,所述每个串口波特率对应传输1个比特位所需时长以检测时钟周期为单位进行表示,其中所述检测时钟周期为115200波特率数据周期的1/2n,n为自然数。
[0015] (3)所述根据所述数据字第一低电平的时长、所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率,具体包括:
[0016] 若所述数据字第一低电平的时长为第一波特率传输1个比特位所需时长的9倍,则确定所述RS232串口波特率为所述第一波特率;
[0017] 若所述数据字第一低电平的时长为第二波特率传输1个比特位所需时长的5倍,或者若所述数据字第一低电平的时长为第三波特率传输1个比特位所需时长的10倍,则确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,所述第二波特率为所述第三波特率的两倍。
[0018] (4)所述确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,具体包括:
[0019] 采用所述第二波特率接收所述RS232串口传输的第一数据字,若所述第一数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第二波特率为所述RS232串口波特率,否则所述第三波特率为所述RS232串口波特率;
[0020] 或者,采用所述第三波特率接收所述RS232串口传输的第二数据字,若所述第二数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第三波特率为所述RS232串口波特率,否则所述第二波特率为所述RS232串口波特率。
[0021] (5)所述根据所述数据字第一低电平的时长,所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率,还具体包括:
[0022] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数5,则所述数据字第一高电平的时长除以公约数5之后的值即为所述RS232串口波特率;
[0023] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数7,则所述数据字第一高电平的时长除以公约数7之后的值即为所述RS232串口波特率;
[0024] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数3,则所述数据字第一高电平的时长除以公约数3之后的值为第四波特率,所述数据字第一高电平的时长除以公约数3之后的值的两倍为第五波特率,确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,所述第四波特率为所述第五波特率的两倍;
[0025] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长不存在公约数3、公约数5、公约数7和公约数9,则所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长的最大公约数的值为第六波特率,所述第六波特率的两倍为第七波特率,确定所述RS232串口波特率为所述第六波特率或者所述第七波特率。
[0026] (6)所述确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,具体包括:
[0027] 采用所述第四波特率接收所述RS232串口传输的第三数据字,若所述第三数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第四波特率为所述RS232串口波特率,否则所述第五波特率为所述RS232串口波特率;
[0028] 或者,采用所述第五波特率接收所述RS232串口传输的第四数据字,若所述第四数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第五波特率为所述RS232串口波特率,否则所述第四波特率为所述RS232串口波特率。
[0029] (7)所述确定所述RS232串口波特率为所述第六波特率或者所述第七波特率,具体包括:
[0030] 采用所述第六波特率接收所述RS232串口传输的第五数据字,若所述第五数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第六波特率为所述RS232串口波特率,否则所述第七波特率为所述RS232串口波特率;
[0031] 或者,采用所述第七波特率接收所述RS232串口传输第六数据字,若所述第六数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第七波特率为所述RS232串口波特率,否则所述第六波特率为所述RS232串口波特率。
[0032] (8)若所述数字处理芯片检测到所述数据线上高电平的持续时长大于或者等于10毫秒时,则确定由所述高电平跳变至低电平时即为所述数据字的起始位的开始时刻。
[0033] 本发明相对于现有技术的优点为:对常见的计算机和数字处理芯片之间通过RS232进行ASCII码通信时,在接收端数字处理芯片不知道发射端计算机信号波特率的情况下,不需要检测码即可对RS232串口波特率进行智能检测,检测的范围涵盖了所有可能的RS232波特率。

附图说明

[0034] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0035] 图1为本发明实施例提供的检测RS232串口波特率的方法的流程示意图一;
[0036] 图2为本发明实施例提供的RS232传输数据的数据格式示意图一;
[0037] 图3为本发明实施例提供的检测RS232串口波特率的方法的流程示意图二;
[0038] 图4为本发明实施例提供的RS232传输数据的数据格式示意图二;
[0039] 图5为本发明实施例提供的RS232传输数据的数据格式示意图三;
[0040] 图6为本发明实施例提供的RS232传输数据的数据格式示意图四;

具体实施方式

[0041] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0042] 本发明实施例提供一种检测RS232串口波特率的方法,所述RS232用于连接计算机和数字处理芯片,以使得所述计算机和所述数字处理芯片进行ASCII数据传输。
[0043] 如图1所示,本发明实施例提供的检测RS232串口波特率的方法包括如下步骤:
[0044] 步骤1,数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字。
[0045] 当计算机与数字处理芯片约定的传输数据的格式中包含校验位时,所述每个数据字的比特位依次为1个比特的起始位,8个比特的数据位,1个比特的校验位,以及1个比特的高电平结束位;当计算机与数字处理芯片约定的传输数据的格式中不包含校验位时,所述数据字的比特位依次为1个比特的起始位,8个比特的数据位,以及1个比特的高电平结束位。
[0046] 示例性的,如图2所示为RS232串口通信的一个数据字的数据结构,起始位表示开始传送数据。当数据线为高电平且持续至少10ms(如图2中TR所示),说明数据线正处于空闲状态。当检测到空闲状态后如果监测到数据线由高到低跳变则其后的低电平必为开始电平。
[0047] 由于计算机发送的信号来自键盘,发送数据为ASCII码,而ASCII码数据在0至127之间,所以发送的8位数据的最高位第8位即图2中的bit7为0。校验位可能存在也可能不存在,可能为数字信号0也可能为数字信号1,所以图2中校验位中有一“X”。数据段bit0-bit6中的X表示数据可能为数字信号0也可能为数字信号1,根据传送的内容而定,结束位为高电平。
[0048] 进一步的,如图3所示,本发明实施例提供的检测RS232串口波特率的方法在数字处理芯片采用数据线依次接收通过所述RS232串口传输的多个数据字之前,所述方法还包括:
[0049] 计算并记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值。
[0050] 示例性的,在实际应用中,常见的计算机和数字处理芯片之间通过RS232进行ASCII通信时,可以以表格的形式记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,其中,表格的第一列为从小到大排列的所述RS232的各个串口波特率,所述表格的第二列至第十一列依次为每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值,所述RS232的串口波特率包括1200波特,2400波特,4800波特,9600波特,19200波特,38400波特,115200波特,所述每个串口波特率对应传输1个比特位所需时长以检测时钟周期为单位进行表示,其中所述检测时钟周期为115200波特数据周期的1/2n,n为自然数。
[0051] 步骤2,检测任意一个数据字第一低电平的时长、第一高电平的时长、第二低电平的时长,所述数据字起始位的开始时刻为所述数据字第一低电平的开始时刻,所述数据字第一低电平的结束时刻为所述数据字第一高电平的开始时刻,所述数据字第一高电平的结束时刻为所述数据字第二低电平的开始时刻。
[0052] 步骤3,根据所述数据字第一低电平的时长、所述数据字第一高电平的时长以及所述数据字第二低电平的时长,确定所述RS232串口波特率。
[0053] 若所述数据字第一低电平的时长为第一波特率传输1个比特位所需时长的9倍,则确定所述RS232串口波特率为所述第一波特率。
[0054] 若所述数据字第一低电平的时长为第二波特率传输1个比特位所需时长的5倍,或者若所述数据字第一低电平的时长为第三波特率传输1个比特位所需时长的10倍,则确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,所述第二波特率为所述第三波特率的两倍。
[0055] 所述确定所述RS232串口波特率为所述第二波特率或者所述第三波特率,具体包括:采用所述第二波特率接收所述RS232串口传输的第一数据字,若所述第一数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第二波特率为所述RS232串口波特率,否则所述第三波特率为所述RS232串口波特率;
[0056] 或者,采用所述第三波特率接收所述RS232串口传输的第二数据字,若所述第二数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第三波特率为所述RS232串口波特率,否则所述第二波特率为所述RS232串口波特率。
[0057] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数5,则所述数据字第一高电平的时长除以公约数5之后的值即为所述RS232串口波特率。
[0058] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数7,则所述数据字第一高电平的时长除以公约数7之后的值即为所述RS232串口波特率。
[0059] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长存在公约数3,则所述数据字第一高电平的时长除以公约数3之后的值为第四波特率,所述数据字第一高电平的时长除以公约数3之后的值的两倍为第五波特率,确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,所述第四波特率为所述第五波特率的两倍。
[0060] 所述确定所述RS232串口波特率为所述第四波特率或者所述第五波特率,具体包括:采用所述第四波特率接收所述RS232串口传输的第三数据字,若所述第三数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第四波特率为所述RS232串口波特率,否则所述第五波特率为所述RS232串口波特率;
[0061] 或者,采用所述第五波特率接收所述RS232串口传输的第四数据字,若所述第四数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第五波特率为所述RS232串口波特率,否则所述第四波特率为所述RS232串口波特率。
[0062] 若所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长不存在公约数3、公约数5、公约数7和公约数9,则所述数据字第一低电平的时长、所述数据字第一高电平的时长和所述数据字第二低电平的时长的最大公约数的值为第六波特率,所述第六波特率的两倍为第七波特率,确定所述RS232串口波特率为所述第六波特率或者所述第七波特率。
[0063] 所述确定所述RS232串口波特率为所述第六波特率或者所述第七波特率,具体包括:采用所述第六波特率接收所述RS232串口传输的第五数据字,若所述第五数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第六波特率为所述RS232串口波特率,否则所述第七波特率为所述RS232串口波特率;
[0064] 或者,采用所述第七波特率接收所述RS232串口传输第六数据字,若所述第六数据字满足起始位为低电平,数据位中的最高位为低电平,且结束位为高电平,则所述第七波特率为所述RS232串口波特率,否则所述第六波特率为所述RS232串口波特率。
[0065] 示例性的,在实际应用中,常见的计算机和数字处理芯片之间通过RS232进行ASCII通信时,可以按如下过程检测RS232串口波特率。
[0066] 以表格的形式记录所述RS232的每个串口波特率对应传输1个比特位所需时长的1倍至10倍的数值之后,进行如下步骤:
[0067] (1)将RS232串口波特率的每个波特率的一个比特的时长以检测时钟周期为单位表示成十进制数。时钟频率只要大于115200波特率数据周期的2倍即可。为计算方便,这里检测时钟周期采用115200波特率数据周期的1/16,当然时钟周期也可以采用115200波特率数据周期1/2、1/4、1/8、1/32等。
[0068] 设1200波特对应T1,2400波特对应T2,4800波特对应T3,9600波特对应T4,19200波特对应T5,38400波特对应T6,115200波特对应T7,计算Ti(i=1,2,3,4,5,6,7),2Ti,3Ti,4Ti,5Ti,6Ti,7Ti,8Ti,9Ti,10Ti。将计算的值用二进制表示,所有数值列在一个表格中并预先存储在数字信号处理芯片中。
[0069] 示例性的如表1所示,表1的行分别表示各波特率数据周期的1到10倍,计量单位为115200波特率数据周期的1/16,行表示波特率。这里为了节省空间数值按10进制列出。
[0070] 表1
[0071]  Ti 2Ti 3Ti 4Ti 5Ti 6Ti 7Ti 8Ti 9Ti 10Ti
1200 1024 2048 3072 4096 5120 6144 7168 8192 9216 10240
2400 512 1024 1536 2048 2560 3072 3584 4096 4608 5120
4800 256 512 768 1024 1280 1536 1792 2048 2304 2560
9600 128 256 384 512 640 768 896 1024 1152 1280
19200 64 128 192 256 320 384 448 512 576 640
38400 32 64 96 128 160 192 224 256 288 320
115200 16 32 48 64 80 96 112 128 144 160
[0072] (2)检测接收到的数据字是否是ASCII码“\null”:检测开始电平后第一个低电平的时长。如果第一个低电平的时长不是某一波特速率一个比特时长的10倍或9倍,则接收到的数据字必定不是ASCII码“\null”。“\null”的ASCII码是二进制码“00000000”。
[0073] 这是因为如果接收到的数据字是“\null”,则其数据结构如图4所示,图4和图2类似,但bit0-bit7均为低电平数字信号0。校验位是数字信号0时从起始位开始为连续10个数字信号0,无校验位或校验位为数字信号1时从起始位开始为连续9个数字信号0。
[0074] 如果检测到开始电平后第一个低电平的时长是某一速率一个比特时长的9倍,由表1可知其对应的波特率是唯一的,由表1可以查得其对应的波特率。这是由于表1中的数值存在因数9的数据只在9Ti列且该列各数据互不相同。且不存在第一个低电平的时长是某一速率一个比特时长的18倍或36倍或9*2n(n=1,2,…)的情况。
[0075] 示例性的,以18倍为例说明原因:开始电平后第一个低电平的时长是某一速率一个比特时长的9倍,数据结构如图4所示,若按18倍的情况,图4中的起始位后至少有16个数字信号0,则结束位必为数字信号0,但实际上按RS232协议结束位一定是数字信号1,因此与实际的RS232协议的数据结构矛盾,所以当检测到开始电平后第一个低电平的时长是某一速率一个比特时长的9倍时,其对应的波特率是唯一的。
[0076] 进一步的,如果检测到开始电平后第一个低电平的时长是某一速率一个比特时长的10倍(或存在因数5),由表1可知其对应的波特率是只在的5Ti列和10Ti列且必存在校验位(这是因为不存在校验位时起始位后有9个数字信号0,为9的倍数,不存在因数5)。其可能的波特率只有两个且为2倍关系。其他的倍数不可能出现,原因和上述9倍的情况相同。这里以4倍的情况为例说明原因:若可能的波特率存在4倍关系,图5中的起始位后至少有32个数字信号0,则结束位必为数字信号0,但实际上按RS232协议结束位一定是数字信号1,其他的倍数依次类推,都可以导致结束位为数字0的情况,与实际的数据结构(图4实际的结束位为数字信号1)矛盾,所以其可能的波特率只有两个且为2倍关系。按图5所示,数据的起始位、bit7必为数字信号0而结束位必为数字信号1。为了进一步确定数据的波特率,这时分别用这两个可能的波特率接收数据,检查接收的后续数据的起始位、bit7和结束位,出现矛盾的波特率就可以排除。实际的验证表明,只要接收5个数据就可以完全确定数据的实际波特率。
[0077] (3)如果接收数据字非“\null”,由于bit7位总为数字信号0,所以图4中bit0-bit6中必有至少一个比特位非零,否则比特位全是数字信号0,接收数据就成为“\null”,这与接收数据非“\null”的断定矛盾。
[0078] 接收数据非“\null”时的实际数据结构如图5所示。其中数据段1、数据段3和校验位可能是高电平也可能是低电平,可能存在也可能不存在,而数据段2必然存在且为高电平。数据段1,2,3合在一起即为bit0-bit6。由于ASCII码范围为0-127,所以bit7仍然总是为低电平。
[0079] 根据图5的数据结构特点,在波特率未知情况下,可以断定起始位后必然有一段低电平,其后必然有至少有一比特高电平,而高电平之后必然有至少1比特低电平(由于bit7=‘0’),这个顺序是确定无疑的,如图6所示。
[0080] 进一步的,图6中的低电平数据段1为低电平,其时间宽度可以是0;高电平数据段2的宽度至少1bit,且为高电平;低电平数据段3可能包括bit7也可能不包括bit7,其宽度至少1bit,且为低电平。
[0081] 根据图6中的高低电平顺序特点,可以得到一个结论:检测到的可能的波特率最多只能存在2倍关系。因为对一个可能的波特率,图6中从起始位到低电平数据段3结束的最短数据为二进制“10”,如果其4倍波特率也是可能的,则起始位后最短二进制“10”成为二进制数“00011110000”,其第9、10位均为“0”,而这两位必是校验位和停止位,而按RS232协议,停止位必为“1”,形成矛盾,所以4倍波特率关系不可能存在。而其他的如8、16、32等倍数关系按相同的道理也不可能存在。所以检测到的可能的波特率最多只能存在2倍关系的结论是正确的。
[0082] 因此,这种情况下数据的特点如下:
[0083] (A)起始位为低电平;
[0084] (B)高低电平的顺序如图6所示;
[0085] (C)bit7为低电平,如图5所示;
[0086] (D)结束位为高电平,如图5所示;
[0087] (E)图5中起始位之后的全部高低电平均属于一个数据字,其长度以比特为单位是整数,其总长度不超过10bit。
[0088] 根据这四个特点可以对RS232串口波特率进行检测,方法如下:
[0089] 第一步:检测图6中从起始位开始的低电平的时长TB+TD1(即第一低电平的时长);检测高电平数据段的时长TD2(即第一高电平的时长);检测低电平数据段3的时长TD3(即第二低电平的时长)。这三个数均为正整数。
[0090] 第二步:检验(TB+TD1)、TD2和TD3是否存在约数5或7,如果存在,设TD2有约数5或7,则TD2约去这个相应的约数即为数据的波特率。这个结论的证明和前面第3步相应于开始电平后第一个低电平的时长是某一速率一个比特时长的9倍波特率的类似。如果不存在约数5或7转下一步。
[0091] 第三步:检验(TB+TD1)、TD2和TD3是否存在约数3,如果存在,设TD2有约数3,则TD2约去3所得的数和其2倍即为数据的两个可能波特率。分别用这两个波特率接收数据并用特点(A)(C)(D)检验接收的数据,出现矛盾的波特率就可以排除。实际的验证表明,只要接收5个数据就可以完全确定数据的实际波特率。如果不存在约数3转下一步。
[0092] 第四步:计算(TB+TD1)、TD2和TD3的最大公约数,这个值和其2倍即为数据的两个可能波特率。分别用这两个波特率接收数据并用特点(A)(C)(D)检验接收的数据,出现矛盾的波特率就可以排除。实际的验证表明,只要接收5个数据就可以完全确定数据的实际波特率。
[0093] 需要说明的是,本发明实施例是在检测时钟周期为115200波特率数据周期的1/2n的基础上对本发明的技术方案进行阐述的,本领域技术人员可以理解的,当检测时钟周期为115200波特率数据周期的1/m,m为大于2的其他任意自然数时,本发明的技术方案也是适用的,只不过方案中涉及到的具体数值要根据m的值做相应调整。
[0094] 本发明实施例提供的检测RS232串口波特率的方法,对常见的计算机和数字处理芯片之间通过RS232进行ASCII码通信时,在接收端数字处理芯片不知道发射端计算机信号波特率的情况下,不需要检测码即可对信号的波特率进行智能检测。检测的范围涵盖了所有可能的RS232波特率。
[0095] 本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机或数字处理芯片可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、Flash存储器等各种可以存储程序代码的介质。
[0096] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。