Windows编程:串行通信与端口打开方法

需积分: 9 1 下载量 152 浏览量 更新于2024-07-23 收藏 87KB PDF 举报
"Serial Communication in Win32.pdf 是关于在Windows环境下进行串行通信的编程指南,涵盖了如何打开端口、非重叠和重叠操作等主题。" 在Windows编程中,串行通信(Serial Communication)是设备之间通过串行接口进行数据传输的一种方式,常见于打印机、调制解调器等硬件设备的连接。本文档主要讨论了在Win32环境下如何使用串行通信,特别是如何利用Windows API函数`CreateFile`来打开和管理串行端口。 `CreateFile`函数是Windows API中的一个核心功能,用于打开或创建文件、管道、设备等资源,包括串行通信端口。当需要打开串行端口时,`CreateFile`的参数设置至关重要。对于重叠(Overlapped)操作,这是异步I/O的一种形式,允许系统在等待I/O操作完成时执行其他任务,提高程序效率。以下是如何使用`CreateFile`进行重叠操作的示例代码: ```cpp HANDLE hComm; hComm = CreateFile( gszPort, // 端口名称,如"COM1" GENERIC_READ | GENERIC_WRITE, // 请求读写权限 0, // 不共享,串行端口不支持文件那样的共享模式 NULL, // 默认的安全属性 OPEN_EXISTING, // 只打开已存在的端口 FILE_FLAG_OVERLAPPED, // 标志为重叠操作 NULL // 无模板文件 ); if (hComm == INVALID_HANDLE_VALUE) { // 打开端口失败,处理错误并退出 } ``` 如果将`FILE_FLAG_OVERLAPPED`标志移除,`CreateFile`将使用非重叠(Non-Overlapped)操作,即同步I/O,这会阻塞调用线程直到I/O操作完成。非重叠模式适合简单的、不需要异步处理的串行通信场景。 在打开串行通信端口时,文档指出`fdwShareMode`参数必须设置为零,因为串行端口不支持像文件那样被多个进程共享。然而,使用Telephony Application Programming Interfaces(TAPI)的应用可以利用TAPI函数来实现不同应用间的资源共享。 除了`CreateFile`,在进行串行通信时还需要配置端口参数,如波特率、数据位、停止位、校验位等,这通常通过`DCB`(Device Control Block)结构和`SetCommState`函数完成。同时,`SetCommMask`用于设置串口事件的监视,`WaitForSingleObject`和`GetCommEvents`配合使用可监听并响应串行端口的事件。 `Serial Communication in Win32`探讨了如何在Windows系统下有效地进行串行通信编程,包括如何正确打开端口、选择合适的操作模式以及配置通信参数,这些都是开发涉及串行通信应用时的关键技术点。