今天学习了wince下的串口通讯实验。现小结如下:
1。设备文件名:设备文件名前缀由3个大写字母组成,用来标识与特殊流接口驱动程序相对应的特殊设备文件名。文件名前缀存储在注册表的相应驱动程序的键值中。如COM(串行驱动程序)、ACM(音频压缩管理器)等。
2。访问设备驱动方法:通过CreateFile、ReadFile、 WriteFile、 DeviceIoControl等函数访问。
3。串口通讯实现过程:
1)打开串行端口:HANDLE hCom = CreateFile(L"COM1:", GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);//注意加冒号!!!!
2)设置DCB:
int InitDCB(HANDLE hPort)
{
DCB PortDCB;//DCB串口参数结构
PortDCB.DCBlength = sizeof(DCB);
GetCommState(hPort,&PortDCB);
PortDCB.BaudRate = 9600;//波特率
PortDCB.ByteSize = 8; //数据位
PortDCB.Parity = NOPARITY; //校验位
PortDCB.StopBits = ONESTOPBIT; //停止位
return SetCommState (hPort, &PortDCB);
}
3)为指定的串口设置响应延时时间参数:
int InitCommTimeouts(HANDLE hPort)
{
COMMTIMEOUTS CommTimeouts;//时间参数
GetCommTimeouts (hPort, &CommTimeouts);//取得时间参数
CommTimeouts.ReadIntervalTimeout = MAXDWORD; //最大时间参数
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 0;
CommTimeouts.WriteTotalTimeoutConstant = 0;
return SetCommTimeouts (hPort, &CommTimeouts);
}
4)设置字符事件:SetCommMask(hCom , EV_RXCHAR);
5)设置串口读写缓冲区大小:SetupComm(hCom ,2048,2048);
6)创建接收线程:com_hThread = CreateThread(NULL, 0, ReadThreadPort, this, 0, NULL);
由于WinCE不支持重叠I/O。因此不要从主线程读写大量的串行数据,因为这些线程还负责处理用于它们窗口的消息队列。不能因为读大量的串行数据而阻塞它们。因此应用单独的专有线程来读写串口。
DWORD WINAPI ReadThreadPort(LPVOID lpvoid)//线程函数实现
{
CComChatDlg* pDlg = (CComChatDlg*)lpvoid;
BOOL fReadState;//读串口返回值
DWORD dwCommModemStatus;
DWORD dwLength;//未读字节个数
COMSTAT ComStat;//串口状态结构
DWORD dwErrorFlags;//错误码
DWORD dwBytesRead;//读字节个数
while (pDlg->com_hCom!=INVALID_HANDLE_VALUE&&pDlg->com_hCom!=NULL)
{
WaitCommEvent (pDlg->com_hCom,&dwCommModemStatus, NULL);//等待串口事件
if (dwCommModemStatus & EV_RXCHAR) //如果为数据到达事件
{
ClearCommError(pDlg->com_hCom,&dwErrorFlags,&ComStat);//读取串口状态并清除状态标志
dwLength=ComStat.cbInQue;//读缓冲区中的未读字节个数
if(dwLength>0&&dwLength<(500*sizeof(WCHAR)))
{//读串口
memset(pDlg->com_ReadChar,0,sizeof(WCHAR)*500);
fReadState=ReadFile(pDlg->com_hCom,pDlg->com_ReadChar,dwLength,&dwBytesRead,NULL);
if(!fReadState)//读取失败不理会
{
}
else//读取成功
{
//插入读入的字符串
pDlg->com_Msg.Insert(0,pDlg->com_ReadChar);
pDlg->UpdateData(FALSE);
}
}
//返回串口状态
GetCommModemStatus (pDlg->com_hCom,&dwCommModemStatus);
}
}
return 0;
}
7)最后关闭串口:
oid ShutPort(HANDLE hPort)//关闭串口
{
SetCommMask(hPort,0);//取消串口事件
CloseHandle(hPort); //关闭串口句柄
}
注:本文源码来自实验手册!!!
分享到:
相关推荐
Windows CE 是一种嵌入式操作系统,采用模块化的结构,支持多种外部接口。介绍了在Windows CE 下开发串口通信软件的基本方 法。也简要介绍了Windows CE 在各领域的应用。
ce串口通讯源码,实现对ce,mobile用serialPort1读取串口的数据
win ce 串口调试,通过串口通讯收发数据
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊啊啊啊啊啊啊啊啊啊啊
很有用的win ce的串口程序,可以为 win ce 的串口开发做参考。
最近在研究WIN CE嵌入式应用程序开发,因本人初次接触VB NET,所以对它haunted不是很了解,更谈不上是嵌入式应用程序了,没办法,还得学啊,一般我们做嵌入式应用程序主要用到串口通讯,TCP通讯和界面美化,我就先从...
win CE 下可用的串口通信 ,基于C# 开发,支持485 232等串口通信;测试通过;注意要安装win ce开发sdk的,sdk最高好像支持VS2008,VS的版本不能太高的
win CE 虚拟键盘-DisplaySIP
Win CE.net串口驱动分析
Win CE 6.0 模拟器
WIN CE资源管理器
Windows CE 串口调试程序,欢迎使用
Windows Ebedded CE6.0 SP1.msi 是用作Windows Ebedded CE6.0 SP1.msi的补丁之用
包括串口类,和一个完整的测试对话框程序; 你可以看看wm5.0下mfc对话框菜单的操作,查了不少资料。 互相交流,共同提高。 我一直用mfc编程,看来该学学c#了,ce5.0下mfc很费劲呀,资料也少。老了,跟...
Win CE 上的WIN8主题 导航用一机多图
施耐德 plc串口通讯,TM200CE40R与其他设备485通讯,1. M200串口通讯说明 按照附件中的程序,我们的通讯主体是2台M200 PLC之间的Modbus RTU 通讯。接线方式为:2个本体PLC的SL1端口的D1->D1, D0->D0, COM->COM 分别...
用于在CE 系统下的串口通信编程,可以在vs2008IDE 下运行调试。
win ce同步软件(win 7)
Win ce 的模拟器 Win ce 的模拟器
很好学的win ce驱动开发教程