Emtronix,EmtronixETR186

服务器 3
嵌入式网络模块编程手册 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 感谢您购买英创信息技术有限公司的产品:ETR186嵌入式网络模块。
ETR186是一款名片大小、采用R8822D微处理器的嵌入式PC模块,其外形尺寸仅为64mm×46mm;配有Flash、串口、GPIO、精简ISA总线、实时时钟、LCD接口、矩阵键盘接口等板载资源;采用BC3.1作为开发调试工具。
ETR186运行可靠、功耗小、体积小、售价便宜,特别适合用作低成本批量产品的核心平台,为GPRS无线数据通讯、工业自动化、智能仪器仪表、分布式远程通讯与控制等众多行业的客户提供了快速、极高性能价格比的产品解决方案。
本手册主要是对ETR186的驱动程序及相应的测试程序作详细的介绍,其相关的软件 程序代码在所提供的应用光盘目录中,按照ETR186的不同应用,分为以下几 个子目录: ..\\startup 程序起步的Demo例程 ..\\drivers ETR186相关的硬件接口函数及相应的测试例程 ..\\UART ETR186串口驱动程序及相应的测试例程 ..\\LCD ETR186LCD汉字、图形显示驱动程序及相应的测试例程 ..\\ 基于PPP通讯的TCP/IP协议库API接口函数及相应的测试例程 (主要是针对GPRS的应用测试例程) 本手册将以上述几部分驱动程序为单元逐一介绍具体内容。
随着用户需求的不断发展,我们提供的驱动程序也在进行相应的更新调整,用户可访问 英创公司网站或直接与英创公司联系,以及时获得
ETR186的最新驱动程序。
此外,英创公司针对模块的使用编写有《ETR186嵌入式网络模块数据手册》;针对开发评估底板的使用编写有《ETR186嵌入式网络模块开发评估底板手册》。
这三个手册都包含在英创为用户提供的产品开发光盘里面,用户也可以登录英创公司的网站下载阅读。
用户还可以访问英创公司网站或直接与英创公司联系以获得ETR186的其他相关资料。

1 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 英创信息技术有限公司联系方式如下:地址:成都市高新区高朋大道5号博士创业园B座402#邮编:610041联系电话:028-85140028028-85137442028-85136173传真:028-85141028网址:电子邮件:support@
2 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 目


1、C语言入门....................................................................................................................

4 1.1

第一个应用程序......................................................................................................

41.2建立工程文件

.........................................................................................................

51.3文件读写

................................................................................................................

6
2、硬件接口驱动程序........................................................................................................

7 2.1硬件设置的接口函数定义.......................................................................................72.2

硬件接口函数应用例程...........................................................................................

9 2.2.1

Watchdog的使用.............................................................................................

92.2.2GPIO操作

.......................................................................................................

92.2.3中断程序

.......................................................................................................

10
3、PPP及TCP/IP协议库及其应用...................................................................................14 3.1PPPTCP/IP协议库函数原型定义.........................................................................143.2GPRS应用

...........................................................................................................

26 3.2.1

GPRS自动拨号上网......................................................................................

263.2.2

GPRS数据透明传输......................................................................................

28
4、串口驱动程序

.............................................................................................................

32 4.1串口驱动API函数

.................................................................................................

324.2RS232

收发演示程序...........................................................................................

344.3RS485

数据收发..................................................................................................

34
5、LCD汉字显示程序......................................................................................................

36 5.1

汉字显示接口函数定义.........................................................................................

365.2汉字显示程序的有关事项.....................................................................................385.3图形方式下汉字和西文显示示例...........................................................................38 附录1BC31集成开发环境的基本配置.........................................................................41 附录2基于ETR186的应用软件开发流程.....................................................................42 附录3TDRF及TD调试工具使用说明............................................................................44
3 028-85140028 英创信息技术有限公司
1、C语言入门 ETR186嵌入式网络模块编程手册V5.04 本节主要是为那些初次接触C语言或对BC开发环境不太熟悉的用户提供的,如果你对此已有一定的了解,可跳过本节。
本节中说明的测试程序,在英创公司提供的光盘中子目录下。
1.1第一个应用程序 作为应用程序设计的第一步,我们将使用BC31集成开发环境,编写一个名为HELLO.CPP的源程序并把它编译连接成可执行文件HELLO.EXE: z将你的开发调试主机系统置于DOS提示符并进入你的工作目录下。
z键入命令BC,使系统进入BC集成开发环境,按F3打开一个名为HELLO.CPP的文件。
这时,系统进入BC编辑环境。
无论用户是否使用BC的C++特性,我们建议用户的文件名都以CPP作为扩展名,这有利于程序的调试。
z通过键盘输入程序如下: #include#include#include#include intmain(){ structtimet; clrscr(); //清屏 printf("Hello!
\n"); for(;;) { gettime(&t); printf("%2d:%02d:%02d\r",t.ti_hour,t.ti_min,t.ti_sec);
4 028-85140028 英创信息技术有限公司 if(kbhit())}return0;} break; ETR186嵌入式网络模块编程手册V5.04 z按F2键将程序存盘,再按F9对程序进行编译连接,生成EXE可执行文件。
z按ALT+X退出BC集成开发环境。
z在DOS提示符下,键入:td–rphello程序将被自动下载至ETR186下,并弹出源码调试窗口。
z按F9键,程序将运行。
如果接有LCD屏,可在LCD屏上看到“Hello!”及动态刷新的当前时间串。
z如在ETR186上接有键盘,按任意键程序将退出。
在任意时候,可在PC上按CTRL+BREAK强制中断程序运行。
按ALT+X将退出TD调试状态。
1.2建立工程文件 建立工程文件可把多个程序模块方便地组合在一起进行编译连接,是设计专业程序的基本手段,这主要是因为通过建立工程文件可合理安排程序结构,快速调试程序错误,所以我们建议用户采用工程文件这一工具来设计自己的应用程序。
下面我们将建立一个工程文件MYPRJ.PRJ,具有.PRJ的扩展名。
z将你的开发调试主机系统置于DOS提示符下。
z键入命令BC,使系统进入BC集成开发环境,按ALT+P打开一个名为MYPRJ.PRJ的工程文件。
这时按Insert键,向工程文件中添加TIMESTR.CPP及HELO.CPP。
z模块TIMESTR.CPP定义了一个获取时间串的函数。
z模块HELO.CPP包含了主函数main(),通过#include“timestr.h”,可以调用TIMESTR.CPP模块中提供的获取时间串的函数。
z按F2键将程序存盘,再按F9对程序进行编译,自动对工程文件中两个源文件分别进行编译,然后连接,生成MYPRJ.EXE可执行文件。
z利用TD,可以将MYPRJ.EXE下载到ETR186下进行调试运行。

