凯恩帝串口通信怎么设置_串口通讯编程一日通4(串口基本操作)

本文详细介绍了Windows API中串口通信的基本操作,包括CreateFile用于创建打开串口,ReadFile和WriteFile进行读写操作,以及CloseHandle关闭串口等。此外,还涵盖了设置串口配置、超时、错误处理和事件监测的相关函数。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值