WEB开发网
开发学院软件开发VC 通过串口收发短消息(下) 阅读

通过串口收发短消息(下)

 2010-06-29 20:42:33 来源:WEB开发网   
核心提示:以上发送AT命令过程中用到了WriteComm和ReadComm函数,它们是用来读写串口的,通过串口收发短消息(下)(4),依赖于具体的操作系统,在Windows环境下,注意我们用的是超时控制的同步(阻塞)模式,// 串口设备句柄HANDLE hComm;// 打开串口// pPort: 串口名称或设备路径,除了用MS

以上发送AT命令过程中用到了WriteComm和ReadComm函数,它们是用来读写串口的,依赖于具体的操作系统。在Windows环境下,除了用MSComm控件,以及某些现成的串口通信类之外,也可以简单地调用一些Windows API用实现。以下是利用API实现的主要代码,注意我们用的是超时控制的同步(阻塞)模式。

// 串口设备句柄
HANDLE hComm;

// 打开串口
// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
// nBaudRate: 波特率
// nParity: 奇偶校验
// nByteSize: 数据字节宽度
// nStopBits: 停止位
BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
  DCB dcb; // 串口控制块
  COMMTIMEOUTS timeouts = {  // 串口超时控制参数
    100,    // 读字符间隔超时时间: 100 ms
    1,     // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
    500,    // 基本的(额外的)读超时时间: 500 ms
    1,     // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
    100}; // 基本的(额外的)写超时时间: 100 ms

  hComm = CreateFile(pPort,  // 串口名称或设备路径
      GENERIC_READ | GENERIC_WRITE,  // 读写方式
      0,        // 共享方式:独占
      NULL,      // 默认的安全描述符
      OPEN_EXISTING,  // 创建方式
      0,        // 不需设置文件属性
      NULL); // 不需参照模板文件

  if (hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败

  GetCommState(hComm, &dcb); // 取DCB

  dcb.BaudRate = nBaudRate;
  dcb.ByteSize = nByteSize;
  dcb.Parity = nParity;
  dcb.StopBits = nStopBits;

  SetCommState(hComm, &dcb); // 设置DCB

  SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小

  SetCommTimeouts(hComm, &timeouts); // 设置超时

  return TRUE;
}

// 关闭串口
BOOL CloseComm()
{
  return CloseHandle(hComm);
}

// 写串口
// pData: 待写的数据缓冲区指针
// nLength: 待写的数据长度
void WriteComm(void* pData, int nLength)
{
  DWORD dwNumWrite; // 串口发出的数据长度

  WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}

// 读串口
// pData: 待读的数据缓冲区指针
// nLength: 待读的最大数据长度
// 返回: 实际读入的数据长度
int ReadComm(void* pData, int nLength)
{
  DWORD dwNumRead; // 串口收到的数据长度

  ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);

  return (int)dwNumRead;
}

上一页  1 2 3 4 5  下一页

Tags:通过 串口 收发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接