顯示具有 API 標籤的文章。 顯示所有文章
顯示具有 API 標籤的文章。 顯示所有文章

2012年4月26日 星期四

WIN32 API 通訊操作 - (5) 關閉串口

(5) 關閉串口

利用API函數關閉串口非常簡單,只需使用CreateFile函數返回的控制碼作為參數調用CloseHandle即可:
BOOL CloseHandle( HANDLE hObject );   //關閉handle 

WIN32 API 通訊操作 - (3) 同步讀寫串口

(3) 同步讀寫串口

我們使用ReadFile和WriteFile讀寫串口,下面是兩個函數的聲明:
BOOL ReadFile(
    HANDLE hFile,               //串口的控制碼
    LPVOID lpBuffer,            //讀入的資料存儲的位址
    DWORD nNumberOfBytesToRead, // 要讀入的資料的位元組數
    
    // 指向一個DWORD數值,該數值返回讀操作實際讀入的位元組數
    LPDWORD lpNumberOfBytesRead, 
    
    // 重疊操作時,該參數指向一個OVERLAPPED結構,同步操作時,該參數為NULL
    LPOVERLAPPED lpOverlapped
    );
 
BOOL WriteFile(
    HANDLE hFile,                //串口的控制碼
    LPCVOID lpBuffer,            // 寫入的資料存儲的位址
    DWORD nNumberOfBytesToWrite, //要寫入的資料的位元組數
    
    // 指向指向一個DWORD數值,該數值返回實際寫入的位元組數
    LPDWORD lpNumberOfBytesWritten, 
    
    // 重疊操作時,該參數指向一個OVERLAPPED結構,
    // 同步操作時,該參數為NULL。
    LPOVERLAPPED lpOverlapped
    );

WIN32 API 通訊操作 - (2) 設定串口

(2)設定串口

在打開通訊設備控制碼後,常常需要對串口進行一些初始化配置工作。這需要通過一個DCB結構來進行。DCB結構包含了諸如串列傳輸速率、資料位元數、同位和停止位元數等資訊。在查詢或配置串口的屬性時,都要用DCB結構來作為緩衝區。
  一般用CreateFile打開串口後,可以調用GetCommState函數來獲取串口的初始配置。要修改串口的配置,應該先修改DCB結構,然後再調用SetCommState函數設置串口。
  

DCB結構包含了串口的各項參數設置,下面僅介紹幾個該結構常用的變數:
typedef struct _DCB {
………
//串列傳輸速率,指定通信設備的傳輸速率。
//這個成員可以是實際串列傳輸速率值或者下面的常量值之一:
DWORD BaudRate; 
//CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,
//CBR_19200,CBR_38400,CBR_56000, CBR_57600,CBR_115200, 
//CBR_128000,CBR_256000,CBR_14400

DWORD fParity;      // 指定同位使能。若此成員為1,允許同位檢查 
…
BYTE ByteSize;      // 通信位元組位元數,4—8
BYTE Parity;        //指定同位方法。此成員可以有下列值:
                    //EVENPARITY 偶校驗     NOPARITY 無校驗
                    //MARKPARITY 標記校驗   ODDPARITY 奇數同位檢查
BYTE StopBits;      //指定停止位的位數。此成員可以有下列值:
                    //ONESTOPBIT 1位停止位   TWOSTOPBITS 2位停止位
                    //ONE5STOPBITS   1.5位停止位
………
} DCB;

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

1) 開啟串口

Win32系統把檔的概念進行了擴展。無論是檔、通信設備、具名管道、郵件槽、磁片、還是控制台,都是用API函數CreateFile來打開或創建的。
該函數的原型為:
HANDLE CreateFile( LPCTSTR lpFileName,
                   DWORD dwDesiredAccess,
                   DWORD dwShareMode,
                   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
                   DWORD dwCreationDistribution,
                   DWORD dwFlagsAndAttributes,
                   HANDLE hTemplateFile);