当前位置:首页 > 专题范文 > 公文范文 > 正文

STC单片机波特率自适应方法

发布时间: 2022-11-02 17:25:05 来源:网友投稿

摘 要: 为了缩小电路体积、降低硬件成本,同时又保证串口稳定可靠通信,采用的一种波特率自适应方法,该方法充分利用STC单片机运行速度快、拥有片内振荡器、片内资源丰富的特点,在串行通信程序中,利用单片机I/O口和定时器,对主机发送的固定字符进行测量、计算,得到合适的波特率常数,从而实现波特率自适应。给出了设计原理、实现方法、误差分析、流程图和部分程序,并通过应用实例验证该方法切实可行。

关键词: STC单片机; 串口通信; 波特率选择; 自适应方法

中图分类号: TN911⁃34; TP391 文献标识码: A 文章编号: 1004⁃373X(2013)23⁃0041⁃03

Baud rate adaptive method for STC single⁃chip microcomputer

ZHAO Pei⁃yu

(School of Electromechanical and Architectural Engineering, Jianghan University, Wuhan 430056, China)

Abstract : To reduce circuit volume and hardware cost, and at the same time, guarantee the stable and reliable serial port communication, a baud rate adaptive method is proposed. This method makes full use of STC microcontroller′s characteristics of high⁃speed running, on⁃chip oscillator, rich on⁃chip resources. In the serial communication program, the microcontroller′s I/O port and timer are utilized to detect and calculate the fixed character transmitted by host for getting the right baud rate constant, so as to realize the baud rate self⁃adaption. The design principle and realization method, error analysis, flow chart and part of the program are also given in this paper. The feasibility of the method was verified by a true example.

Keywords: STC single⁃chip microcomputer; serial communication; baud rate selection; self⁃adaptive method

0 引 言

串口RS 232是工业控制、仪器仪表、计算机外设常用的一种通信协议。串口通信的波特率一般都是选取标准系列值,并要求通信双方严格遵循相同的波特率,实际应用中,一台设备往往要与多种其他设备联络,为适应各种不同设备的通信速度,就要求该设备能适应不同的波特率,实现这种要求的常见方法有两种,一是增加波特率选择开关,二是设计能自动适应各种常见通信速度的串口。第一种方法增加了硬件,同时针对不同对象需要重新设置开关,在不清楚对方波特率的情况下还无法使用。第二种方法采用软硬件结合,通过检测、计算,自动选择正确的波特率,实际使用极其方便。

自适应波特率串口的实现方法通常有以下几种:

(1)协议约定通信开始时主机固定发送1个字符,从机以不同的波特率试探接收, 当接收到的数据与约定相同时,确定该波特率即是正确的通信波特率。

(2)协议约定通信开始时主机发送1串字符,从机以某固定波特率接收, 然后通过软件分析接收到的数据,计算出接收数据与发送数据之间的倍数关系,从而确定正确的波特率。

(3)协议约定通信开始时主机固定发送1个字符,从机用单片机定时器检测RXD上的信号宽度,通过计算来确定主机的波特率。

以上3种方法,第一种由于需要多次试探,效率很低;第二种计算量过大,不适合单片机处理;第三种方式单片机有现成的定时器资源,计算也相对简单,所以优选这种。

要测量脉冲宽度,前提是单片机的时钟信号必须稳定。目前很多STC单片机可选外接晶振时钟或片内RC振荡时钟,片内RC振荡时钟省去了外部的晶振等元件,成本降低、电路板的体积也可以缩小,这对成本及体积敏感的应用很具优势。但选用片内RC振荡时,频率会有±15%左右的误差,频率的稳定性也比外接晶振要差,按理论计算值设置波特率参数,无法保证可靠的通信,但按以上自适应波特率串口的第三种方法,每次通信前实测、计算、确定波特率常数,就可以实现稳定可靠的通信,这样充分利用了STC单片机的优势。

1 STC单片机的特点

