Windows串口编程
+ -

IOCTL_SERIAL_SET_LINE_CONTROL、IOCTL_SERIAL_GET_LINE_CONTROL和GetCommState、SetCommState

2023-06-19 13 0

IOCTL_SERIAL_SET_LINE_CONTROL是Windows系统中用于设置串行端口通信行控制信息的一个设备I/O控制码。该控制码需要通过DeviceIoControl函数发送给串行端口驱动程序,以设置当前串行端口的数据传输率、数据位、停止位、奇偶校验等通信参数信息。在应用程序开发中,可以使用该控制码设置串行端口的通信参数并进行相应的配置,以满足不同的数据传输要求。

SetCommState是一个Windows系统的API函数,通常用于设置串口的通信参数。该函数需要传入一个DCB(Device Control Block)结构体,用于指定串口的通信参数,包括波特率、数据位、停止位、奇偶校验等信息。

函数原型如下:

BOOL SetCommState(
HANDLE hFile,
LPDCB lpDCB
);
其中,hFile为串口的句柄,lpDCB为DCB结构体指针,表示要设置的串口通信参数。调用该函数后,系统会根据传入的参数对串口进行相应的配置。如果函数调用成功,则返回值为非零值(TRUE);否则返回值为零(FALSE)。

需要注意的是,该函数只能用于设置波特率小于等于115200的串口通信参数。对于高速串口通信(如USB串口、PCI串口卡等),应该使用其他的API函数进行设置。

DCB是Windows系统中的一个结构体类型,用于描述串口设备的控制信息。它包含了串口通信的各种参数,如波特率、数据位、停止位、奇偶校验等等。DCB的全称为Device Control Block,通常直接用它的缩写表示。

DCB结构体定义了如下成员:

typedef struct _DCB {
  DWORD DCBlength;      // 此DCB结构体的长度,不需要手动赋值,由系统自动填充。

  DWORD BaudRate;       // 波特率
  DWORD fBinary;        // 是否使用二进制模式通信
  DWORD fParity;        // 是否开启奇偶校验
  DWORD fOutxCtsFlow;   // 是否开启CTS流量控制
  DWORD fOutxDsrFlow;   // 是否开启DSR流量控制
  DWORD fDtrControl;    // DTR的发送和使用
  DWORD fDsrSensitivity;// 是否开启DSR敏感性
  DWORD fTXContinueOnXoff; // 发送字符时是否使用XOFF/XON控制
  DWORD fOutX;          // 是否开启XON/XOFF输出控制
  DWORD fInX;           // 是否开启XON/XOFF输入控制
  DWORD fErrorChar;     // 使用错误字符替换不可接受字符
  DWORD fNull;          // 通信时是否将空字符屏蔽
  DWORD fRtsControl;    // RTS的发送和使用
  DWORD fAbortOnError;  // 发送或接收时发生错误时是否立即中止

  WORD  wReserved;      // 保留字段

  WORD  XonLim;         // XOFF字符发送之前,缓冲区中允许的剩余字节数
  WORD  XoffLim;        // XOFF字符发送之后,缓冲区中最少留下的字节数

  BYTE  ByteSize;       // 数据位数
  BYTE  Parity;         // 校验类型
  BYTE  StopBits;       // 停止位数

  char  XonChar;        // XON字符
  char  XoffChar;       // XOFF字符
  char  ErrorChar;      // 发生错误时替换的字符
  char  EofChar;        // 数据流中的输入结束字符
  char  EvtChar;        // 和输入事件一起使用的事件字符
  WORD  wReserved1;     // 保留字段
} DCB;

DCB结构体中的每个成员都代表着具体的串口通信参数或控制信息。应用程序可以通过修改这些成员的值来设置串口的通信参数,在调用SetCommState函数时将DCB结构体传递给函数即可。

0 篇笔记 写笔记

IOCTL_SERIAL_SET_LINE_CONTROL、IOCTL_SERIAL_GET_LINE_CONTROL和GetCommStateSetCommState
IOCTL_SERIAL_SET_LINE_CONTROL是Windows系统中用于设置串行端口通信行控制信息的一个设备I/O控制码。该控制码需要通过DeviceIoControl函数发送给串行端口驱动程序,以设置当前串行端口的数据传输率、数据位、停止位、奇偶校验等通信参数信息。在应用程序开发中,可......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!