5 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 1.3文件读写 利用操作系统提供的文件系统设计应用程序是嵌入式系统有别于一般单片机系统的
个显著特点。
任何一个文件在使用之前和使用之后,必须要进行打开和关闭,这是因为操作 系统对于同时打开的文件数目是有限制的。
因此在使用文件前应打开文件,才可对其中的信 息进行存取。
用完之后需要关闭,
否则将会出现一些意想不到的错误。
BC提供了打开和关闭文件的函数:fopen()函数和fclose()函数。
在文件打开后,可根据需要调用相应的文件读写函数fread()函数和fwrite()函数。
我们提供的文件操作的例子程序,FILEIO.PRJ包含了TIMESTR.CPP和FILEIO.CPP。
模块TIMESTR.CPP定义了一个获取时间串的函数。
模块FILEIO.CPP包含了主函数main(),实现了显示当前时间,并将当前时间转换成文本格式存盘。
在FILEIO.CPP定义了一个存盘函数,代码主体如下: intSaveFile(char*FileName,char*str) { FILE*fp;fp=fopen(FileName,"wt"); //打开文件,格式为可写的文本文件 if(fp==NULL) { printf("CannotOpenthisFile!
\n"); return-1; }fprintf(fp,"%s",str);fclose(fp); //向文件中写入串//关闭文件 return0; }
6 028-85140028 英创信息技术有限公司
2、硬件接口驱动程序 ETR186嵌入式网络模块编程手册V5.04 与本节相关的程序在光盘中的目录下。
2.1硬件设置的接口函数定义 ETR186提供了可对低层硬件操作的接口函数,其定义在ETR186.H中,ETR186.CPP是对ETR186提供的低层操作C/C++接口函数的实现,各个函数的定义如下: (1)unsignedintGPIODirCfg(unsignedintDir)函数功能描述:设置10位通用数字IO(从D[0]位到D[9]位)的输入输出方向。
D[i]=0:定义为输出;D[i]=1:定义为输入。
D[0]、D[1]……D[9]缺省定义为输入。
输入参数:Dir中为1的位,表示对应的GPIO为输入;否则为输出。
(2)voidGPIOWrite(unsignedintValue)函数功能描述:设置GPIO的输出位电平。
输入参数:Value为输出值。
只有方向设置为输出的,才是有效的。
(3)unsignedintGPIORead()函数功能描述:读取GPIO的输入状态。
输入参数:无返回值:返回值中,只有方向设置为输入的,才是有效的。
(4)unsignedintGPIOSetBit(intBitIdx,intL10) 函数功能描述:对通用的数字IO进行一位输出值设置。
输入参数: intBitIdx选择需设置的输出位的序号,其范围是从0…
9。
intL10 设置的输出值,0或
1。
(5)voidGPRS_STB(intL10)函数功能描述:设置GPRS_STB位,GPRS_STB为一位数字输出,可用于启动
7 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 GPRS模块。
另外如果没有GPRS应用,GPRS_STB信号可作为通用数字输入输出来使用。
输入参数: intL10 设置的输出值,0或
1。
(6)unsignedintGPRS_PWR() 函数功能描述:读取GPRS_PWR位状态,GPRS_PWR为数字输入,可用于检 查GPRS的上电状态。
另外如果没有GPRS应用,GPRS_PWR信号可以作为通用数字输入来使用。
输入参数:无 返回值:
0 GPRS没有上电
1 GPRS已经上电 (7)voidGPRS_AUX(intL10) 函数功能描述:设置GPRS_AUX位,GPRS_STB为一位数字输出,可用于对 GPRS模块电源进行管理,L10为0开通GPRS电源,L10为1关闭GPRS电 源。
另外如果没有GPRS应用,GPRS_AUX信号可作为通用数字输出来使用。
输入参数: intL10 设置的输出值,0或
1。
(8)unsignedintNB_Delay(unsignedintmilliseconds)函数功能描述:延时milliseconds毫秒。
可用于替代C函数delay(…)。
注意ETR186的定时器结构与标准PC不一致,不能使用delay()来进行延时操作。
(9)unsignedlongNB_clock(unsignedintmilliseconds)函数功能描述:返回系统当前的Tick值。
可用于替代C函数clock(…)。
(10)intSetTMR1(unsignedintDivider)
8 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 函数功能描述:设置Timer1时钟的分频数。
ETR186的Timer1输入时钟频率为1MHz。
Timer1为占空比为50%的方波,Divider代表了分频数,如:Divider=20000,则产生周期为20ms的方波。
(11)intSetWDT()函数功能描述:打开Watchdog,时间间隔约为2秒。
注意:由于Watchdog的时间较小,所以在使用的过程中,要进行适时加载。
(12)intReloadWDT()函数功能描述:加载Watchdog (13)intSysReboot()函数功能描述:重新启动系统,相当于PC机的热启动。
2.2硬件接口函数应用例程 2.2.1Watchdog的使用用于测试WatchDog函数,WDT.PRJ由ETR186.CPP和WDT.CPP构成,ETR186.CPP 提供低层操作的C/C++接口函数,WDT.CPP包含了主函数main(),先调用SetWDT()函数启动WatchDog,时间间隔为2.1秒,在循环中不断调用ReloadWDT()重载watchdog,如果将循环中的延时时间调整超过2.1秒,系统将被重新启动。
2.2.2GPIO操作
(1)通用的数字IO 实现对10位通用数字IO输入输出操作。
GPIO.PRJ由ETR186.CPP和GPIO.CPP构 成,ETR186.CPP提供低层操作的C/C++接口函数,GPIO.CPP包含了主函数main(), 在main()中通过调用低层的操作函数,首先把GPIO设置为输出,然后设置不同的输出,可 通过ETR186评估板上的LED来观察GPIO输出的相应变化,会看到LED灯交替变亮。
例如: GPIODirCFG
(0); //设置10位数字IO的方向为输出
9 028-85140028 英创信息技术有限公司 GPIOWrite(0x0155);NB_Delay(1000);GPIOWrite(0x02aa); ETR186嵌入式网络模块编程手册V5.04 //设置GPIO奇数5位输出为高,偶数位输出为低//延时1秒//设置GPIO奇数5位输出为低,偶数位输出为高
(2)利用GPIO作实时时钟扩展 在英创公司提供的评估底板中,用于ETR186提供的SPI接口控制一个串行时钟芯片, 使ETR186具有实时时钟的功能,实时时钟的读取和设置函数定义在DS1302.h、 DS1302.CPP中,这些函数包括有: voidDS1302PortInit() 初始化函数,该函数只需调用一次。
intSetdate(structdate*datep)相当于C语言的setdata()函数 intGetdate(structdate*datep) 相当于C语言的getdata()函数 intSettime(structtime*timep) 相当于C语言的settime()函数 intGettime(structtime*timep) 相当于C语言的gettime()函数 相应的测试程序为:RTCTST.PRJ。
注意: i.如果需要从ETR186中读取和设置实时时钟,请调用DS1302.h中定义的函 数。
ii.与标准PC一样,ETR186内部带有一个系统时钟,该时钟不具有掉电保护功 能。
建议客户在应用程序初始化中,读取RTC的时钟值,并设置到系统时钟。

(3)利用GPIO接矩阵键盘在英创公司提供的评估底板中,利用9位GPIO中的D0—D8可支持接4×5的矩阵键盘。
键盘的驱动程序定义在PC_KEY.CPP中,PC_KEY.CPP模块利用C++的构造函数对使用的几位GPIO进行初始化操作以及相关中断的安装,所以用户在使用时只需要将PC_KEY.CPP包含在PRJ文件中,即可直接调用C函数bioskey()、getch()等进行键盘的操作。
相应的测试程序请参见KEYTST0.PRJ。
2.2.3中断程序ETR186提供三类可调用的中断资源:1)一类是可直接调用的DOS和BIOS的软中断; 10 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 2)ETR186的精简ISA扩展总线中共有2个中断资源,可用于支持用户扩展的专用硬件单元;3)ETR186单元定时器TMR1主要是用于实现1毫秒至50毫秒间隔的定时中断。
软中断功能一般是通过调用标准C运行库函数来使用的,这里不再赘述。
本节主要介绍用户可直接操作的ETR186硬件中断(包括定时器中断)如下表所示: 中断名称IRQ5IRQ6 TMR1IRQ 中断号0x0D0x0E --- 中断优先级551 备注扩展总线外部中断扩展总线外部中断芯片内部TMR1,ETR186 内部定时中断 各个中断对应的中断服务程序定义为:voidinterruptIRQ5_ISR(__CPPARGS);voidinterruptIRQ6_ISR(__CPPARGS);voidinterruptTMR1_ISR(__CPPARGS); intInstallISR(intintno); //该函数的功能是置中断。
输入参数为中断号。
intUninstallISR(intintno);//该函数的功能是恢复中断。
本节内容主要介绍这三类中断资源的程序调用方法。

