修改通信资源设置

CreateFile 函数打开串行通信资源的句柄时,系统会根据上次打开资源时设置的值初始化和配置资源。 保留以前的设置时,用户能够在重新打开设备时保留通过 mode 命令指定的设置。 从上一个打开操作继承的值包括设备控制块(DCB 结构)的配置设置和 I/O 操作中使用的超时值。 如果从未打开设备,则会使用系统默认值对其进行配置。

为了确定串行通信资源的初始配置,进程会调用 GetCommState 函数,该函数使用当前配置设置填充串行端口 DCB 结构。 若要修改此配置,进程会在对 SetCommState 函数的调用中指定 DCB 结构。

DCB 结构的成员指定配置设置,例如波特率、每个字节的数据位数和每个字节的停止位数。 其他 DCB 成员指定特殊字符,并启用奇偶校验检查和流控制。 当一个进程只需要修改其中的几个配置设置时,它应首先调用 GetCommState,以使用当前配置填充 DCB 结构。 然后,该进程可以调整 DCB 结构中的重要值,并通过调用 SetCommState 并指定修改后的 DCB 结构来重新配置设备。 此过程可确保 DCB 结构的未修改成员包含适当的值。 例如,常见的错误是使用 DCB 结构配置设备,其中该结构的 XonChar 成员等于 XoffChar 成员。

BuildCommDCB 函数提供了另一种修改 DCB 结构的方法。 BuildCommDCB 使用与 mode 命令的命令行参数相同的格式的字符串来指定波特率、奇偶校验方案、停止位数和数据位数。 此函数不会更改DCB 的其余成员,只是将相应的成员设置为禁用 XON/XOFF 和硬件流控制。 BuildCommDCB 仅修改 DCB 结构;它不会重新配置设备。

进程可以使用 GetCommProperties 函数重新配置通信资源,以便从设备驱动程序获取有关其支持的配置设置的信息。 此进程可以使用此信息来避免指定不支持的配置。

SetCommState 函数重新配置通信资源,但它不会影响指定驱动程序的内部输出和输入缓冲区。 不会刷新缓冲区,并且不会过早终止挂起的读取和写入操作。

进程使用 SetupComm 函数重新初始化通信资源,该函数执行以下任务:

  • 终止挂起的读取和写入操作,即使它们尚未完成也是如此。
  • 放弃未读字符,并释放与指定资源关联的驱动程序的内部输出和输入缓冲区。
  • 重新分配内部输出和输入缓冲区。

调用 SetupComm 不需要进程。 如果未这样做,则资源的驱动程序在首次使用通信资源句柄时将使用默认设置初始化设备。