Comm.cpp
上传用户:ynthgy
上传日期:2022-06-13
资源大小:1580k
文件大小:2k
源码类别:

手机短信编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "Comm.h"
  3. // 串口设备句柄
  4. HANDLE hComm;
  5. // 打开串口
  6. // pPort: 串口名称或设备路径,可用"COM1"或"\.COM1"两种方式,建议用后者
  7. // nBaudRate: 波特率
  8. // nParity: 奇偶校验
  9. // nByteSize: 数据字节宽度
  10. // nStopBits: 停止位
  11. BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
  12. {
  13. DCB dcb; // 串口控制块
  14. COMMTIMEOUTS timeouts = { // 串口超时控制参数
  15. 100, // 读字符间隔超时时间: 100 ms
  16. 1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
  17. 500, // 基本的(额外的)读超时时间: 500 ms
  18. 1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
  19. 100}; // 基本的(额外的)写超时时间: 100 ms
  20. hComm = CreateFile(pPort, // 串口名称或设备路径
  21. GENERIC_READ | GENERIC_WRITE, // 读写方式
  22. 0, // 共享方式:独占
  23. NULL, // 默认的安全描述符
  24. OPEN_EXISTING, // 创建方式
  25. 0, // 不需设置文件属性
  26. NULL); // 不需参照模板文件
  27. if(hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败
  28. GetCommState(hComm, &dcb); // 取DCB
  29. dcb.BaudRate = nBaudRate;
  30. dcb.ByteSize = nByteSize;
  31. dcb.Parity = nParity;
  32. dcb.StopBits = nStopBits;
  33. SetCommState(hComm, &dcb); // 设置DCB
  34. SetupComm(hComm, 4096, 4096); // 设置输入输出缓冲区大小
  35. ::SetCommTimeouts(hComm, &timeouts); // 设置超时
  36. return TRUE;
  37. }
  38. // 关闭串口
  39. BOOL CloseComm()
  40. {
  41. return CloseHandle(hComm);
  42. }
  43. // 写串口
  44. // pData: 待写的数据缓冲区指针
  45. // nLength: 待写的数据长度
  46. void WriteComm(void* pData, int nLength)
  47. {
  48. DWORD dwNumWrite; // 串口发出的数据长度
  49. WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
  50. }
  51. // 读串口
  52. // pData: 待读的数据缓冲区指针
  53. // nLength: 待读的最大数据长度
  54. // 返回: 实际读入的数据长度
  55. int ReadComm(void* pData, int nLength)
  56. {
  57. DWORD dwNumRead; // 串口收到的数据长度
  58. ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
  59. return (int)dwNumRead;
  60. }