分享

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

 江南兰亭馆 2012-03-11
CSDN 2011年度十大风云博客专栏评选上线! 【免费申请】中国软件全球营销论坛门票——上海2012

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

分类: Visual C++1165人阅读评论(0)收藏举报

前几篇大概介绍了串口的相关几个结构,了解后开始进入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查,看看就知道用法

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多