标准51芯片由于定时器最高分辨率只有1 μs,对于较高的通信波特率来说,测量精度不够,导致计算值不准,无法正常工作。STC系列单片机是在标准51单片机基础上发展起来的,它增加了很多实用的接口电路,扩大了时钟的频率范围,设计出了[1T]时钟的芯片,可以通过软件对系统时钟分频,并提供了片内RC振荡时钟,在目前51芯片的市场占有极大的份额。STC系列单片机采用片内RC振荡时钟、自适应波特率串口通信技术,可以广泛地应用于分布式控制、智能仪表、通信等行业。

2 自适应工作原理

STC单片机采用异步通信,UART工作于模式1(8位UART,波特率可变),用定时计数器2做波特率发生器,工作于模式2(8位自动重装模式),主从机按图1方式连接,从机自适应主机的波特率。

图1 系统连接图

自适应过程由主机发送联络字符开始。为了使从机获得最大的测量脉宽,提高测量精度,由主机发送二进制“0”。如图2所示,二进制“0”由1位起始位,8位数据位(低位在先)及1位停止位构成,其中1位起始位和8位数据位全为0,所以低电平的宽度为9 b。

图2 自适应波形图

从机查询RXD引脚的电平,检测到低电平后就启动定时器0开始计时,再检测到高电平就停止定时器0计时,根据定时器0的定时值就可以计算出主机的波特率。

当时钟分频寄存器CLK_DIV=0(不分频),特殊功能寄存器AUXR=0xC0([T0]用[1T]时钟),则:

[每位传送所需时间=1fosc⋅T0计数值÷9] (1)

[波特率=1每位传送所需时间=fosc⋅1T0计数值×9] (2)

式中[fosc]为从机的时钟频率。

而STC51系列单片机在UART模式1,时钟模式为[1T]时,其波特率公式为:

[波特率=2SMOD⋅fosc(256-TH1)×32] (3)

由式(2),式(3)可导出UART时钟为[1T]时:

[TH1(1T)=256-2SMOD⋅T0计数值288] (4)

STC51系列单片机在UART模式1,时钟模式为[12T]时,其波特率公式为:

[波特率=2SMOD⋅fosc(256-TH1)×12×32] (5)

由式(2),式(5)可导出UART时钟为[12T]时:

[TH1(12T)=256-2SMOD⋅T0计数值3 456] (6)

从机UART在模式1下,将式(4)或式(6)计算结果作为定时器1重装值,设定通信参数,通过串口回送应答信号给主机。主机如正确接收到从机回送的信号,就说明从机已完成波特率自适应,可以开始正常通信了。

3 误差分析

为保证可靠通信,要求通信双方的波特率相对误差小于2.5%。

在自适应波特率校准系统中,误差主要来自两个方面,一是定时器[T0]启动和停止滞后造成的误差[ΔT0;]二是波特率发生器[T1]本身固有的一个机器周期误差[ΔT1=±1。]由于STC51单片机采用[1T]时钟定时,[ΔT0]误差只有标准51系列芯片的[112,]系统误差主要由[ΔT1]决定。

以STC12C5620为例,当采用片内RC振荡,时钟频率通常在5.2~6.9 MHz之间。当时钟频率为5.2 MHz,SMOD=1时,UART时钟分别按[12T,][1T]计算,见表1,表2。

表1 UART时钟12分频时计算的波特率误差

表1、表2中加粗部分表示可以选用的波特率值,由表1、表2可知,只要编程时选择合适的时钟,在5.2 MHz时钟频率下,波特率可以在300~115 200 b/s之间实现自适应,由[T1]取整带来的误差在0.5%以内。当系统时钟为6.9 MHz时,用同样的方法计算,也可以证明波特率可以在300~115 200 b/s之间实现自适应,由T1取整带来的误差也在0.5%以内。由此可见,STC12C5620采用片内RC振荡,可以在300~115 200 b/s之间完成波特率自适应,实现稳定可靠的通信。

表2 UART时钟1分频时计算的波特率误差

4 软件流程与程序

