串行通信API函数及参数说明
——以下多数内容摘自《Visual C++/Turbo C 串口通信编程实践(第2版)》
补充关于流控制概念
流控制解决的问题:当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。PC机中常用的两种流控制是软件流控制XON/XOFF(继续/停止)和硬件流控制(包括RTS/CTS、DTR/CTS等)。
在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,就向数据发送端发出XOFF字符(十进制的19或Control-S,设备编程说明书应该有详细阐述),发送端收到XOFF字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符(十进制的17或Control-Q),发送端收到XON字符后就立即开始发送数据。应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。
硬件流控制可以使用RTS(请求发送)/CTS(清除发送), 分别对应软件流控制的XON和XOFF。另一对是DTR(数据终端就绪)/DSR(数据就绪)。单从名称来看,DTR/DSR不能反应出相应的状态。
API串口编程中用到的结构体参数说明(原书P109~117)
CreateFile:打开串口
- 当端口号<=9时,端口名称格式为"COM9";当端口号>9时,端口名称格式为"\\.\COM10"。
- GENERIC_READ | GENERIC_WRITE表示可同时读写。
- 必须设置为0
- 设置为NULL
- 必须设置为OPEN_EXISTING
- 设置为FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,其中FILE_FLAG_OVERLAPPED表示异步读取串口。
- 设置为0
HANDLE hCom = Create(…);
if(INVALID_HANDLE_VALUE == hCom)
{
DWORD err = GetLastError();
…处理错误
}
SetupComm:设置输入输出缓冲区大小
- 串口句柄
- 输入缓冲区大小
GetCommState/SetCommState:配置串口
- 串口句柄
- 指向DCB结构体的指针
如果设置时出现DCB成员变量XonChar与XoffChar相同,则SetCommState设置失败。在设置8250时,数据位只能是5~8位。
GetCommProperties:获取串口属性函数。由该函数得到的串口(或其他通信设备,如并口等)信息可用于SetCommState、SetCommTimeouts、SetupComm函数去配置串口信息。
- 串