1.打开串口
•当程序初始化时,用户需要打开串口并创建与该串口相关联的文件。代码如下:
•
•01 HANDLE hModem; //定义串口句柄02 hModem=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,
•03 OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0); //关联串口并返回其句柄
•%注意:用户在使用函数CreateFile()创建与串口相关联的文件时,必须将该文件的相关属性设置为FILE_FLAG_OVERLAPPED。否则,用户所创建的文件将不能实现异步操作。
2.设置串口参数
•用户可以先调用函数GetCommState()获取系统当前对串口的设置,对结构体DCB进行修改,然后调用函数SetCommState()设置串口的参数。代码如下:
•
•01 DCB dcb;
•02 GetCommState(handleFile,&dcb);
•03 dcb.BaudRate = 9600;
•04 dcb.ByteSize = 8;
•05 dcb.fParity = FALSE;
•06 dcb.StopBits = ONESTOPBIT;
•07 BOOL isTrue;
•08 isTrue = SetCommState(handleFile,&dcb);
•09 if(isTrue == FALSE)
•10 {
•11 MessageBox("串口参数设置失败");
•12 return FALSE;
•13 }
3.设置操作超时时间间隔
•用户设置完串口的相关参数后,应该对串口操作的时间间隔进行设置。这样,当串口操作的时间间隔超出用户所设置的时间时,操作函数将被强制返回,避免程序假死。其代码如下:
•01 COMMTIMEOUTS con; //定义结构体变量
•02 con.ReadIntervalTimeout=1000; //设置串口数据读取的超时时间
•03 BOOL istrue; //定义布尔变量
•04 istrue= SetCommTimeouts(hModem, &con); //调用函数进行参数设置
•05 if(istrue) //判断串口参数是否设置成功
•06 {
•07 MessageBox("超时时间设置成功!");//若参数设置成功,则提示用户成功
•08 }
•09 else
•10 {
•11 MessageBox("超时时间设置失败!请重试");//若参数设置失败,则提示用户重试
•12 }
•
•在程序中,用户主要是依靠结构体COMMTIMEOUTS中的成员变量ReadIntervalTimeout对串口操作的超时时间间隔进行设置的。
4.设置串口缓冲区
•现在,用户可以调用函数对串口的数据缓冲区进行设置,实现其功能的API函数是SetupComm()。代码如下:
•
•SetupComm(hModem,1024,512); //设置各数据缓冲区的大小
•
•当用户在程序退出或者其他原因,不再需要使用串口缓冲区时,应该将其中的内容进行清除操作并析构该缓冲区。否则,当下次再使用时,程序将发生错误。代码如下:
•
•01 BOOL istrue; //定义布尔变量
•02 istrue=PurgeComm(hModem, PURGE_TXABORT| PURGE_RXABORT|
•03 PURGE_TXCLEAR|PURGE_RXCLEAR);//调用函数对缓冲区内容进行清除
•04 if(istrue) //判断清除是否成功
•05 {
•06 MessageBox("缓冲区数据清除成功!"); //若参数设置成功,则提示用户成功
•07 }
•08 else
•09 {
•10 MessageBox("缓冲区数据清除失败!请重试");//若参数设置失败,则提示用户重试
•11 }
5.读写串口
•通过以上几个步骤,关于串口的相关参数设置以及串口事件指定等操作已经基本完成。那么读者便可以用ReadFile()和WriteFile()函数对串口进行读写操作了。
代码下载