扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:陆尔东 邓利平 来源:yesky 2007年11月16日
关键字:
BOOL InitComm file://串口初始化,这里只给出关键步骤的代码,下同 { HANDLE m_hComm; COMMTIMEOUTS m_CommTimeouts; m_hComm = CreateFile("COM1", file://在这里只使用串口1 GENERIC_READ | GENERIC_WRITE, file://打开类型为可读写 0, file://以独占模式打开串口 NULL, file://不设置安全属性 OPEN_EXISTING, FILE_FLAG_OVERLAPPED, file://重叠I/O方式 0); if (m_hComm == INVALID_HANDLE_VALUE) file://打开不成功 {return FALSE;} m_CommTimeouts.ReadIntervalTimeout = 1000; file://进行超时设置,读者应根据自己的实际需要设置 m_CommTimeouts.ReadTotalTimeoutMultiplier = 500; m_CommTimeouts.ReadTotalTimeoutConstant = 5000; m_CommTimeouts.WriteTotalTimeoutMultiplier = 500; m_CommTimeouts.WriteTotalTimeoutConstant = 5000; if (!SetCommTimeouts(m_hComm, &m_CommTimeouts)) {CloseHandle(m_hComm); return FALSE;} PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT); file://清缓冲 return TRUE; } |
UINT CommThread(LPVOID pParam) file://用于监控串口的工作者线程 { BOOL bResult = FALSE; if (m_hComm) file://查看端口是否打开,这里m_hComm同上,作者在这里做了简化 PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT); for (;;) file://只要线程运行,就处于监视端口行为的无限循环 { bResult = WaitCommEvent(m_hComm, &Event, &m_ov); file://m_ov是OVERLAPPED类型的成员变量 if (!bResult) { file://进行出错处理} else { Event = WaitForMultipleObjects(4, m_hEvent, FALSE, INFINITE); file://无限等待设定的事件发生,数组m_hEvent根据需要定义了须响应的接收,发送,关闭端口事件和OVERLAPPED类型的hEvent事件 switch (Event) { file://读写事件的响应处理过程,在此略} } return 0; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者