242010
 

最近做了一个串口通信的程序,PC到PC的通信,为之后的单片机和PC通信做点准备。很简单的小东西,就是实现了一下串口的通信连接、异步收发数据。虽然简单,还是遇到了些小问题,总结一下,供以后借鉴吧。

一、整体架构:

a) 全局变量

  1. 使用HANDLE m_hComm保存打开的端口句柄;
  2. BOOL m_bConnected来标示当前端口的状态,即是否已经连接成功;
  3. CWinThread* m_pThread来保存之后要开启的异步读取辅助线程;
  4. int nPort保存连接的端口号;
  5. 为了进行异步操作,还要给读取和写入分别定义一个OVERLAPPED结构变量,OVERLAPPED m_ovRead, m_ovWrite;
  6. 最后还要定义一个消息事件HANDLE m_hPostEvent,用于线程向窗体通知数据的到达;

b)函数概述:

  • BOOL ConfigPort();     //配置端口
  • BOOL ConnectToPort(int nPort);     //连接到端口
  • BOOL DisconnectToPort();     //从端口断开
  • DWORD WriteComm(char *buff, DWORD dwCount);     //向端口写入
  • DWORD ReadComm(char *buff, DWORD dwCount);     //从端口读出
  • UINT thCommProc(LPVOID pParam);      //全局函数,是一个线程的执行体

Continue reading »