(1)系统定时器与软中断的调用与PC兼容系统定时器一样,ETR186的系统定时器(Timer0)也是每秒中断约18.2次,既中断周期约为55ms,通常称为一个tick。
为了让应用程序系统定时器执行各种定时任务,每次系统定时中断均会调用软中断int0x1C,这样应用程序可简单的加载软中断0x1C,方便地进行各种定时操作了。
加载定时任务的方法就是直接加载中断0x1C的中断服务程序,而中断0x1C服务程序通常是通过管理存储器变量来达到定时的目的。
voidCaptureTime(){ oldhandler=ect(0x1C);ect(0x1C,Service); 11 028-85140028 英创信息技术有限公司 } ETR186嵌入式网络模块编程手册V5.04 voidReleaseTime(){ ect(0x1C,oldhandler);} voidinterruptService(__CPPARGS){ if(Mask==0){ Times++;if(Times==2)Flash
(0);if(Times==8){Flash
(1);Times=0}}} voidFlash(inttype) { if(type==0) LCD_FillBar(cuX,cuY,cuX+7,cuY+1,1); else LCD_FillBar(cuX,cuY,cuX+7,cuY+1,0); } 调用函数CaptureTime(),设置中断0x1C的中断服务程序为Service(),每55ms中断一次,执行该中断服务程序Service(),通过管理变量Times,在屏幕上显示不同的图形,以达到图形光标闪烁的效果。
注意:中断0x1C是以tick(55ms)为节拍工作的,因此定时的最小单位为一个tick,对于更长的定时,可以通过对tick计数来实现,而对于更短时间的定时操作则需要利用系统的Timer1来实现了。
12 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04
(2)内部定时器中断的使用ETR186内部包含的一个定时器Timer1可供应用程序使用,Timer1的输入时钟为1MHz,可直接调用SetTMR1(unsignedintDivider)函数来设置Timer1的分频数,Timer1的分频输出已接到中断输入TMR1IRQ(内部)以支持定时中断功能。
TMRDEMO.PRJ工程文件由ETR186.CPP、TMRISR.CPP及TMRDEMO.CPP构成。
ETR186.CPP定义了低层的接口函数,TMRISR.CPP提供了定时中断服务程序,TMRDEMO.CPP包含了主函数main()。
TMR1IRQ为内部中断,其时钟输出已接到了相应的中断输入,不需要外接线。
TMRDEMO.CPP首先设置Timer1输出一个周期为10ms的方波信号(N=10000),设置GPIO为输出模式,然后启动定时中断服务程序。
定时中断服务程序TMTISR.CPP以toggle方式设置GPIO的输出,并让内部计数值加
1。
用户可参见源代码以了解详细的过程。

