串口通讯编程一日通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查,看看就知道用法