·设置接收/发送缓冲区大小:
BOOL SetupComm(
HANDLE hFile,
DWORD dwInQueue,
DWORD dwOutQueue
);
hFile指定已打开的串口句柄,dwInQueue指定接收缓冲区的大小,dwOutQueue指定发送缓冲区的大小。
返回值:成功时返回非零值,失败时返回零。
例:
SetupComm(m_hComm,512,512);
如果不使用该函数,系统会推荐一个适合的默认值。
·控制串口:
BOOL SetCommBreak(
HANDLE hFile
);
BOOL ClearCommBreak(
HANDLE hFile
);
SetCommBreak函数用来停止串口传输字符并且设置串口为中断状态,ClearCommBreak函数用于重新传输字符,hFile指定已打开的串口句柄。
·清空串口缓冲区:
BOOL PurgeComm(
HANDLE hFile,
DWORD dwFlags
);
PurgeComm函数用于清空串口的接收缓冲区与发送缓冲区。dwFlags参数用来设置操作类型,设置为PURGE_TXCLEAR,表示清空发送缓冲区,设置为PURGE_RXCLEAR,表示清空接收缓冲区。两者也可以组合使用,表示同时清空接收缓冲区和发送缓冲区。
例:
PurgeComm(ceSeries->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR );
·清除错误并查询状态:
BOOL ClearCommError(
HANDLE hFile,
LPDWORD lpErrors,
LPCOMSTAT lpStat
);
ClearCommError函数用于清除驱动程序产生的任何错误并返回当前串口的状态。lpErrors表示发生的错误码,lpStat指向COMSTAT结构,用于存储当前串口的状态。
错误码表:
CE_BREAK |
硬件检测到了一个中断情况 |
CE_FRAME |
硬件检测到了一个帧错误 |
CE_IOE |
硬件通信时发生一个I/O错误 |
CE_MODE |
请求模式未被支持,或者hFile参数无效。如果指定了这个错误,那么它就是唯一的合法错误。 |
CE_OVERRUN |
字符缓冲区被侵占,下一个字符丢失 |
CE_RXOVER |
输入缓冲区溢出。输入缓冲区没有空间或者收到end-of-file (EOF)字符后又收到字符 |
CE_RXPARITY |
硬件检测到奇偶校验错误 |
CE_TXFULL |
应用程序试图发送一个字符,但输出缓冲区已满 |
COMSTAT结构体:
typedef struct _COMSTAT {
DWORD fCtsHold : 1;
DWORD fDsrHold : 1;
DWORD fRlsdHold : 1;
DWORD fXoffHold : 1;
DWORD fXoffSent : 1;
DWORD fEof : 1;
DWORD fTxim : 1;
DWORD fReserved : 25;
DWORD cbInQue;
DWORD cbOutQue;
} COMSTAT, *LPCOMSTAT;
fCtsHold:表示是否正在等待CTS (Clear to Send)信号。
fDsrHold:表示是否正在等待DSR (Data Set Ready)信号。
fRlsdHold:表示是否正在等待RLSD (Receive Line Signal Detect)(接收线路信号检测,也叫载波检测)信号。
fXoffHold:表示是否因为收到XOFF字符而等待。
fXoffSent:表示是否因为驱动程序发送XOFF字符而等待。
fEof:表示是否收到End of File (EOF)字符。
fTxim:如果是1,表示队列中的字符是由TransmitCommChar函数写入的而不是WriteFile函数。
fReserved:保留,未用。
cbInQue:表示接收缓冲区中存储的待ReadFile读取的字节数。
cbOutQue:表示发送缓冲区中存储的待发送的字节数。
例:
DWORD dwReadErrors;
COMSTAT cmState;
ClearCommError(m_hComm,&dwReadErrors,&cmState);