最近一个项目才把Windows下如何用API来进行串口操作了解的比较清楚,现在总结几个关键点。其中主要是总结超时控制,整个串口操作的过程可以参考MSDN的“Serial Communications in Win32”。
一 同步操作方式和异步操作方式
所谓同步和异步,是指是否会阻塞操作串口的线程,同步会阻塞,异步不会阻塞,所以异步又叫重叠,也就是串口操作在后台进行,程序后面的语句可以和串口操作重叠执行。同步和异步,与整个程序是否是多线程无关,只会影响到进行串口操作的线程。
二 读串口的超时控制方法
异步方式读串口的超时控制的关键点:
1. 用SetCommTimeouts函数设置串口超时时间。
该函数第二个参数是指向COMMTIMEOUTS结构的指针,该结构各个成员的设置是超时控制的关键,说明如下:
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout; // 各个字符之间的读间隔超时。收到第1个字符之后该超时才生效。如果超时之后没收到第二个字符,串口读操作将结束。
DWORD ReadTotalTimeoutMultiplier; // 读时间系数
DWORD ReadTotalTimeoutConstant; // 读时间常量。总超时 = 要读取的字节数 x 读时间系数 + 读时间常量。
DWORD WriteTotalTimeoutMultiplier; &n

本文总结了Windows API串口编程的关键点,包括同步和异步操作方式以及读串口的超时控制方法。重点讲述了如何使用SetCommTimeouts函数设置超时,并通过GetOverlappedResult或WaitForSingleObject进行超时等待。还提及了服务端程序使用WaitCommEvent的情况,以及根据报文格式设计读取函数的策略。
最低0.47元/天 解锁文章
2097

被折叠的 条评论
为什么被折叠?



