Windows串口函数介绍
在 Win32 API 中,用于操作串口通讯的函数主要包括:
CreateFile
该函数用于打开一个串口通讯接口,返回的句柄可以用于读写串口。在调用 CreateFile 函数时需要指定串口通讯接口的名称和一些访问权限等参数,详见 MSDN 文档:
HANDLE CreateFile(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
SetCommState
该函数用于设置串口通讯接口的数据位、校验位、停止位、波特率等参数,必须在打开串口之后调用该函数才能生效。该函数需要传入一个 DCB(数据控制块)结构体指针作为参数。在设置参数之前应当首先调用 GetCommState 函数获取当前串口参数,并将获取到的参数赋值给 DCB 结构体,不然其他参数由Windows使用默认值。
BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
GetCommState
该函数用于获取串口通讯接口的DCB结构体,该结构体中包含了串口通讯接口的所有控制参数,例如波特率、数据位、停止位、奇偶校验等参数,以及流控参数等。
BOOL GetCommState(
HANDLE hFile,
LPDCB lpDCB
);
SetCommTimeouts
该函数用于设置串口通讯接口的读取和写入超时时间。在设置超时时间之前,必须使用 GetCommTimeouts 函数获取当前串口通讯接口的超时参数,并将获取到的参数赋值给 COMMTIMEOUTS 结构体。
BOOL SetCommTimeouts(
HANDLE hFile,
LPCOMMTIMEOUTS lpCommTimeouts
);
GetCommTimeouts
该函数用于获取串口通讯接口的超时参数,包括读取超时、写入超时等参数。
BOOL GetCommTimeouts(
HANDLE hFile,
LPCOMMTIMEOUTS lpCommTimeouts
);
SetCommMask
该函数用于设置串口通讯接口的事件掩码。通过设置不同的事件掩码值,可以控制是否有读数据可用、是否发生了数据错误、是否发生断开等事件。
BOOL SetCommMask(
HANDLE hFile,
DWORD dwEvtMask
);
GetCommMask
该函数用于获取串口通讯接口的事件掩码。
BOOL GetCommMask(
HANDLE hFile,
LPDWORD lpEvtMask
);
ReadFile
该函数用于从串口通讯接口中读取数据。
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
WriteFile
该函数用于向串口通讯接口中写入数据。
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
SetupComm
该函数用于设置串口通讯接口的缓冲区大小。
BOOL SetupComm(
HANDLE hFile,
DWORD dwInQueue,
DWORD dwOutQueue
);
除了以上这些函数,还有很多专门用于串口通讯的函数,例如 PurgeComm、EscapeCommFunction、GetCommModemStatus、WaitCommEvent 等等。但这些函数的用法、参数等细节就较为复杂了,实践中可以根据具体使用场景选择使用哪些函数。