您当前的位置: 首页 > 

txwtech

暂无认证

  • 3浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

14.2.4 Win32 API串口通信编程的一般流程

txwtech 发布时间:2019-06-26 21:38:33 ,浏览量:3

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()函数对串口进行读写操作了。

代码下载
关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0880s