(3)外部硬件中断的使用在实际应用中,一般使用硬件中断的方法是编写中断服务程序,在程序初始化中安装中断程序,在程序退出时卸载中断程序。
中断服务程序一般通过存储器变量与上层应用程序交换数据。
ISRDEMO.PRJ工程文件由ETR186.CPP、TMRISR.CPP、ISR.CPP和ISRDEMO.CPP构成,其中模块ISR.CPP提供了在扩展总线的3个外部中断函数的编写方法。
我们提供的中断服务程序例子中,定时中断如3.2节所描述那样工作,把周期(10ms)变化的GPIO通过ETR186评估板连接到2个外部输入上,从而触发外部中断。
外部中断每中断一次,分别对各自的计数值加
1,主程序ISRDEMO将在LCD上显示这些计数值。
用户在实际的运用中,可根据需要修改中断服务程序。
13 028-85140028 英创信息技术有限公司
3、PPP及TCP/IP协议库及其应用 ETR186嵌入式网络模块编程手册V5.04 ETR186PPP/TCP/IP通讯软件是一组可在ETR186环境中调用的软件运行函数,通过在ETR186接口实现基于PPP的TCP/IP或UDP/IP协议的通讯功能。
我们提供了一个利用PPP协议的GPRS应用的测试程序。
测试程序放置在光盘中子目录下。
3.1PPPTCP/IP协议库函数原型定义 嵌入式网络模块PPPTCP通讯软件是一组可在英创的嵌入式网络模块环境中调用的软件运行函数,通过在嵌入式网络模块串口COM2实现PPP通讯协议,并进一步实现在其上的TCP/IP协议的通讯功能。
客户的应用程序通过在BC集成编程环境下直接调用嵌入式网络模块PPPTCP通讯软件的各个函数,并把其库函数文件连入客户应用程序的工程文件中,即可实现完整的网络通讯。
为了同时适应在单任务DOS操作系统及RTOS下设计网络通讯程序,英创公司的嵌入式网络模块TCP通讯软件采用直接面对连接的方法构成,并针对工业控制的特点进行了封装,构成了若干个可直接使用函数,使用户能以最快的速度操作使用英创嵌入式网络模块的网络资源。
以下对各个函数作详细介绍: (1)intInitPPPNet(intPortNum=0,char*BAUD=NULL);功能描述:初始化网络接口。
输入参数:intPortNum用于PPP连接的串行端口号,设置为0表示使用COM1;设置为1表示使用COM2。
char*BAUD用于配置PPP连接的串行端口的波特率。
“9600”-----波特率为9600bps“19200”-----波特率为19200bps 14 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 “38400”-----波特率为38400bps“57600”-----波特率为57600bps(缺省配置)“115200”-----波特率为115200bps如BAUD串为空NULL,按缺省的波特率(57600bps)进行配置。
返回值:若正确返回值为
0,若初始化失败返回值<
0。
备注:此函数调用时可以不填参数而使用缺省值。
(2)intTermPPPNet();功能描述:关闭网络接口。
返回值:若正确返回值>
0,若失败返回值<
0。
输入参数:无 (3)intMyPort()功能描述:用于产生随机的端口号。
返回值:返回随机端口号,其范围为2000—9000。
(4)intConnOpen(char*to,char*protoc,intlp,intrp,intflags);功能描述:建立基于TCP或UDP通讯服务。
输入参数: char*to应用程序若以服务器模式工作,则填“*”(如在基于UDP的组播程序设计时,就填”*”);以客户端模式工作,则填相应的服务器IP地址,如“192.168.201.97”。
protoc定义传输层协议,可取:”TCP/IP”或”UDP/IP” intlp本地端口号。
在服务器模式应用中,lp为知名端口号。
以客户端模式打开连接时,建议lp的值通过调用函数intMyPort()随机产生,应避免每次打开连接 15 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 时使用相同的端口号,因为在同时打开多个连接时,采用相同的端口号,有可能造成服务器端对各个连接处理出错。
intrp若应用程序工作在服务器模式下,rp应置为
0,若应用程序工作在客户端模式下,rp为连接对方端口号,即服务器的知名端口号。
intflags一般置为
0。
但在单任务的运行环境中(如DOS环境),对TCP连接宜采用无阻塞方式打开连接,这时flags应置为NONBLOCKOPEN。
对无阻塞方式打开的连接,应用程序需通过调用ConnIsEstablished(intconno)来确定连接是否建立。
因为,即使连接未真正建立,ConnOpen()也能返回正常值。
对UDP连接,如果是一般的无连接应用,flags为NONBLOCKOPEN;如果是点对点应用,flags应设为UDP_P2P。
在程序中连接号实际也起到handler的作用。
返回值:>=0表示正确返回,其值为连接号,应用程序操作TCP/IP通讯接口时,都需使用该连接号;若失败返回值<
0。
(5)intConnClose(intconno,intflags); 功能描述:关闭连接。
输入参数: intconno连接号; intflagsflags置为
0,对连接进行阻塞模式的关闭操作,即等关闭操作完成 后才退出关闭操作。
如果flags等于
1,对连接进行无阻塞模式的 关闭操作,程序仅仅是启动关闭操作即退出。
在该函数中,flags的 缺省值为
0。
返回值:
0 正常关闭; EBADF无效连接号,关闭操作未执行。
备注: z对TCP连接来说,只有连接关闭正常,才能保证所有的数据收发是可靠的。
16 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 z在网络出现异常时,对连接进行关闭操作,可能会有2分钟左右的延时。
(6)intConnRead(intconno,char*buff,intlen); 功能描述:从指定连接号读取网络接口接收到的数据。
对于TCP连接,若该函数调用 频率低于对端发送的频率,此时可能已收到几个数据包,且其数据总长度 小于接收缓冲区buff的长度,则这些数据将被一次性读入buff,以最大限 度释放内部缓冲区资源,而从应用层看会出现所谓的“合包”现象。
输入参数: intconno连接号; char*buffchar型指针变量,为存放读出数据的缓冲区buff地址。
intlen缓冲区的字节长度,对TCP连接,最大缓冲区长度应不大于1460 字节;对UDP来说,最大缓冲区长度应不大于1472字节。
返回值:
0 表明对端已执行了关闭连接或连接出现异常错误,此时应关闭本 连接。
>
0 正常返回,返回值为实际读取的字节数; EBADF 无效连接号,读取操作未执行。
EWOULDBLOCK
对无阻塞方式打开的连接,表示无数据,可重复调用该函 数。
ETIMEOUT 超时错误,由应用程序决定后续处理。
EMSGSIZE 数据太长,表明接收缓冲区太小。
(7)int
ConnWrite(intconno,char*buff,intlen,intPushFlg=0); 功能描述:发送缓冲区中的数据到指定连接号网络接口。
输入参数: intconno 连接号。
char*buffchar型指针变量,为存放发送数据的缓冲区buff地址。
intlen 缓冲区的字节长度,对TCP连接,最大缓冲区长度应不大于1460 字节;对UDP来说,最大缓冲区长度应不大于1472字节。
intPushFlg: 17 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 =0为普通发送 =1为急迫发送,仅对TCP连接有效。
返回值: >=
0 正常返回,返回值为实际发送的字节数; EBADF 无效连接号,发送操作未执行。
ETIMEOUT 超时错误,由应用程序决定后续处理。
EMSGSIZE 数据太长,发送数据长度超过了内部缓冲区大小。
备注: 在普通发送时,如果需要连续发送的数据包小于最大缓冲区长度,而且在连续发送 之间没有作相应的延时,TCP/IP
则有可能将连续的包作合包处理后发送,以提高 网络的传输效率,所以在接收方收到的是已经合过的包。
在众多工业应用中,可以 通过设置急迫标志,并在数据包与数据包之间作短暂的延时(如1ms)就可以使 接收方收到与发送方一致的包。
从而避免在应用层对TCP数据流进行“断句”分析 的麻烦。
(8)intConnIsEstablished(intconno);功能描述:检查连接是否建立。
输入参数:连接号。
返回值:1:连接已建立;0:连接还未建立。
(9)intConnCanSend(intconno,intlen); 功能描述:检查是否能发送指定长度的数据。
输入参数: intconno连接号; intlen 需发送数据的长度。
返回值: 1:接已能发送指定长度的数据; 0:连接不能发送指定长度的数据。
18 028-85140028 英创信息技术有限公司 ETR186
嵌入式网络模块编程手册V5.04 (10)intConnHasData(intconno);功能描述:检查是否有数据可读取。
输入参数:连接号。
返回值:1连接已存在可读取的数据;0连接无可读取的数据。
(11)intConnIsFinished(intconno);功能描述:可使用该函数检查该连接的对端是否进行了关闭连接的操作。
若对端已进行了关闭操作,系统应立即调用ConnClose(intconno)关闭该连接。
输入参数:连接号返回值:1连接已关闭;0连接未关闭。
(12)intConnIsFatal(intconno);功能描述:可使用该函数检查连接的状态。
输入参数:连接号返回值:1连接出现异常,如连接复位(RST)或超时。
0连接OK 备注:应用程序在调用该函数检查到连接出现了异常,应立即关闭该连接,即连接方停止数据的传输,以释放诸如缓冲区之类的资源。
(13)intGetIP(intconno,unsignedchar*IPCode); 功能描述:获取连接对方的IP地址 输入参数: intconno 由ConnOpen()打开的连接号. unsignedchar*IPCode获取此连接的对方的IP地址 19 028-85140028 英创信息技术有限公司 返回值: <
0 该函数调用失败 =
0 该函数调用成功 备注:此函数只对已建立的连接有效。
ETR186
嵌入式网络模块编程手册V5.04 (14)intGetOWNIP(unsignedchar*IPCode); 功能描述:获取本地的IP地址 输入参数: unsignedchar*IPCode本地的IP地址 返回值: <
0 该函数调用失败 =
0 该函数调用成功 (15)intSetDNSServer(char*SvrIPStr=NULL);功能描述:用于设置域名服务器的IP地址,该函数需要在调用初始化函数前调用。
输入参数:char*SvrIPStr需要设置的域名服务器的IP地址 (16)intDNS2IP(char*DomainName,char*IPStr); 功能描述:从DNS服务器中获取需要解析的域名的IP地址。
输入参数: char*DomainName需要解析的域名串 char*IPStr 域名解析后所获得的IP地址 返回值: <
0 该函数调用失败 =
0 该函数调用成功 (17)intFTP_getput(char*host,char*file,intmode,char*FTPdir,char*FTPusername,char*FTPpassword,unsignedlongtimeout,intFTPMode); 20 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 功能描述: 以FTP客户端方式向远端FTP服务器发送文件或从远端FTP服务器获取文件。
输入参数: char*host远端主机的IP地址,如“192.168.201.34”。
char*file被操作的文件名,如“myfile.txt”。
intmode=0;从远端服务器获取ASCII文件 =1;从远端服务器获取2进制文件 =2;向远端服务器发送ASCII文件 =3;向远端服务器发送2进制文件 char*FTPdir所操作的文件在FTP服务器上的存储路径,NULL表示当前目录 char*FTPusername 登录时使用的用户名,如“guest” char*FTPpassword 登录时使用的密码,如“888” unsignedlongtimeout定义的timeout时间,单位为毫秒,缺省值为5分钟 intFTPMode 登录FTP的模式,=0为标准模式 =1为passive模式 返回值:!
=0=
0 该函数调用失败该函数调用成功 (18)intFTP_putstream(char*host,char*file,char*FTPdir,char*FTPusername, char*FTPpassword,char*stream,unsignedintslen,unsigned longtimeout,intFTPMode); 功能描述: 以FTP客户端方式将数据流发送到远端FTP服务器文件。
输入参数: char*host远端主机的IP地址,如“192.168.201.34”。
char*file被操作的文件名,如“myfile.txt”。
char*FTPdir所操作的文件在FTP服务器上的存储路径,NULL表示当前目录 char*FTPusername 登录时使用的用户名,如“guest” 21 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 char*FTPpassword 登录时使用的密码,如“888” char*stream 数据流 unsignedintslen 数据流长度 unsignedlongtimeout定义的timeout时间,单位为毫秒,缺省值为5分钟 intFTPMode 登录FTP的模式,=0为标准模式 =1为passive模式 返回值:!
=
0 =0 该函数调用失败 该函数调用成功 (19)intFTP_getstream(char*host,char*file,char*FTPdir,char*FTPusername, char*FTPpassword,,char*stream,unsignedlongtimeout,int FTPMode); 功能描述: 以FTP客户端方式从远端FTP服务器读取文件内容。
输入参数: char*host远端主机的IP地址,如“192.168.201.34”。
char*file被操作的文件名,如“myfile.txt”。
char*FTPdir所操作的文件在FTP服务器上的存储路径,NULL表示当前目录 char*FTPusername 登录时使用的用户名,如“guest” char*FTPpassword 登录时使用的密码,如“888” char*stream 读取远端FTP服务器文件的数据 unsignedlongtimeout定义的timeout时间,单位为毫秒,缺省值为5分钟 intFTPMode 登录FTP的模式,=0为标准模式 =1为passive模式 返回值:>
0 远端FTP服务器读取数据的长度 22 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 (20)intFTP_server(void*pTsk,unsignedlongtimeout,char*FTPusername,char* FTPpassword) 功能描述: FTP服务器运行程序,FTP的实现是以非阻塞方式和阻塞方式相结合为特征的, 当未与客户端建立连接时,处于非阻塞方式,函数可返回;当与客户端建立连接 后,FTP服务器转入阻塞模式,这时需等待FTP请求完成后,函数才会退出。
输入参数: void*pTsk 系统保留,总设置为空指针NULL。
unsignedlongtimeout超时时间,单位为毫秒,若FTP服务器在mseconds内 未接受任何服务请求,则函数自动退出。
char*FTPusername 设置FTP服务器的用户名,若FTPusername为空指 针, 则采用缺省用户名“guest”。
char*FTPpassword 设置FTP服务器的密码,若FTPpassword为空指针, 则 采用缺省密码“888”。
返回值: =0等待FTP连接请求,可再次调用该函数。
=1已有FTP连接请求,等待连接建立,需再次调用该函数。
=2FTP连接完成,可再次调用该函数。
(21)voidNetPackagePro()功能描述:处理低层的网络数据包,如广播包、ping包等。
应用程序如果在一段时间内没有操作网络,应调用该函数,使得网络数据包能够得到及时处理,释放网络内部资源,从而避免网络阻塞。
(22)intPing(char*IPStr,unsignedlongMilliseconds)功能描述:采用ICMP协议查询远端的服务器主机是否工作。
23 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 输入参数:char*IPStr远端主机的IP地址,如:“192.168.201.121”unsignedlongMilliseconds等待远端服务器主机应答的最长时间,单位为毫秒,时间一般设置在100—3000毫秒之间。
返回值:=0:远端服务器主机有应答,说明远端服务器主机处于运行状态。
!
=0:无相应的服务器主机应答。
(23)intSetReloadWDTInNet(void(*)Reload())功能描述: 把WatchDog定时器的加载函数传给网络运行库,使之能在网络函数运行期间及时加载WatchDog。
输入参数: void(*)Reload()WatchDog加载函数指针。
备注:在网络初始化成功后,此函数只需调用一次即可。
(24)intSetupPPPLink(unsignedlongtimeout);功能描述:作为PPP的客户端,启动PPP连接,进行PPP认证,并检查PPP状态。
输入参数: unsignedlongtimeoutPPP客户端启动PPP连接时设定的一个超时时间,时间单位为秒,缺省值 为 300,即5分钟。
返回值:
0 PPP打开、认证成功,进入网络层协议状态。
<
0 PPP打开、认证失败。
(25)intGetPPPState();功能描述:获取PPP状态 24 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 返回值:10-
1 PPP打开、认证成功,进入网络层协议状态。
PPP处于协商状态 PPP处于关闭状态,可再重新建立PPP连接 (26)intSetPPPUsername(char*NewName);功能描述:设置新的用户名称。
输入参数:char*NewName需要设置的新的用户名称,如果NewName为NULL,则沿用缺省的用户名,“guest”备注:PPP库只保留NewName的指针,因此用户应把NewName作为全局或静态量,切忌作为自动变量放在堆栈里。
(27)intSetPPPPassword(char*NewWord);功能描述:设置新的用户密码。
输入参数:char*NewWord需要设置的新的用户密码,如果NewWord为NULL,则沿用缺省的用户密码,“888”备注:PPP库只保留NewWord的指针,因此用户应把NewWord作为全局或静态量,切忌作为自动变量放在堆栈里。
(28)intForcePPPLinkDown();功能描述:强制执行PPP终止操作,使PPP返回关闭状态。
(29)intSendATCmdString(char*ATCmdString);功能描述:发送AT指令。
25 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 输入参数: char*ATCmdString需发送的AT指令串。
返回值: >
0 发送AT指令的长度。
<
0 发送AT指令失败。
(30)intGetATCmdEcho(); 功能描述:获取AT指令的响应值。
返回值: >
0 AT指令的响应值 -
1 没有响应值 (31)intSetSerMuxUp(); 功能描述:安装多路转换协议,并创建3个虚拟逻辑通道。
该函数应在发送 “AT+CMUX=0”并返回“OK”,延时2秒后调用。
返回值:
0 安装多路转换协议成功,并成功创建3个虚拟逻辑通道。
<0安装多路转换协议失败。
GPRS模块将在5秒后回到AT命令状态。
3.2GPRS应用 PPP协议的GPRS应用的测试程序在光盘“PPPNet”目录下,该目录中提供了两个测试程序: GPRSTST.EXE:用于测试ETR186利用GPRS拨号上网的功能。
GPRS232.EXE:ETR186利用GPRS拨号上网实现RS232接口的数据和远端数据服务中心进行数据的透明传输。
下面就对这两个程序进行详细的说明。
3.2.1GPRS自动拨号上网GPRSTST实现了GPRS自动拨号上网的功能,该程序运行后,如果LCD屏上显示 “IP=**.**.**.**”,即表示GPRS拨号上网成功。
GPRSTST.PRJ工程文件包含以下文件: 26 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 ETR_PPP.LIB 提供PPPTCP/IP协议的接口函数 ETR186.CPP 提供ETR186硬件接口函数 GPRS.CPP 提供了进行GPRS自动拨号上网的函数 GPRSTST.CPP PRJ文件的主函数 下面重点介绍GPRS.CPP模块所实现的功能。
利用GPRS无线上网有以下几个步骤:1)GPRS无线模块上电;2)通过发送AT指 令与中国移动网的节点服务器建立连接;3)在连接建立后,进行相应的PPP配置,PPP 配置成功后,即可获得节点服务器配置IP地址,进行网络通讯了。
为了方便用户的使用, 我们对GPRS无线上网的这几个步骤进行封装,其中利用C语言的功能强大的函数指针变 量以及有限状态机的处理机制,提供给用户一个单一的函数PPP_Running(),该函数每执 行一个步骤就退出,并返回当前的状态,以便于应用程序的设计。
该函数实现的功能包括 GPRS自动拨号上网,上网后若出现断线,PPP链接重新建立,以保证设备一直在线。
用 户只需根据函数的返回值来判断GPRS是否上网,以便于应用程序进行所需的TCP/IP通讯。
函数的定义包含在GPRS.H中,在GPRS.CPP中实现。
GPRS.H中定义了两个函数: PPPGPRSStatePPP_Running() 功能描述:实现GPRS自动拨号上网,不断调用该函数,可保证GPRS一直在线。
返回值:返回进行GPRS拨号上网状态。
0: GPRS模块上电操作 1: 初始化PPP网络相关参数。
2: 发送“ATE0”指令操作。
3: 发送“AT+CGATT?
”指令,用于检查模块是否附着到GPRS网络 4: 发送“AT+CGATT=1”指令,用于设置模块附着到GPRS网络 5: 发送“AT+CGDCONT=
1,"IP","CMNET"”,设置GPRS通讯参数。
6: 发送“ATD*99***1#”,拨号到GPRS节点服务器。
7: 进行PPP配置、协商。
8: 表明GPRS上网、PPP配置成功,应用程序可进行TCP/IP通讯。
9: 断开GPRS网络,关闭PPP网络,同时关闭了GPRS模块电源。
voidPPP_ReStart() 27 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 功能描述:重新启动PPP配置。
该函数主要针对在进行TCP/IP数据通讯过程中出现异 常时的应用,可通过调用该函数重新启动GPRS操作。
返回值:无。
GPRSTST程序在运行时,将在LCD屏上显示“RIdx=”,根据这个序号对应以上的说明,用户可判断GPRS拨号上网的状态,直到LCD屏上显示“IP=**.**.**.**”,表明GPRS拨号上网成功。
3.2.2GPRS数据透明传输 程序介绍 程序GPRS232实现了通过串口数据和远方数据中心之间的透明传输。
GPRS232.PRJ 文件包括有以下模块: ETR_PPP.LIB 提供PPPTCP/IP协议的接口函数 ETR186.CPP 提供ETR186硬件接口函数 READINI.CPP 提供从配置文件中读取参数接口函数 GPRS.CPP 提供了进行GPRS自动拨号上网的函数 TCPCLNT.CPP 提供打开、建立TCP连接的管理程序 RS232X3.CPP 提供ETR186串口驱动程序 GPRS232.CPP PRJ文件的主循环 GPRS.CPP模块已经在上一节中作了详细的介绍,这里主要介绍TPCLNT.CPP和 GPRS232.CPP。
在TCPCLNT.CPP中,其通讯方式是以客户端方式(或称主动方式)打开TCP连接, 并等待连接建立,并提供相应的读写数据的接口函数。
在该模块中定义了一个TCPClient 的类,来实现以上功能。
采用C++的类来设计程序有助于得到更加稳定的程序结构。
class TCPClient类中定义了连接的三种状态:CLOSED表示关闭、START表示连接打开、OPEN 表示连接已经建立。
提供的公共函数有: voidInit(structSERVER_ID*pSvrID);功能描述: 带入初始化参数,即通过结构参数pSvrID设置远端数据中的IP地址和端口号。
intSetTimeoutCnt(longNumTick);功能描述: 28 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 用于设置timeout的时间,其参数NumTick为设置超时时间的Tick值,1个Tick值约为55ms,如果NumTick则表明不用设置超时。
intIsTimeout();功能描述: 检查是否超时,函数返回1表明已经超时,返回0没有超时。
CONN_STATERunning();功能描述: 作为TCPCliend的主要运行函数。
包括三项处理:1)连接处于CLOSED状态,则打开一个新的连接,连接打开成功后,其状态由 CLOSED转换到START。
2)连接处于START状态,则检查连接是否建立,同时检查超时时间,如果连接建 立,其状态由START转换到OPEN;如果时间超时连接还未建立,则关闭连接, 状态又回到CLOSED。
3)连接处于OPEN状态,则检查连接是否有异常,或是被对方关闭,如果没有检 查到则一直保持OPEN状态,否则将关闭TCP连接,其状态回到CLOSED。
该函数返回TCP连接的状态。
intWriteData(char*DatBuf,intDatLen)功能描述: 通过TCP连接进行发送数据。
该函数对于连接状态处于OPEN时才有效。
intReadData(char*DatBuf,intDatLen)功能描述: 检查TCP连接是否收到数据。
该函数对于连接状态处于OPEN时才有效。
29 028-85140028 英创信息技术有限公司 intClose();功能描述:关闭已打开的连接。
ETR186嵌入式网络模块编程手册V5.04 GPRS232.CPP定义了该工程文件的主循环,利用各个模块所提供的接口函数,可进行GPRS自动拨号上网,和远端网络数据中心建立TCP连接,以实现数据透明传输的功能。
在该模块程序中,1)第一步进行的是初始化操作,包括从配置文件中读取配置参数,以及对串口的初始化操作等;2)进入程序的主循环,首先调用PPP_Running()自动进行GPRS拨号上网操作,直到该函数返回PPP的状态值为PPPLINKUP,表明GPRS拨号上网已成功。
循环再进入到下一步操作,和远端服务中心建立TCP的连接,直接调用TCPManager->Running(),直到该函数返回连接的状态为OPEN。
此时主循环一方面检查网络对端是否有数据,如果有将接收的数据通过RS232发送出去;另一方面检查RS232串口是否接收到数据,如果有将接收到的串口通过TCP连接发送到对端服务中心。
从而实现了RS232和远端数据中心之间的数据透明传输。
同时需要说明的还有,在该例程中,还有一个心跳包的处理,如果在设置的心跳时间内一直没有数据的通讯传输,程序将主动发送一个心跳测试包到远端的服务中心,在该程序中的心跳测试时间设置为400个Tick值,约为20秒。
具体实现的方法请参见该程序代码。
程序测试在进行测试时,和串口相连的设备可是一台PC1机,在该PC机上运行串口调试助手程序(在提供光盘“测试工具”目录下)或者是Windows的超级终端程序;而另一端远端数据中心可在另一台PC2(已连入互联网的PC2)上运行我们公司提供的VC测试程序TCPTest(在提供光盘“测试工具”目录下)。

