13.5.1 打开串口

2013-10-07 14:36:21 · 作者: · 浏览: 60

13.5.1  打开串口

在很多系统中(包括Windows系统)把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile()来打开或创建的。该函数的原型为:

  1. HANDLE CreateFile(   
  2.     LPCTSTR                 lpFileName,             //将要打开的串口逻辑名  
  3.     DWORD                   dwDesiredAccess,        //指定串口访问的类型  
  4.     DWORD                   dwShareMode,            //指定共享属性  
  5.     LPSECURITY_ATTRIBUTES   lpSecurityAttributes,   //引用安全型属性结构  
  6.     DWORD                   dwCreationDistribution, //创建标志  
  7.     DWORD                   dwFlagsAndAttributes,   //属性描述  
  8.     HANDLE                  hTemplateFile   //对串口而言该参数必须置为NULL  
  9. ); 

同步I/O方式打开串口的示例代码如下:
  1. 01  HANDLE OpenCom()  
  2. 02  {  
  3. 03      HANDLE hCom;                                //串口句柄  
  4. 04      hCom=CreateFile( "COM1 ",                   //打开COM1口  
  5. 05                      GENERIC_READ|GENERIC_WRITE, //允许读和写  
  6. 06                      0,                          //独占方式   
  7. 07                      NULL,  
  8. 08                      OPEN_EXISTING,              //打开已存在的文件  
  9. 09                      0,                          //同步方式打开  
  10. 10                      NULL);  
  11. 11      if(hCom==(HANDLE)-1)                        //打开失败  
  12. 12      {  
  13. 13          AfxMessageBox( "打开串口失败! ");  
  14. 14          Return NULL;  
  15. 15      }  
  16. 16      return hCom;  
  17. 17  } 

与同步I/O方式打开的过程与步骤相同,只是参数有点变化,异步I/O打开串口的示例代码如下:
  1. 01  HANDLE OpenCom()  
  2. 02  {  
  3. 03      HANDLE hCom;                                //串口句柄  
  4. 04      hCom=CreateFile( "COM1 ",                   //打开COM1口  
  5. 05                      GENERIC_READ|GENERIC_WRITE, //允许读和写  
  6. 06                      0,                          //独占方式   
  7. 07                      NULL,  
  8. 08                      OPEN_EXISTING,              //打开已存在的文件  
  9. 09                      FILE_ATTRIBUTE_NORMAL|  
  10. 10                      FILE_FLAG_OVERLAPPED,       //重叠方式  
  11. 11                      NULL);  
  12. 12      if(hCom==(HANDLE)-1)                        //打开失败  
  13. 13      {  
  14. 14          AfxMessageBox( "打开串口失败! ");  
  15. 15          Return NULL;  
  16. 16      }  
  17. 17      return hCom;  
  18. 18  }