串行通信API函数及参数说明

本文详细介绍了串行通信API函数,包括CreateFile、SetupComm、GetCommState/SetCommState等,强调了流控制的重要性,如XON/XOFF和RTS/CTS。还讲解了如何配置串口的输入输出缓冲区大小和DCB结构体,以及如何处理通信超时和错误。
摘要由CSDN通过智能技术生成

串行通信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:打开串口

  1. 当端口号<=9时,端口名称格式为"COM9";当端口号>9时,端口名称格式为"\\.\COM10"。
  2. GENERIC_READ | GENERIC_WRITE表示可同时读写。
  3. 必须设置为0
  4. 设置为NULL
  5. 必须设置为OPEN_EXISTING
  6. 设置为FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,其中FILE_FLAG_OVERLAPPED表示异步读取串口。
  7. 设置为0
    HANDLE hCom = Create(…);
    if(INVALID_HANDLE_VALUE == hCom)
    {
    DWORD err = GetLastError();
    …处理错误
    }

SetupComm:设置输入输出缓冲区大小

  1. 串口句柄
  2. 输入缓冲区大小

GetCommState/SetCommState:配置串口

  1. 串口句柄
  2. 指向DCB结构体的指针
    如果设置时出现DCB成员变量XonChar与XoffChar相同,则SetCommState设置失败。在设置8250时,数据位只能是5~8位。

GetCommProperties:获取串口属性函数。由该函数得到的串口(或其他通信设备,如并口等)信息可用于SetCommState、SetCommTimeouts、SetupComm函数去配置串口信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值