用VS2010写了一个串口示例程序(使用API写的)

为了配合GNSS的调式,今天用VS2010写了一个串口示例程序(使用API写的)。
 
  1. #include "MySerial.h"

  2. #include <TCHAR.H>

  3. #include <windows.h>

  4.  
  5.  
  6. HANDLE hCom;

  7.  
  8. /**

  9. open serial

  10. @param COMx: eg:_T("COM1")

  11. @param BaudRate:

  12. return 0 success ,return Negative is haed err

  13. */

  14. int Serial_open(LPCWSTR COMx,int BaudRate)

  15. {

  16. DCB dcb={0};

  17. hCom =CreateFile(COMx,

  18. GENERIC_READ|GENERIC_WRITE,

  19. 0,

  20. 0,

  21. OPEN_EXISTING,

  22. 0,//FILE_FLAG_OVERLAPPED, //同步方式 或 重叠方式

  23. 0

  24. );

  25.  
  26. if(hCom ==INVALID_HANDLE_VALUE)

  27. {

  28. DWORD dwError=GetLastError();

  29. return -1;

  30. }

  31.  
  32. dcb.DCBlength = sizeof(DCB);

  33.  
  34. if(!GetCommState(hCom,&dcb))

  35. {

  36. DWORD dwError=GetLastError();

  37. return -1;

  38. }

  39.  
  40. dcb.BaudRate = BaudRate; //波特率

  41. dcb.ByteSize = 8; //位数

  42. dcb.Parity = NOPARITY; //奇偶检验

  43. dcb.StopBits =ONESTOPBIT; //停止位数

  44.  
  45. if(!SetCommState(hCom,&dcb))

  46. {

  47. DWORD dwError=GetLastError();

  48. return -1;

  49. }

  50. if( !PurgeComm( hCom, PURGE_RXCLEAR ) ) return -1;

  51.  
  52. SetupComm(hCom,1024,1024);

  53. return 0;

  54. }

  55.  
  56. /**

  57. serial read

  58. @param Buf:data buf

  59. @param size:

  60. @return The len of read

  61. */

  62. int Serial_read(void *OutBuf,int size)

  63. {

  64. DWORD cnt=0;

  65. ReadFile(hCom,OutBuf,size,&cnt,0);

  66. return cnt;

  67.  
  68. }

  69.  
  70. /**

  71. serial write

  72. @param Buf:data buf

  73. @param size:bytes of Buf

  74. @return The len of writen

  75. */

  76. int Serial_write(const void *Buf,int size)

  77. {

  78. DWORD dw;

  79. WriteFile(hCom,Buf,size,&dw,NULL);

  80. return dw;

  81. }

  82.  
  83. /**

  84. serial close

  85. */

  86. void Serial_close(void)

  87. {

  88. CloseHandle(hCom);

  89. }

以下是main()

打开串口3,并发送一些字符后等待接收到得数据并打印出来

 
  1. #include "MySerial.h"

  2. #include <TCHAR.H>

  3.  
  4. char temp[1024];

  5. int len;

  6. void main(void)

  7. {

  8. int i;

  9. Serial_open(_T("COM3"),9600);

  10. for (i=0;i<10;i++)

  11. {

  12. Serial_write("asdfghjkl\n",sizeof("asdfghjkl\n")-1);

  13. }

  14. while (1)

  15. {

  16. len=Serial_read(&temp,1);

  17. if(len)

  18. {

  19. printf("len=%d\n",len);

  20. for(i=0;i<len;i++)printf("read %X ",temp[i]);

  21. printf("\n");

  22. }

  23. }

  24.  
  25. Serial_close();

  26. }

  27.  

猜你喜欢

转载自blog.csdn.net/u010312937/article/details/81510358