本文基于wince平台,使用win32 API实现串行通信
1、打开和关闭串行端口
串行端口设备使用CreateFile函数打开,所使用的名称要遵循特定的格式,即3个字符
COM后紧跟要打开的COM端口号,再加个冒号,冒号是Windows CE所必需的。
如,hser=CreateFile(TEXT(“COM1:”),GENERIC_READ|GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL),为以可读可写的方式打开COM1端口。
调用CloseHandle函数关闭一个串行端口。
2、读写串行端口
调用ReadFlie与WriteFile函数进行读与写,由于Windows CE不支持重叠I/O,因此不要试图从主线程读或写大量的串行数据。所以常用的方法是使用单独的线程读写串口,即读和写分别建立线程,使用各自的线程函数进行处理。
3、异步串口I/O
虽然Windows CE不支持重叠I/O,但是可以使用多线程来实现同样功能的重叠操作,在主线程忙碌的时候,启动单独线程进行处理同步I/O操作。
这个时候,可以使用WaitCommEvent函数,该函数将阻塞一个线程直到一个预先选择的串行事件发生,即串口没有数据的时候等待,一旦有数据继续执行。要等待某一个事件,首先使用SetCommMask来设置事件掩码,通常是EV_EXCHAR参数,接收一个字符。
4、配置串行端口
可以使用GetCommState和SetCommState来配置串行端口。
需要注意的是,首先用GetCommState获得BCD结构体数据,这里BCD结构体有系统默认的值,不需要你去修改,然后使用SetCommState进行设置,主要设置波特率、起始位、数据位、停止位、奇偶检验。
5、设置端口的超时值
使用GetCommTimeouts和SetCommTimeouts进行设置。
对于串口编程,数据的解析很重要,以上代码写好,基本不会变。下来就是解析和分发。