基于WinCE的串口应用程序编写及测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于WinCE的串口应用程序编写及测试
摘要:串口在嵌入式系统与PC通信时可以起到非常重要的作用,但是对于串口应用程序的测试却因为种种原因非常麻烦。详细论述了如何对串口应用程序进行测试。
关键词:WinCE;串口;串口应用程序测试
串口也称为串行接口或串行通信接口,在实际嵌入式学习或开发中可以深刻地体会到串口在开发板与PC通信过程中起了很好的作用。然而编写和测试串口应用程序并非那么容易,本文将结合实际WinCE与PC的特点讲述如何实现对串口的操作。1串口应用程序的编写
1.1WinCE下串口通信简介
在WinCE下运行的程序,一般都是在Windows环境下开发,再通过USB线或U盘等下载到嵌入式设备中运行的。文中使用.NET Compact Framework (简称.NET CF),并使用C#进行串口应用程序开发。由于在.NET CF下提供了专门的SerialPort类来操作串口,所以开发WinCE下的串口应用程序相对来说会比较容易。1.2串口应用程序的编写
在串口应用程序中,“发送区”文本框名为txtSend,“接收区”文本框名为txtRecv,项目当中添加了一个SerialPort控件,名为port,“发送”按钮名为btnSend。下面给出接收和发送部分
的主要代码。
port控件中DataReceived事件(用于接收)对应的处理函数如下:
void port_DataReceived(object send,SerialDataReceivedEventArgs e)
{
int bytesToRead = port.BytesToRead;
byte[] arr = new byte[bytesToRead];
port.Read(arr,0,bytesToRead);
string str = Encoding.Default.GetString(arr,0,bytesToRead);
txtRecv.Text += str;
}
“发送”按钮单击事件对应的处理函数如下:
void btnSend_Click(object send,EventArgs e)
{
byte[] arr = Encoding.Default.GetBytes(txtSend.txt);
port.Write(arr,0,arr.Length);
}
总体来说,使用C#开发串口应用程序非常简单、方便。在代码中已经对编码进行了处理,在中文Windows和WinCE下显示中文没有任何问题。2串口应用程序的测试
串口应用程序编写起来相当方便,但对串口应用程序的测
试远没有前面那样轻松。下面就详细讨论笔者做串口应用程序测试过程中遇到的问题并逐一给出可行的解决方案。2.1开发板与PC之间物理串口的测试1
笔者使用的开发板是mini2440,在开发板上移植了WinCE6.0。此处讨论开发板与PC之间使用实际串口线连接来对物理串口进行测试。测试之前,将串口测试程序通过USB线下载到开发板当中运行。测试当中使用的是物理串口,开发板和PC所使用的都是COM1。
那么在PC端使用什么工具呢?当然,大部分人会立即想到要使用超级终端。在嵌入式开发过程中超级终端几乎是必备的交互工具,在进行嵌入式系统移植过程中尤为重要。打开超级终端,在连接时使用选择“COM1”。在端口设置中,每秒位数选择“9600”,这个波特率值要与串口应用程序中SerialPort控件的BaudRate保持一致;数据流控制选择“无”;其余保持默认就可以了。
开发板端与PC端都设置好之后就可以进行测试了。在开发板端发送数据,在PC中的超级终端软件界面中就会显示出来。在超级终端中输入数据(无回显),在开发板的测试程序中也可以接收到。2.2开发板与PC之间物理串口的测试2
在开发板上还是用2.1节的那个测试程序,对于PC端是不是有更好的选择呢?笔者一开始也没有多想就用超级终端,后来想想也试验了,在PC端同样使用那个测试程序来测试也是可
行的。
前面的程序是用.NET CF完成的,它在.NET下也可以运行(因为此处对.NET CF的使用过程中并未直接涉及硬件,正好.NET下也支持SerialPort类,所以同一程序在WinCE和Windows中都可以运行)。这种对物理串口的测试方式还是挺有意思的,并不需要更改任何代码,也不需要使用其他额外软件。超级终端虽然很有用,但它在XP之后的Windows系统中默认是不提供的,需要从网上下载之后才能使用。
此处的测试方式根本就不需要超级终端,并且也不需要设置波特率或数据流控制等,使用起来非常方便。同时,在超级终端中输入汉字也不方便,而直接使用测试程序本身,在Windows 中运行时可以直接输入汉字。2.3在PC中测试串口应用程序前面两种方式都是使用物理串口进行测试,在许多情况下进行模拟测试也是相当重要的。每次都将程序向开发板移植也挺麻烦,为了方便起见,可以在本机完成测试之后再将程序移植到开发板,这样更加省时省力。
在PC中测试串口应用程序并非那么容易。如果一台机器上有两个或以上的串口那么就会很容易做到,其原理也很简单,与前面的WinCE与PC物理串口测试类似,只要将两个串口用串口线连接起来,用前面类似的方法就可以完成测试。而现实情况是,现在很多PC都没有串口,或是因为主机箱上没有外接串口。绝大多数笔记本也是没有串口的,不是没有外接而是根本
就没有。
基于这种情况,就需要使用虚拟串口进行测试了。可以虚拟串口软件(比如Virtual Serial Port Driver 6.0),在其中添加了一对虚拟串口COM2和COM3。
添加完成之后,就可以使用前面的那个串口应用程序了,运行该程序的两个实例。其中一个使用COM2,另一个使用COM3。2.4WinCE模拟器与PC串口测试
有了前面的基础再来看如何使用WinCE模拟器与PC来进行串口测试可能会容易一点。
WinCE模拟器也是一个软件,也就不可能使用物理串口来测试了,只能使用虚拟串口。而WinCE模拟器的串口怎样与PC 中的串口连接起来呢?方法是让WinCE模拟器中串口与PC串口做个映射。可以通过在指定WinCE模拟器的属性设置选项卡中选择“Peripherals”,如可将Serial port 0映射为PC中的COM3。
此时将串口应用程序移植到WinCE模拟器当中运行,在PC端也运行一个串口应用程序实例。使用COM2就可以与模拟器中的串口应用程序进行通信了。
请注意,在模拟器中打开的是COM1。其实,COM1对应于模拟器属性设置当中的Serial port 0(COM2对应于Serial port 1,依次类推)。而PC中COM3已经与Serial port 0做了映射,所以PC中COM3也就相当于模拟器中的COM1。同时在虚拟串口软件中已经设置COM2和COM3为连接在一起的串口对(2.3节),