何如测试串口的通讯波特率
上一篇 / 下一篇 2007-05-21 08:52:41 / 天气: 晴朗 / 心情: 高兴 / 个人分类:学习日记
E,P H+ab'l!U.Q(\ l0何如测试串口的通讯波特率
bmS/NB0 EDA中国门户网站3@.gL*abTPz EDA中国门户网站\i;yRH?
1gQ%A$~~5Z!X]H*M0 (哈尔滨工业大学控制工程系 150001) 任贵勇 屈彦成 王常虹
1H`p"XtYx#ux:D&f0 EDA中国门户网站{Nl$M\C`
EDA中国门户网站 Ne$x1t3R^D4ch9^&p
EDA中国门户网站;C%kppl&jT
摘 要:给出了一种利用接收到的字符信息检测串行终端通信波特率 的方法。此方法简单、可靠、易行,并给出了实现这种检测方法的伪代码。
]8]E_!X.KRH]0 关键词:自动检测;波特率 EDA中国门户网站jp4uG8?
EDA中国门户网站M5\{ @ Vl[
i|$\2p(cO0 串行通信是终端和主机之间的主要通信方式,通信波特率一般选择1800、4800、9600和 19200等。终端的类型有很多种,其通信速率也有很多种选择。主机怎样确定终端的通信速率呢?本文给出了一种简单、易行的方法:设定主机的接收波特率(以9600波特为例),终端发送一个特定的字符(以回车符为例),主机根据接收到的字符信息就可以确定终端的通信波特率。本文对这种方法予以详述。
;U0q_xi@#[?3^,K0 EDA中国门户网站h6r.t^}ls4MLX~
1 基本方法 EDA中国门户网站[!SI'n\(t(E#p3u9I
回车符的ASCII值为0x0D。串行通信时附加一个起始位和终止位,位的传输顺序一般是 先传低位再传高位。此时回车符的二进制表示方式为: EDA中国门户网站#_ki,mQXVj
x4VRvMO0C0 EDA中国门户网站Q?$N4I5[a%]H
EDA中国门户网站nRSl2M~.x2O
图1 回车符的位序列
Q;v0dV+M$T+m0 EDA中国门户网站t$v&aYd0N(UR1d/@%r2j
串行通信中一个二进制位的传输时间(记为T)取决于通信的波特率,9600波特时一个 二进制位的传输时间是19200波特时一个二进制位传输时间的两倍,即:2*T19200=T 9600。因此,9600波特时一个位的传输时间,19200波特时可以传输两个位。同样地 ,9600波特传输两个位的时间在4800波特时只能传送一个位。主机设定接收波特率为9600, 终端只有也以9600波特发送的字符,主机才能正确地接收。发送波特率高于或低于9600都会 使主机接收到的字符发生错误。接收波特率为9600,终端以不同的波特率发送回车符时,主 机接收到的二进制序列如表1所示。
G V)y,Sx0 从表1中可以看出,除了19200和1800波特时两种特例情况,其他情形的二进制序列都是 9600波特时二进制序列的变换。取前十个二进制位与9600波特时的二进制位相对应。忽略缺 少停止位‘1’引发的数据帧错误,把接收到的字符表示成字节方式(如表1的最右列所示) 。例如:在发送速率为1200波特,接收速率为9600波特时,主机得到的字节是0x80,而不 是正确的回车符0x0D。因为在不同的发送速率下(9600,4800,2400,1200)得到的字节 不同,所以通过接收字符的判定就可以确定发送波特率。 EDA中国门户网站+cd;M*c2q}hTMw)r
发送波特率为19200时,其发送速度正好是接收速度(9600波特)的两倍,因此发送端 的两个二进制位会被接收端看作一个。取决于不同的串行接口硬件,‘01’和‘10’这两种 二进制位组合可能被认为是‘1’或者‘0’。幸运的是,只有0~4位存在这样的歧义问题, 后面的位因为都是停止位,所以都是‘1’。因此,发送速率为19200波特时接收到的字符其高半个字节为0xF。低半个字节可能是多个值中的一个,但不会是0x0,因为0x0D中有相邻 的两个‘1’,这就会至少在低半个字节中产生一个‘1’。因此,整个字节的形式为0xF?, 且低半个字节不为0。 EDA中国门户网站%]/KZ%H1} o
EDA中国门户网站
M%CTSh7CE
表1 不同波特率下的二进制序列
4TnC.l-kb9WX0
-M2}L2Emd#P0 波特率
-t({ `Lh?bZ0 接收到的二进制位序列 EDA中国门户网站$~9?9M6Fg s8`/Yy
字节表示 EDA中国门户网站[/{!qMb6RHU2[{.j
EDA中国门户网站E6Qv[D;XE3oWj
19200 EDA中国门户网站4r+c(DB&F9B
0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 EDA中国门户网站
M(xxddF
G
0xF?
/b.Gtf2X4P&m.dA8T0
HZhrll0 9600
.~lAz'L N0 0 1 0 1 1 0 0 0 0 1
k,Iy
S8Yrbz z0 0x0D EDA中国门户网站(OSH+K3|$kr
EDA中国门户网站P@+B&\0{\?e}
4800
7C4X.qDmCx0O0 0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1
0Tm G#PL:l
R0 0xE6 EDA中国门户网站:{wy5L
k)RD1K+V
k-l7|.q?+q3B3J
^r0 2400
5my/D3S)g^bfN&o0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1
&}-?(chBi3D;o0 0x78 EDA中国门户网站|jIbY]L`3?
EDA中国门户网站yjw8A@
1800
0~)Q)GSj0 0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1 EDA中国门户网站ND(mHPDHrVn
0xE0
#V+JgZ)EJfj|%u0
m#m!@h2b%r-r0 1800
t2mH+Kh(VL/i:S0 0 0 0 0 0 x 1 1 1 1 x 0 0 0 0 0 1 1 1 1
-Ci1kCB3I6J0 0xF0 EDA中国门户网站b!m2k X(z x\z
EDA中国门户网站|cdA*S5ai-n6b;W Q4H(M
1200
G"W L$Vm!W0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 EDA中国门户网站5zekM/Oo g7b7f#B
0x80
{W9Q?"T
i0
y4v#Y/S{;?C#G0 600
7F(_w:DcV^V7V0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 EDA中国门户网站R*CVJ6Rb[
0x00 EDA中国门户网站i
p3zpKb6ML
EDA中国门户网站G)_7f+SLY!{
300 EDA中国门户网站9}
f8r
h%G_
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
!xFM i3qfmH0 0x00 EDA中国门户网站)d0T;i+g#I[
(GUN:Pzn.X0 150 EDA中国门户网站,kx3[)Ne8bJ7g
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
'b7yx|*x5J0 0x00 EDA中国门户网站+Z#W w)u;X$_
dup
6t^W4HO-{0 110
.hd5g{7t};[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-k.?9Co?'g"SX:MU0 0x00 EDA中国门户网站5gX[_ x
EDA中国门户网站K%n3bo_pH7D
H0`,n;R(TU0 发送速率为1800波特时,因为
G!ei%d^5i:v+I+F0 T1800=T9600*16/3,
VcO;h0j+[0 而16/3不是整数,接收端二进制位的状态转换时刻和9600波特不一一对应,引起在接收端 的一个位接收周期内有状态发生变化的可能。表1中给出的第六个位(表示为x)就是这种情 况。因为x有可能被看作‘1’,也有可能被看作‘0’,所以发送速率为1800波特时接收到 的字节可能是0xE0或者0xF0。波特率为3600和7200时也有同样的问题,也可以采用同样的方 法,但不确定的位数会增加,需要检测的字节种类也会更多。3600波特和7200波特的传输速 率几乎不采用,因此这个问题并不严重。只要发送波特率在1200~19200之间,我们都可以 通过接收到的一个字符对此波特率进行唯一的判定。 EDA中国门户网站!B*}[x&rn;HW
:N5W$t'J1xO0 2 低波特率的检测 EDA中国门户网站A5{ T{ r
当发送速率低于1200波特时,接收端收到的字节都是0x00,因此只能确定其速率低于12 00波特,而不可能再得到更多的信息。为了解决这个问题,可以在9600波特的速率下继续接 收下一个字节信息。发送速率为600波特或更低时,一个位的发送时间要大于9600波特时整 个字节的接收时间。因此,发送端每一个从‘1’(终止位)到‘0’(起始位)的跳变都会 让接收端认为一个新的字节开始了。表2所示为600波特或更低的传输速率时接收端回车符的 二进制序列(只给出开始的一些位)。 EDA中国门户网站k
E&_~R[8L
EDA中国门户网站$o9N_y;w*IBZ$hd
表2 低波特率回车符的接收方式 EDA中国门户网站 F$m$cj9` l:e^
EDA中国门户网站S@,^eYb-oS
波特率
p)l0U5Z4G0 9600波特二进制序列 EDA中国门户网站ea&c%U)\.l
时间差 EDA中国门户网站1FV
nN[+I+q+e
(周期) EDA中国门户网站{N)oh'Jj
时间差 EDA中国门户网站'\a-[9X$z4Y+]
(实时间) EDA中国门户网站!{&SX
a,~