1.让PC2具有互联网可访问的IP地址,有以下两种方法:1)互联网静态的IP地址。
2)通过ADSL或Modem拨号上的互联网,获取的是动态的互联网IP地址,运行>ipconfig,即可获得其动态IP地址。

2.配置文件config.ini介绍在运行GPRS232程序时,须带上配置文件config.ini,该文件主要用于配置一些通讯参数。
[Config] 30 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 RemoteIP=61.157.22.196用于定义互联网上需连接的服务器的IP地址(即PC2的互联网IP)。
RemotePort=1001用于定义在互联网上远端服务器的端口号。
BaudIdx=12用于定义ETR186和设备(PC1)RS232通讯的波特率。
选择1对应的波特率为115.2kbps,2对应的波特率为57.6kbps,3对应的波特率为38.4kbps,6对应的波特率为19.2kbps,12对应的波特率为9600bps,以此类推。

3.“远方服务数据中心”测试程序TCPTest简介TCPTest是运行在PC2上的程序,在运行该程序之前,首先须使PC2连上互联网,PC2上网后,运行TCPTest程序,选择为“服务器”模式,并点击侦听,其中的消息框将处于灰化状态。
如下图: 如果ETR186与PC2之间TCP连接建立成功,灰化的消息框将变亮,此时就可通过消息框对ETR186发送字符串,同时接收设备通过ETR186发送的数据。
接收到的数据将显示在接收的消息框内。
31 028-85140028 英创信息技术有限公司
4、串口驱动程序 ETR186嵌入式网络模块编程手册V5.04 ETR186嵌入式串行通讯程序能实现RS232/RS485串行通讯数据的收发,我们提供了两个测试程序。
测试的方法是将测试程序下载到ETR186运行,而另一端在PC机上运行串口调试助手程序或者是windows提供的超级终端程序。
4.1串口驱动API函数 ETR186提供了3个异步串口COM1、COM2、COM3,在缺省状态下COM1串口的 最高波特率为115.2kbps。
其中COM1与PC机的串口完全兼容,IO映射访问。
COM2和 COM3来自于RDC1610内部。
为了方便用户掌握串口操作的具体细节,各个串口的低层驱 动函数的定义和说明均以源代码的方式提供给客户,共包括6个函数,下面就各个函数的定 义作一说明。
这几个函数的定义在RS232X3.h,函数的说明在RS232X3.cpp。
(1)intInitUART(intComIdx,intBaudIdx,intParity) 功能描述:初始化串口 输入参数: ComIdx:串行端口号设置,可选值如下表 COMI助记符 简要说明 dx
0 COM1 16C550,端口地址为0x3F8
1 COM2 来自CPU内部,16C550兼容
2 COM3 来自CPU内部,16C550兼容 BaudIdx:通讯波特率设置,用户可根据需要进行配置,本演示程序中采用 值为12(9600bps)。
现将常用可选值列于下表,供用户参考:BaudIdx实际设置的波特率
1 115.2kbps
2 57.6kbps
3 38.4kbps
6 19.2kbps 12 9600bps 32 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 24 4800bps 48 2400bps 96 1200bps Parity:用于选择串口通讯的奇偶校验。

