修改通信资源设置

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

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

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

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

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

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

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

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

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