Win32串行通信详解

需积分: 10 1 下载量 188 浏览量 更新于2024-07-26 收藏 831KB PDF 举报
"Win32串行通信中文版(Serial Communications In Win32)" 是一篇微软技术文档,详细介绍了如何在Win32环境下进行串行通信。该文档指出,在Win32下进行串口通信与16位Windows系统有很大区别,并假设读者已经掌握了Win32的多线程和同步基础知识。 在Win32中,串口通信涉及到多个关键概念和技术,包括: 1. **打开串口**: 使用`CreateFile`函数来打开串行端口,如COM1、COM2等,通常需要指定设备名称和访问模式。 2. **读和写**: `ReadFile`和`WriteFile`函数用于从串口读取数据和向串口写入数据。这两个函数支持非重叠(阻塞)和重叠(异步)I/O操作。 - **非重叠I/O**:在执行读写操作时,如果没有数据可读或缓冲区已满,函数会阻塞等待,直到操作完成。 - **重叠I/O**:通过配合使用`OVERLAPPED`结构和事件对象,可以在等待I/O操作完成的同时执行其他任务,提高了程序的并发性。 3. **串行状态**:包括通信事件和告诫,可以使用`GetCommState`和`SetCommState`函数来获取和设置串口的状态。`GetCommModemStatus`可以获取调制解调器( modem )状态,即线状态。 4. **通信事件**:通过`WaitForSingleObject`或`WaitForMultipleObjects`函数,可以监听串口的特定事件,如数据可用、端口关闭等。 5. **错误处理和通信状态**:利用`ClearCommError`函数来检查和处理串口通信中的错误,同时可以获取通信状态。 6. **调制解调器状态**:包含了线路的物理状态,如DTR (Data Terminal Ready)、RTS (Request To Send)等,可以通过`EscapeCommFunction`来控制这些状态。 7. **串行设置**:涉及DCB(Device Control Block)设置,用于配置波特率、数据位、停止位、校验位以及流控制等参数。`GetCommConfig`和`SetCommConfig`函数用来获取和设置串口配置。 8. **流控制**:分为硬件流控制(如RTS/CTS、DTR/DSR)和软件流控制(XON/XOFF)。硬件流控制通过串口线路的信号来控制数据传输,而软件流控制则使用特定的字符作为流量控制标志。 9. **通信超时**:可以设定读写操作的超时策略,以避免无限制的等待。`SetCommTimeouts`函数允许设置各种类型的超时模式。 10. **小结**:文档最后总结了Win32串行通信的关键点,并提供了参考资料,帮助开发者深入理解和应用这些知识。 这篇文章适合已经有一定Win32编程基础的开发者,尤其是对多线程和同步有了解的人员,以便他们能够有效地实现串行通信。对于不熟悉Windows编程的新手,建议先学习Windows编程基础。
2011-02-15 上传
摘要: 微软Win32下的串口通讯完全不同于Windows下16位的串口通讯,那些熟悉16位下串口通讯功能的将不得不去适当的重新学习许多Win32下串口通讯的系统部分,这篇文章将会帮助你完成这些。对串口通讯不熟悉的那些人通过这篇文章的学习将会为自己以后的研究发展奠定坚实的基础。 这篇文章主要以读者熟悉的多线程和Win32下的并行操作为例。除此之外,基于对Win 32堆栈功能的熟悉了解在理解内存管理机制中是非常有用的,比如这篇文章所提到的MTTTY。对于较多关于这些功能的信息,商议平台 SDK 文件的编写,微软公司Win32 SDK 知识 库 , 或微软公司网络开发者程序馆。那些控制用户接口和会话视窗的功能界面(APIs)尽管在这里并不做讨论,但是对于完全了解此篇文章提供的例子是非常有用的。对于不熟悉一般微软视窗操作系统的应该在学习串口通讯之前学习一些基本的微软程序设计。换句话说,在潜水之前先沾湿你的脚。 绪论: 这篇文章的焦点主要是应用程序设计界面(API)和微软公司兼容的方法上,Windows NT 和 Windows 95;因此,API在两个平台上的支持是唯一的探讨。Windows 95 支持 Win32,电话API(TAPI)和Windows NT 3.x不支持;因此,这里我们不讨论TAPI 。然而,TAPI 确实值得一提,它在调制解调器接口和呼叫控制中的应用是非常有用的。一个用调制解调器工作和电话程序应该实现这些TAPI 功能界面。这将允许用另一个TAPI应用程序接口与之紧密结合。此外,这篇文章不讨论Win32下象GetCommProperties的一些配置功能。 这篇文章从如下几段入手:打开串口、读写操作(非重叠和重叠)、串口状态(事件和错误)和串口设置(DCB,流量控制和通信超时)。 这篇文章所包含的例子MTTTY:多线程TTY诸多功能实现的讨论。它使用了三个线程来实现:一个内存管理用户界面的线程,一个控制所有写操作的线程,一个控制读和改变串口状态的线程。这个例子中的内存管理使用了一些不同的数据堆。它也广泛的利用同步方法促进线程间的通信。 ..................... ....................