0 无校验
1 奇校验
2 偶校验 注:本初始化函数中对数据通讯格式的设置为:8bit,1,noParity,用户也可根据自己的需要在源程序中对配置进行必要的调整。
(2)intInstallISR(intComIdx)功能描述:置中断。
输入参数: ComIdx:串行端口号设置,定义同InitUART。
返回参数: 0:安装中断成功。
(3)intUninstallISR(intComIdx)功能描述:恢复中断。
输入参数: ComIdx:串行端口号设置,定义同InitUART。
返回参数: 0:恢复中断成功。
(4)intPutOutputData(intComIdx,charabyte)功能描述:将待发送数据置入输出数据缓冲区中。
输入参数: ComIdx:串行端口号设置,定义同InitUART。
abyte:待发送数据字节返回参数: 33 028-85140028 英创信息技术有限公司 0:输出数据缓冲区未满,写数成功。
-1:输出数据缓冲区已满,写数失败。
ETR186嵌入式网络模块编程手册V5.04 (5)voidStartSend(intComIdx)功能描述:启动中断,开始数据发送过程输入参数: ComIdx:串行端口号设置,定义同InitUART。
(6)intGetInputData(intComIdx)功能描述:从接收数据缓冲区中取出数据输入参数: ComIdx:串行端口号设置,定义同InitUART。
返回参数: 整数:返回接收数据缓冲区中所取整数-1:接收数据缓冲区为空 4.2RS232收发演示程序 232DEMO.PRJ工程文件由232DEMO.CPP及RS232.CPP构成。
在232DEMO.CPP中包含主函数main(),main()首先根据命令参数(端口号)对相应串口进行初始化,开中断,实现数据接收显示及将接收数据向外发送的功能。
程序中,端口号通过命令行参数的形式输入。
如:232DEMOCOM3。
如果是在调试状态下运行,为:td–rp232DEMOCOM3。
由232DEMO.prj编译连接生成的232DEMO.exe作为服务器端,它首先响应客户端的接收请求,将客户端发送的数据在显示屏上显示出来,同时又将接收到的数据发送到客户端。
建议客户端执行串口调试助手程序或者windows提供的超级终端程序。
4.3RS485数据收发 RS485的数据收发的低层驱动函数和RS232是完全一致的,所以相关的函数介绍请参见RS232的说明。
RS485和RS232的区别在于RS485是半双工的,所以RS485收发的数据都是以具有一定特征的数据帧为单位的,为了方便测试,在我们提供的程序RS485demo.prj和Clnt.prj是以字符“!”作为一个数据帧的结束标志。
34 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 35 028-85140028 英创信息技术有限公司
5、LCD汉字显示程序 ETR186嵌入式网络模块编程手册V5.04 ETR186的一类主要应用是作为智能终端的核心平台,智能终端总是带有一种显示单元。
ETR186作为一种高效、低成本的产品解决方案,专门针对小型的LCD模块(分辨率通常在122×32至320×240)设计了一套通用的汉字及图形显示接口函数。
这些API函数均以源码形式提供,用户不仅可以直接使用,还可根据自身需求进行必要的修改。
关于LCD汉字驱动及相应的测试程序在光盘中目录下。
5.1汉字显示接口函数定义 ETR186的LCD汉字显示API共包括7个函数,以及一个从CPP文件中提取汉字字模的工具程序source.exe(源码在source.cpp中)。
这些函数的详细定义如下: (1)intLCD_Init(char*CHN_FntFile,char*ASCII_FntFile)功能描述:对LCD进行图形方式初始化,并加载汉字和西文字符字库。
输入参数:char*CHN_FntFile:汉字字库文件名,我们提供的汉字字库文件mlib.chrchar*ASCII_FntFile:ASCII码文件名,我们提供的ASCII码库文件ascii.chr (2)intLCD_Clearup()功能描述:在图形方式下对LCD进行清屏处理。
输入参数:无 (3)intLCD_SetMode(intMode)功能描述:设置LCD的显示模式。
输入参数:intMode:0表示copy方式显示模式1表示xor方式显示模式 (4)intLCD_PutPixel(intx0,inty0,intcolor);功能描述:在图形方式下进行描点。
输入参数:intx0:点的列坐标,范围0~127(或0-319),不可大于或等于128(或320)inty0:点的行坐标,范围0~63(或0-239),不可大于或等于64(或240) 36 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 intcolor:颜色设置,0(不显示)或者1(显示)。
(5)intLCD_DrawLine(intx0,inty0,intx1,inty1,intcolor);功能描述:在图形方式下进行画直线输入参数:x0:直线开始列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:直线开始行坐标,范围0~63(或0-239),不可大于或等于64(或240)x1:直线结束列坐标,范围0~127(或0-319),不可大于或等于128(或320)y1:直线结束行坐标,范围0~63(或0-239),不可大于或等于64(或240)color:颜色设置,0或者
1。
(6)intLCD_FillBar(intx0,inty0,intx1,inty1,intcolor);功能描述:在图形方式下画Bar条。
输入参数:x0:Bar开始列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:Bar开始行坐标,范围0~63(或0-239),不可大于或等于64(或240)x1:Bar结束列坐标,范围0~127(或0-319),不可大于或等于128(或320)y1:Bar结束行坐标,范围0~63(或0-239),不可大于或等于64(或240)color:颜色设置,0或者
1。
(7)intLCD_WriteString(intx0,inty0,char*pStr,intcolor,intlen=0);功能描述:在图形方式下写字符串(中文或西文字符)。
输入参数:x0:字符输入列坐标,范围0~127(或0-319),不可大于或等于128(或320)y0:字符输入行坐标,范围0~63(或0-239),不可大于或等于64(或240)*pStr:需显示的字符串color:字符颜色设置,0或1len:字符显示长度,缺省设为
0,表示按str实际长度显示;否则按length 37 028-85140028 英创信息技术有限公司 定义的长度显示。
ETR186嵌入式网络模块编程手册V5.04 5.2汉字显示程序的有关事项
1.在BC集成环境(IDE)下建立包含由英创公司提供的LCD低层驱动模块(如HD61202.cpp、SED1335.cpp等)、Dotlib.cpp、Lcd_api.cpp及其他应用模块的工程文件,在需要的场合调用相关的图形操作函数或汉字显示函数。
最后编译连接形成可执行文件(.EXE)。

