目录
1.CreateFileA
通过该函数打开串口。
函数原型:
HANDLE CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
参数说明:
- lpFileName:要打开的文件或设备的路径。对于串口,通常是"COMx",其中x是串口号(如"COM1")。
- dwDesiredAccess:请求的访问权限,例如GENERIC_READ(读取)、GENERIC_WRITE(写入)、GENERIC_EXECUTE(执行)、GENERIC_ALL(所有权限)等。
- dwShareMode:共享模式,指定如何共享该串口。共享模式决定了其他进程是否可以访问该串口,以及它们可以以何种方式访问。例如FILE_SHARE_READ(读取)、FILE_SHARE_WRITE(写入)、FILE_SHARE_DELETE(删除)、0(不启用共享模式)等。
- lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于设置安全属性。通常将参数设置为NULL,系统将为文件或设备分配默认的安全属性。
- dwCreationDisposition:指定如何创建或打开文件。例如CREATE_NEW(创建新文件)、OPEN_EXISTING(打开现有文件)等。
- dwFlagsAndAttributes:文件或设备的属性,例如FILE_ATTRIBUTE_NORMAL(普通文件)、FILE_FLAG_OVERLAPPED(异步属性)等。
- hTemplateFile:一个可选的模板文件句柄,用于创建新文件。如果不需要使用模板文件,可以设置为NULL。
返回值 :
- 如果函数成功,返回一个非零的句柄(HANDLE)。
- 如果函数失败,返回INVALID_HANDLE_VALUE。可以调用GetLastError函数。获取错误信息。
2.SetupComm
该函数用于初始化指定通讯设备的通讯参数,可用于设置串口通讯的输入和输出缓冲区。
函数原型:
BOOL SetupComm(
HANDLE hFile,
DWORD dwInQueue,
DWORD dwOutQueue
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- dwInQueue:输入缓冲区的大小,单位是字节。
- dwOutQueue:输出缓冲区的大小,单位是字节。
返回值:
- 成功返回true,失败返回false。
- 如果函数返回失败,可以调用GetLastError函数获取错误信息。
3.COMMTIMEOUTS
结构体原型:
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout; //两个字符之间的最大时间间隔,单位毫秒。
DWORD ReadTotalTimeoutMultiplier; //指定一个读操作的完成时间的乘数部分,基于字节数的计算方式。
DWORD ReadTotalTimeoutConstant; //指定一个读操作的完成时间的常数部分,单位毫秒。
DWORD WriteTotalTimeoutMultiplier; //指定一个写操作的完成时间的乘数部分,基于字节数的计算方式。
DWORD WriteTotalTimeoutConstant; //指定一个写操作的完成时间的常数部分,单位毫秒。
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;
4.SetCommTimeouts
该函数用于设置串口超时时间。
函数原型:
BOOL SetCommTimeouts(
HANDLE hFile,
LPCOMMTIMEOUTS lpCommTimeouts
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- lpCommTimeouts:是一个指向包含超时数据的COMMTIMEOUTS结构体的指针。
返回值:
- 函数成功返回true,失败返回false。
- 如果函数返回失败,可以调用GetLastError函数获取错误信息。
5.DCB
结构体原型:
typedef struct _DCB {
DWORD DCBlength; // 结构体大小
DWORD BaudRate; // 当前波特率
DWORD fBinary:1; // 是否允许二进制模式,WIN95中必须为TRUE
DWORD fParity:1; // 是否允许奇偶校验
DWORD fOutxCtsFlow:1; // CTS流程控制
DWORD fOutxDsrFlow:1; // DSR流程控制
DWORD fDtrControl:2; // DTR信号控制
DWORD fDsrSensitivity:1; // DSR信号敏感度
DWORD fTXContinueOnXoff:1; // 在XOFF字符时是否继续发送
DWORD fOutX:1; // 是否启用软件流控XON/XOFF
DWORD wReserved; // 保留,必须为0
DWORD XonLim; // XON缓冲区限制
DWORD XoffLim; // XOFF缓冲区限制
BYTE ByteSize; //每个字节的位数,取值范围4-8
BYTE Parity; //奇偶检验方式,取值范围0-4
BYTE StopBits; //停止位数量,取值0、1、2
DWORD XonChar; // XON字符值
DWORD XoffChar; // XOFF字符值
DWORD fErrorChar:1; // 是否启用错误字符检测
DWORD fNull:1; // 是否忽略NULL字符
DWORD fAbortOnError:1; // 发生错误时是否终止操作
DWORD fRtsControl:2; // RTS信号控制
DWORD fInX:1; // 是否启用软件流控XON/XOFF(输入)
} DCB, *LPDCB;
6.SetCommState
该函数用于设置串口通讯的参数,包括波特率、数据位、停止位和奇偶校验等。
函数原型:
BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- lpDCB:是一个指向包含串口参数的DCB结构体的指针。
返回值:
- 函数成功返回true,失败返回false。
- 如果函数返回失败,可以调用GetLastError函数获取错误信息。
7.GetCommState
该函数用于获取指定串口通讯设备的当前设置。
函数原型:
BOOL GetCommState(
HANDLE hFile,
LPDCB lpDCB
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- lpDCB:指向一个DCB结构,该结构接收串口设备的当前设置。
8.SetCommMask
该函数用于设置串口通讯的事件掩码,以便应用程序能够监视特定的串口事件。
函数原型:
BOOL SetCommMask(
HANDLE hFile,
DWORD dwEvtMask
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- dwEvtMask:事件掩码,指定了要监视的串口事件。例如EV_RXCHAR(缓冲区有可读数据)、EV_BGREAK(检测到BREAK信号)等。
9.ClearCommError
该函数用于清除串行端口的错误并获取当前状态。
函数原型:
BOOL ClearCommError(
HANDLE hFile,
LPDWORD lpErrors,
LPCOMMSTAT lpStat
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- lpErrors:这是指向DWORD变量的指针,用于返回错误数值。
- lpStat:这是指向COMMSTAT结构的指针,用于接收通讯设备的状态信息。
10.ReadFile
该函数用于从文件或输入/输出设备读取数据。
函数原型:
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
参数说明:
- hFile:这是一个句柄,代表要配置的通讯设备。该句柄为CreateFileA函数的返回值。
- lpBuffer:指向接收数据的缓冲区的指针。
- nNumberOfBytesToRead:要读取的字节数。
- lpNumberOfBytesRead:指向一个变量的指针,该变量接收实际读取的字节数。
- lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠曹做的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。
11.WaitForSingleObject
该函数用于等待一个对象变为有信号状态。
函数原型:
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
参数说明:
- hHandle:要等待对象的句柄。
- dwMilliseconds:等待时间,单位为毫秒。如果此参数为INFINITE,则一直等待知道对象标为有信号状态。
返回值:
- 函数成功返回值为WAIT_OBJECT_0。
- 函数失败返回值为WAIT_FAILED。
12.GetOverlappedResult
该函数用于获取异步I/O操作的结果。
函数原型:
BOOL GetOverlappedResult(
HANDLE hFile,
LPOVERLAPPED lpOverlapped,
LPDWORD lpNumberOfBytesTransferred,
BOOL bWait
);
参数说明:
- hFile:要查询的文件或设备的句柄。
- lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包括有关重叠操作的信息。
- lpNumberOfBytesTransferred:指向一个变量的指针,该变量接收实际传输的字节数。
- bWait:指定是否等待操作完成。
13.PurgeComm
该函数用于清除串口缓冲区中的数据。
函数原型:
BOOL PurgeComm(
HANDLE hFile,
DWORD dwFlags
);
参数说明:
- hFile:要清除的串口句柄。
- dwFlags:指定要清除的数据类型。PURGE_RXCLEAR(清除接收缓冲区中的数据),PURGE_TXCLEAR(清除发送缓冲区中的数据)。
14.WaitCommEvent
该函数用于等待串口事件发生。
函数原型:
BOOL WaitCommEvent(
HANDLE hFile,
LPDWORD lpEvtMask,
LPOVERLAPPED lpOverlapped
);
参数说明:
- hFile:要等待的串口句柄。
- lpEvtMask:指向一个变量的指针,该变量接收发生的事件类型。
EV_BREAK:检测到BREAK信号。
EV_CTS:检测到CTS信号状态变化。
EV_DSR:检测到DSR信号状态变化。
EV_ERR:检测到错误。
EV_RING:检测到RING信号。
EV_RLSD:检测到RLSD信号状态变化。
EV_RXCHAR:接收缓冲区中有数据可读。
EV_RXFLAG:接收缓冲区中的数据已准备好。
EV_TXEMPTY:发送缓冲区为空。
- lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠操作的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。
15.WriteFile
该函数用于将数据写入文件或通讯设备。
函数原型:
int WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
参数说明:
- hFile:要写入的句柄。
- lpBuffer:指向要写入的数据缓冲区的指针。
- nNumberOfBytesToWrite:要写入的字节数。
- lpNumberOfBytesWritten:指向一个变量的指针,该变量接收实际写入的字节数。
- lpOverlapped:指向一个OVERLAPPED结构的指针,该结构包含有关重叠操作的信息。如果不需要使用重叠I/O,则将此参数设置为NULL。
16.CloseHandle
该函数用于关闭一个已打开的对象句柄。
函数原型:
BOOL CloseHandle(
HANDLE hObject
);
参数说明:
- hObject:要关闭的对象句柄。