当前位置:首页 > 编程开发

WINCE下如何使用串口!

webgou16年前 (2010-09-08)编程开发198
1.创建线程

////////////////////////////////////////////////////////////////////////////

DWORD CApplicationDlg::CommRecvTread(LPVOID lparam)
{
DWORD dwLength;
char *recvBuf = new char[1024];
CBuletoothApplicationDlg *pDlg = (CBuletoothApplicationDlg*)lparam;

while(TRUE)
{
if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0)
break;

if (pDlg->m_hComm != INVALID_HANDLE_VALUE)
{
BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 1024, &dwLength, NULL);
if(!fReadState)
{
//MessageBox(_T("无法从串口读取数据!"));
}
else
{
if(dwLength != 0)
OnCommRecv(pDlg, recvBuf, dwLength);
}
}
}

delete[] recvBuf;
return 0;
}

///////////////////////////////////////////////////////////////////////////////

2.打开串口,创建串口接收线程

//////////////////////////////////////////////////////////////////////////////

void CApplicationDlg::OnButtonPair()
{
// TODO: Add your control notification handler code here
////////////////////////////////////////////////////////
Sleep(100);
////////////////////////////////////////////////////////
DWORD IDThread;
HANDLE hRecvThread;
UpdateData(TRUE);

CString strPort = PorTbl[m_ComboPort.GetCurSel()];
DWORD baud = BaudTbl[m_ComboBaud.GetCurSel()];
DWORD databit = DataBitTbl[1];
BYTE stopbit = StopBitTbl[0];
BYTE parity = ParityTbl[0];

BOOL ret = OpenPort(strPort, baud, databit, stopbit, parity);
if (ret == FALSE)
return;

m_ExitThreadEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

// 创建串口接收线程
hRecvThread = CreateThread(0, 0, CommRecvTread, this, 0, &IDThread);
if (hRecvThread == NULL)
{
MessageBox(_T("创建接收线程失败!"));
return;
}
CloseHandle(hRecvThread);

m_ButOpen.EnableWindow(FALSE);
m_ButClose.EnableWindow(TRUE);
MessageBox(_T("打开") + strPort + _T("成功!"));
}
/////////////////////////////////////////////////////////////////////////////////

3.串口接收线程

////////////////////////////////////////////////////////////////////////////////

DWORD CApplicationDlg::CommRecvTread(LPVOID lparam)
{

DWORD dwLength;
char *recvBuf = new char[1024];
CApplicationDlg *pDlg = (CApplicationDlg*)lparam;

while(TRUE)
{
if (WaitForSingleObject(pDlg->m_ExitThreadEvent, 0) == WAIT_OBJECT_0)
break;

if (pDlg->m_hComm != INVALID_HANDLE_VALUE)
{
BOOL fReadState = ReadFile(pDlg->m_hComm, recvBuf, 1024, &dwLength, NULL);
if(!fReadState)
{
//MessageBox(_T("无法从串口读取数据!"));
}
else
{
if(dwLength != 0)
OnCommRecv(pDlg, recvBuf, dwLength);
}
}
}

delete[] recvBuf;
return 0;

}

/////////////////////////////////////////////////////////////////////////////////

4.串口接收信息处理

////////////////////////////////////////////////////////////////////////////////

void CALLBACK CApplicationDlg::OnCommRecv(CWnd* pWnd, char *buf, int buflen)

{

//此处代码可以自己写了

//接收到的串口信息处理部分

}

//////////////////////////////////////////////////////////////////////////////

5.关闭串口

/////////////////////////////////////////////////////////////////////////////////

BOOL CApplicationDlg::ClosePort(void)
{
if(m_hComm != INVALID_HANDLE_VALUE)
{
SetCommMask(m_hComm, 0);
PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR);
CloseHandle(m_hComm);
m_hComm = INVALID_HANDLE_VALUE;
return TRUE;
}

return FALSE;
}

/////////////////////////////////////////////////////////////////////////////////

来源:http://hi.baidu.com/sudshine/blog/item/435135b26c5535aad9335ae4.html

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=318

标签: wince
分享给朋友:

“WINCE下如何使用串口!” 的相关文章

UTF-8 and Unicode FAQ

 2000年2月这篇文章说明了在 POSIX 系统 (Linux,Unix) 上使用 Unicode/UTF-8 所需要的信息. 在将来不远的几年里, Unicode 已经很接近于取代 ASCII 与 Latin-1 编码的位置了. 它不仅允许你处理处理事实上存在于地球上的任何语言文…

解读抽象的力量——记图灵奖得主Barbara Liskov演讲

2009年,我在图灵奖获奖仪式上要做一个讲话,在我想这个演讲怎么讲的时候,我就决定把我看过的论文再重新看一看,就是说我达到获得图灵奖的成就的那些最初的想法是什么,今天我非常想与大家分享这个。 我在斯坦福大学拿到了博士学位,当时学的是人工智能,我在读博士读到一半的时候,决定放弃人工智能转而研究计算机系…

预处理器-编译器-汇编器-链接器

这篇文章主要介绍内部链接与外部链接.…

Android类库常用类型解析

在Android类库中,各种包写成android.*的方式,重要包的描述如下所示:android.app :提供高层的程序模型、提供基本的运行环境android.content 包含各种的对设备上的数据进行访问和发布的类android.database :通过内容提供者浏览和操作数据库android…

VC 6.0 面向对象的俄罗斯方块尝试(部分注释)

前阵子发过一个帖子,上传了自己写的俄罗斯方块。但是由于工作比较忙没时间写说明,现在补上。 俄罗斯方块写过好几次了,每次的感觉都不一样,都有新的收获。就像达芬奇画鸡蛋一样,虽然都是画同样的鸡蛋,但是每次都有不同的收获。 先来看看我们…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。