2.汉字字模mlib.chr可以通过我们提供的source.exe搜索生成,直接编译source.cpp文件即可生成source.exe运行文件。
source文件在运行时,需带上参数,参数为需搜索的cpp文件名。
如:>sourcetst1.cpp搜索tst1.cpp中的汉字,生成新的汉字库mlib.chr,同时生成新的头文件source.h。
此时需再重新编译工程文件,最后连接形成与用户应用相关的可执行文件。
如果从多个CPP文件提取汉字,则执行source*.cpp。
注意不要把source.cpp放在应用程序同一个目录,以免把source.cpp中的汉字也搜索进去。
3.mlib.chr最多只能包含512个汉字。
需要全汉字的应用,则需要把整个汉字字模文件加载到ETR186的高端存储器中,有关这方面的问题,请与英创公司技术支持部门联系。

4.显示中西文必须使用工具软件tdrf把mlib.chr和ascii.chr先拷贝入ETR186的运行盘中(B:\或C:\),然后程序才能正常运行。

5.建议客户的应用程序,不用汉字来写注释,以保证mlib.chr包含的都是有效汉字字模。
5.3图形方式下汉字和西文显示示例 #include#include#include#include#include"lcd_api.h" 38 028-85140028 英创信息技术有限公司 voidmain(){ intx,y; ETR186嵌入式网络模块编程手册V5.04 clrscr(); //清屏 printf("\nDOTLCDDemo\n"); //gotograghicmodeLCD_Init("mlib.chr","ascii.chr"); //打开LCD图形显示模式,并加载字模文件 LCD_SetMode
(1); //settoXORmode //showchinesecharatcenterposition charBufStr[20];strcpy(BufStr,"**欢迎测试**"); x=(128-strlen(BufStr)*8)/2; y=8; LCD_WriteString(x,y,BufStr,1);//图形方式下显示西文或中文字符 strcpy(BufStr,"嵌入式网络模块"); x=(128-strlen(BufStr)*8)/2; y=24; LCD_WriteString(x,y,BufStr,0);//图形方式下显示西文或中文字符 //drawlines LCD_DrawLine(0,42,127,42,1); LCD_DrawLine(0,63,127,63,1);//图形方式画直线 //drawcurve for(x=0;x<128;x++) { y=53-10.0*sin(2.0*M_PI*x/24.0);; LCD_PutPixel(x,y,1); 39 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 } //图形方式下画曲线 for(x=0;x<128;x++) { y=53-10.0*sin(2.0*M_PI*x/24.0);; LCD_PutPixel(x,y,1); } //图形方式下再画与上相同的曲线,如果是在异或(xor)模式下,该操作相当于清曲线。
LCD_FillBar(0,42,127,63,0); LCD_FillBar(0,42,127,63,1); LCD_FillBar(0,42,127,63,0); //图形方式下画Bar条。
} 40 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 附录1BC31集成开发环境的基本配置 为了编写正确的应用程序代码,需对BC集成开发环境的相关参数做出相应的设置。
本附录将对与应用程序开发相关的主要配置参数与以说明,具体的设置方法请参见“BC使用简介”中的相关章节。

