串口通讯编程一日通4(串口基本操作)

前几篇大概介绍了串口的相关几个结构,了解后开始进入Windows API的基本操作

 

1.CreateFile创建打开串口

用指定的方式打开指定的串口,注意文件在Windows的概念很广泛,包括:文件、通讯设备、命名管道、邮件、磁盘和控制台。

我们前面声明了句柄

 /*串口句柄*/
 HANDLE    m_hComm;

那么接下来可以这样创建:

m_hCom = CreateFile( "COM1",  //串口1

                                GENERIC_READ | GENERIC_WRITE, //指定可以对串口进行读写操作

                                0, //表示串口为独占打开

                               NULL,

                              OPEN_EXISTING, //表示当指定串口不存在时,程序将返回失败

                              FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, //表示文件属性

/*当打开串口时,必须指定 FILE_FLAG_OVERLAPPED(重叠方式),它表示文件或设备不会维护访问指针,则在读写时,必须使用OVERLAPPED 结构指定访问的文件偏移量。
*/

                               NULL );

 


2.ReadFile:读取串口数据

声明如下:

WINBASEAPI
BOOL
WINAPI
ReadFile(
    HANDLE hFile,  //文件句柄
    LPVOID lpBuffer,//读写数据缓冲区
    DWORD nNumberOfBytesToRead,//多少数据要读取
    LPDWORD lpNumberOfBytesRead,//已经读取多少数据
    LPOVERLAPPED lpOverlapped//异步读写的结构
    );

3.WriteFile:向串口写数据

WINBASEAPI
BOOL
WINAPI
WriteFile(
    HANDLE hFile,//文件句柄
    LPCVOID lpBuffer,//读写数据缓冲区
    DWORD nNumberOfBytesToWrite,//多少数据要写入
    LPDWORD lpNumberOfBytesWritten,//已经写入多少数据
    LPOVERLAPPED lpOverlapped//异步读写的结构
    );

4.CloseHandle:关闭串口

WINBASEAPI
BOOL
WINAPI
CloseHandle(
    HANDLE hObject
    );

 

5.GetCommState获取当前串口配置

WINBASEAPI
BOOL
WINAPI
GetCommState(
    HANDLE hFile,//通讯设备句柄
    LPDCB lpDCB//指向DCB
    );

 

6.SetCommState配置串口

WINBASEAPI
BOOL
WINAPI
SetCommState(
    HANDLE hFile,//通讯设备句柄
    LPDCB lpDCB//指向DCB
    );

 

7.SetCommTimeouts超时设置

WINBASEAPI
BOOL
WINAPI
SetCommTimeouts(
    HANDLE hFile,
    LPCOMMTIMEOUTS lpCommTimeouts//超时结构
    );

 

8.ClearCommError清除错误标志

WINBASEAPI
BOOL
WINAPI
ClearCommError(
    HANDLE hFile,//通讯设备
    LPDWORD lpErrors,//错误掩码类型
    LPCOMSTAT lpStat
    );


9.GetOverlappedResult 异步IO操作

WINBASEAPI
BOOL
WINAPI
GetOverlappedResult(
    HANDLE hFile,
    LPOVERLAPPED lpOverlapped,
    LPDWORD lpNumberOfBytesTransferred,
    BOOL bWait
    );

10.WaitForSingleObject异步IO事件获取

WINBASEAPI
DWORD
WINAPI
WaitForSingleObject(
    HANDLE hHandle,
    DWORD dwMilliseconds
    );

11.WaitForMultipleObjects等待多个事件

WINBASEAPI
DWORD
WINAPI
WaitForMultipleObjects(
    DWORD nCount,  //事件句柄组的事件组
    CONST HANDLE *lpHandles,//事件数组
    BOOL bWaitAll,//TRUE:所有事件发生才返回;FALSE:有一个事件发生就返回
    DWORD dwMilliseconds//等待时间
    );

12.SetCommMask通信事件设置

WINBASEAPI
BOOL
WINAPI
SetCommMask(
    HANDLE hFile,
    DWORD dwEvtMask//事件码
    );

 

13.GetCommMask当前通讯事件获取

WINBASEAPI
BOOL
WINAPI
GetCommMask(
    HANDLE hFile,
    LPDWORD lpEvtMask
    );

 

14.WaitCommEvent通信事件监测

WINBASEAPI
BOOL
WINAPI
WaitCommEvent(
    HANDLE hFile,
    LPDWORD lpEvtMask,
    LPOVERLAPPED lpOverlapped
    );

 

15.CreateEvent事件创建

HANDLE CreateEvent(
    LPSECURITY_ATTRIBUTES lpEventAttributes,
    BOOL bManualReset,
    BOOL bInitialState,
    LPCSTR lpName
    );

 

常用的就这么多了,不熟悉的去MSDN查,看看就知道用法

posted on 2014-04-07 15:28  bitbit  阅读(1200)  评论(0编辑  收藏  举报