主机软件流程图如图3所示,从机软件流程图如图4所示。

图3 主机软件流程图 图4 从机软件流程图

以下为C51波特率自适应程序:

void main (void)

{

AUXR=0xC0;

//AUXR.7=1,[T0]用[1T]时钟;AUXR.6=1,T1用[1T]时钟

SCON =0x50; //SCON: mode 1, 8 b UART, enable rcvr

TMOD|=0x21; //TMOD: timer 0,mode 1,16 b; timer1, mode 2,8 b reload

PCON|=0x80;

TL0=0; //自适应波特率测量

TH0=0; //T0清零

while(RXD); //RXD引脚为高等待

TR0=1; //开始波特率测量

while(!RXD); //RXD引脚为低等待

TR0=0; //STOP T0

RELOAD=256-(TH0*256+TL0)/144-0.5;

//计算波特率常数,时钟[1T,]SMOD=1

TH1=RELOAD;

TR1=1; //TR1: timer 1 run

TI=1; //TI: set TI to send first char of UART

RI=0;

REN=1;

IE=0x90; //EA=1;ES=1;

}

5 应用实例

采用STC12C5620设计的重力检测开关,如图5所示。为降低成本、缩小体积,采用了片内RC振荡,不设按键及显示。重力检测开关首次工作前需设定一些参数,并校准。由于没有键盘及显示,采用和计算机联机设置、校准。本电路采用了上述的自适应波特率工作方式,由PC机作主机,通过串口来初始化重力检测开关的各参数。

图5 重力检测开关

计算机设置界面如图6所示。

图6 计算机设置界面

设置时,将重力检测开关与计算机之间用RS 232线连接好,然后点击PC机软件界面上的“连接串口” 按钮进行波特率自适应,当界面上状态栏提示“连接串口成功!”时,表示波特率自适应工作正确完成,可以进行参数设置和校准操作。设置、校准后,重力检测开关就可脱机正常工作了。

经反复验证,该电路在300~115 200 b/s波特率范围内可稳定通信工作。

6 结 语

该波特率自适应方法,可扩展应用于其他单片机系统,解决对方的波特率未知、或对方的波特率有偏差而无法正常通信的问题,即使对方的波特率不是标准值也可正常工作,具有较大的实用价值。

参考文献

[1] 南通国芯微电子有限公司.STC12C5628AD数据手册[S].南通:南通国芯微电子有限公司,2011.

[2] 刘燕,陈兴文.串行通信的波特率自动检测方法的实现[J].大连民族学院学报,2008,10(1):31⁃34.

[3] 周建华,万书芹,薛忠杰.一种新颖的UART自适应波特率发生器的设计[J].半导体技术,2007,32(12):1052⁃1055.

[4] 赵达飞.波特率自适应的模拟串行通信[J].现代计量仪器与技术,2009(7):58⁃59.

[5] 赵炯.串行数据传输协议的剖析研究[J].计算机工程,2004,30(9):105⁃108.

[6] 马玉春.串行通信协议的研究及应用[J].计算机应用研究,2004(4):228⁃232.

[7] 张雷,梁建武,陈英.串行通信协议的研究与实现[J].现代计算机,2006(9):57⁃59.

[8] 严天华,周辉.效率串行通信协议的设计[J].单片机与嵌入式系统应用,2003(6):75⁃77.

[9] 乔渠,赵国豪,王文记.串行通信波特率的自动识别[J].单片机与嵌入式系统应用,2007(2):33⁃35.

[10] 常江,胡丹,常亮.串行通信中的波特率设置和误差分析[J].四川工业学院学报,2004,23(2):22⁃24.

作者简介:赵培宇 男,1964年出生,浙江宁波人,高级工程师,主任。主要从事机电一体化、自动化仪器仪表的教学科研工作。

最新文章

版权所有:博古范文网 2012-2024 未经授权禁止复制或建立镜像[博古范文网]所有资源完全免费共享

Powered by 博古范文网 © All Rights Reserved.。浙ICP备12018771号-1