(1)编译路径的设置建议在AUTOEXEC.BAT中把“BC\BIN”加入系统的路径列表中,这样用户可在任意工作目录中启动BC。
若BC放置在C:\BC,则在Autoexec.bat可加入:
(2)(3)
(4) PATH=C:\BC\BIN;%PATH%把BC软件所在目录设入BC集成开发环境的目录选项中,如BC安装在C:\BC,则Include目录应设为C:\BC\INCLUDE;而Library目录应设为:C:\BC\LIB。
模式的设置由于我们的TCP/IP库采用的是Large模式,因此用户在包含TCP/IP库的工程文件中,需要将编译模式设置为Large模式。
如果用户采用了我们提供的RTOS库文件,还需要将编译模式设置为Huge模式。
代码生成选项设置代码生成选项中有3项内容用户需仔细确认设置,它们是:浮点设置:由于386EX不带协处理器,因此该项应设置为仿真“Emulation”。
指令设置:应设置为“80186”,不能选择“80286”或“80386”。
调试设置:建议用户设置带调试信息的编译,这样可在TD中进行源码调试。
运行库的设置由于ETR186已不支持通常的VGA显示,所以无需连接图形库“Graphicslibrary”。
标准的Run-time库应设置为静态“Static”,注意其他库的选项都应设置为无“None”。
41 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 附录2基于ETR186的应用软件开发流程 如下图所示,ETR186的软件开发可完全在PC上按以下步骤进行: 启动BC集成环境(IDE) 建立或修改工程文件(UserApp.prj) 编辑应用程序模块(C/C++、汇编) C/C++运行库 未通过未通过 编译、汇编、连接各程序模块 是否通过?通过 下载调试(td-rpUserApp) 调试通过否?通过 软件开发完成 TCP/IP通讯库RTOS系统调用 ETR186硬件系统 第1步在PC环境下启动BC/C++或TC/C++的集成开发环境IDE。
如: 42 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 C:\Myapp>BC第2步建立工程(Project)文件,在Prj工程文件中主要是定义系统的各软件模块。
Prj工程文件,可根据设计需求随时进行修改。
第3步编写各软件模块,即常规的程序设计。
在BC的集成环境下,用户即可采用C/C++这样的高级语言设计程序,也可用x86的汇编来设计关键模块,如硬件驱动程序、中断服务程序等。
第4步对编写好的程序进行编译(Compiler)、汇编(Assembler)、连接(Linker),若程序有错,集成环境将提示错误信息,用户可根据错误信息返回第2步进行修改,直至生成可执行文件(如userapp.exe)。
第5步运行调试程序,对第4步生成的用户应用程序进行调试,典型命令如下: C:\Myapp>td–rpuserappTD具有自动下载应用程序至目标系统的功能。
TD是一个功能强大的源级程序调试工具,基本界面如下: 若调试发现错误,可方便退出调试,返回第2步进行修改,直至整个程序完整调试。
第6步调试完成即意味着程序开发的结束,用户可把ETR186设置成直接运行模式,即可让系统独立运行。
43 028-85140028 英创信息技术有限公司 ETR186嵌入式网络模块编程手册V5.04 附录3TDRF及TD调试工具使用说明 TDRF是一个简易的基于RS232的远程文件访问工具软件。
基本使用方法如下: TDRF[选项]命令[参数] 其中的选项有: -rp<#>设置HOST的调试串行端口号,rp1=COM1;rp2=COM2。
-rs<#> 设置串行波特率,rs1=9600bps;rs2=19kbps;rs3=38kbps;rs4=115kbps。
缺省选项为:-rp1
-rs4,即COM1,115k波特率。
“命令”为类似DOS命令的英文单词或单个缩写字母,与DOS命令类似,跟在dir、copy、 del、copyfrom命令后的参数可采用“*”表示任意文件名或扩展名。
TDRF的主要命令有: 命令 缩写参数数目 描述 Copy
T 1或
2 拷贝HOST文件至ETR186 Copyfrom
F 1或
2 拷贝ETR186中的文件至HOST Del,Erase
E 1 删除ETR186A盘或C盘中的文件 Dir
D 0或
1 显示ETR186中的文件目录 Ren
R 2 重命名ETR186中的文件 Md
M 1 在ETR186中建立新目录 Rd
K 1 删除ETR186A盘或C盘中已存在的目录 Cd
C 0或
1 改变ETR186的当前目录 TD即TurboDebugger是一个功能强大的源程序调试工具,在基于ETR186的应用开发中, 可采用TD作为基本的交叉调试工具。
具体方法为:把ETR186的RS232调试端口与用于 软件开发的PC的一个RS232端口(COM1或COM2)相连,一般在编写应用程序的当前 目录启动TD,如: C:\MyApp>TD–rp#Userapp 其中-rp#用于指定PC的调试端口,-rp1=COM1,也可简写成-rp;-rp2=COM2。
运行TD时,用户编写的应用程序(如Userapp.exe)将首先被下载至ETR186的当前目录, 然后应用程序自动启动,进入调试状态,相应的用户PC的屏幕上会显示应用程序的main 模块的源代码,如附录5中的图所示。
这时就可进行各种程序调试了。
44 028-85140028

标签: #服务器 #怎么做 #文件夹 #比例 #cad #立面图 #csdn #文件格式