侵权投诉
订阅
纠错
加入自媒体

Win32串口编程

2010-12-01 17:30
退思
关注

  Win32串口编程

  Win32下串口通信与16位串口通信有很大的区别。在Win32下,可以使用两种编程方式实现串口通信,其一是调用的Windows的API函数,其二是使用ActiveX控件。使用API 调用,可以清楚地掌握串口通信的机制,熟悉各种配置和自由灵活采用不同的流控进行串口通信。下面介绍串口操作的基本知识。

  打开串口:使用CreateFile()函数,可以打开串口。有两种方法可以打开串口,一种是同步方式(NonOverlapped),另外一种异步方式(Overlapped)。使用Overlapped打开时,适当的方法是:

  HANDLE hComm;

  hComm = CreateFile( gszPort,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);

  if (hComm == INVALID_HANDLE_VALUE)

  // error opening port; abort

  配置串口:

  1.DCB配置

  DCB(Device Control Block)结构定义了串口通信设备的控制设置。许多重要设置都是在DCB结构中设置的,有三种方式可以初始化DCB。

  (1)通过GetCommState()函数得DCB的初始值,其使用方式为:

  DCB dcb = {0};

  if (!GetCommState(hComm, &dcb))

  // Error getting current DCB settings

  else

  // DCB is ready for use.

  (2)用BuildCommDCB()函数初始化DCB结构,该函数填充 DCB的波特率、奇偶校验类型、数据位、停止位。对于流控成员函数设置了缺省值。其用法是:

  DCB dcb;

  FillMemory(&dcb, sizeof(dcb), 0);

  dcb.DCBlength = sizeof(dcb);

  if (!BuildCommDCB(“9600,n,8,1“, &dcb)) {

  // Couldn‘t build the DCB. Usually a problem

  // with the communications specification string.

  return FALSE;

  }

  else

  // DCB is ready for use.

  (3)用SetCommState()函数手动设置DCB初值。用法如下:

  DCB dcb;

  FillMemory(&dcb, sizeof(dcb), 0);

  if (!GetCommState(hComm, &dcb)) // get current DCB

  // Error in GetCommState

  return FALSE;

  // Update DCB rate.

  dcb.BaudRate = CBR_9600 ;

  // Set new state.

  if (!SetCommState(hComm, &dcb))

  // Error in SetCommState.

  Possibly a problem with the communications

  // port handle or a problem with the DCB structure itself.

  手动设置DCB值时,DCB的结构的各成员的含义,可以参看MSDN帮助。

 

1  2  3  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号