2012年4月26日 星期四

WIN32 API 通訊操作 - (1) 開啟串口

1) 開啟串口

Win32系統把檔的概念進行了擴展。無論是檔、通信設備、具名管道、郵件槽、磁片、還是控制台,都是用API函數CreateFile來打開或創建的。
該函數的原型為:
HANDLE CreateFile( LPCTSTR lpFileName,
                   DWORD dwDesiredAccess,
                   DWORD dwShareMode,
                   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                   DWORD dwCreationDistribution,
                   DWORD dwFlagsAndAttributes,
                   HANDLE hTemplateFile);
  • dwDesiredAccess:將要打開的串口邏輯名,如“COM1;
  • dwDesiredAccess:指定串口訪問的類型,可以是讀取、寫入或二者並列;
  • dwShareMode:指定共用屬性,由於串口不能共用,該參數必須置為0
  • lpSecurityAttributes:引用安全性屬性結構,缺省值為NULL
  • dwCreationDistribution:創建標誌,對串口操作該參數必須置為OPEN_EXISTING
  • dwFlagsAndAttributes:屬性描述,用於指定該串口是否進行非同步作業,該值為FILE_FLAG_OVERLAPPED,表示使用非同步的I/O;該值為0,表示同步I/O操作;
  • hTemplateFile:對串口而言該參數必須置為NULL
同步I/O方式打開串口的示例代碼: 
HANDLE hCom;  //全域變數,串口控制碼
hCom = CreateFile("COM1",//COM1口
                   GENERIC_READ|GENERIC_WRITE, //允許讀和寫
                   0, //獨佔方式
                   NULL,
                   OPEN_EXISTING, //打開而不是創建
                   0, //同步方式
                   NULL);
if(hCom==(HANDLE)-1)
{
    AfxMessageBox("打開COM失敗!");
    return FALSE;
}
return TRUE;
重疊I/O打開串口的示例代碼:
HANDLE hCom;  //全域變數,串口控制碼
hCom = CreateFile("COM1",  //COM1口
                   GENERIC_READ|GENERIC_WRITE, //允許讀和寫
                   0,  //獨佔方式
                   NULL,
                   OPEN_EXISTING,  //打開而不是創建
                   FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重疊方式
                   NULL);
if(hCom ==INVALID_HANDLE_VALUE)
{
    AfxMessageBox("打開COM失敗!");
    return FALSE;
}
return TRUE;

沒有留言:

張貼留言