win32 api 串口编程分类: C/C++ 2007-11-22 14:19 1158 人阅读评论(0) 收藏举报一、基本知识 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 配置串口: 配置 DCB ( Device Control Block )结构定义了串口通信设备的控制设置。许多重要设置都是在 DCB 结构中设置的,有三种方式可以初始化 DCB 。(1) 通过 mState() 函数得 DCB 的初始值,其使用方式为: DCB dcb = {0}; if (!mState(hComm, & dcb)) // Error getting current DCB settings else // DCB is ready for use. (2) 用 mDCB() 函数初始化 DCB 结构,该函数填充 DCB 的波特率、奇偶校验类型、数据位、停止位。对于流控成员函数设置了缺省值。其用法是: DCB dcb; FillMemory( & dcb, sizeof (dcb), 0); = sizeof (dcb); if (!mDCB( “ 9600,n,8,1", & dcb)) { // Couldn't build the DCB. Usually a problem // with munications specification string. return FALSE; } else // DCB is ready for use. (3) 用 mState() 函数手动设置 DCB 初值。用法如下: DCB dcb; FillMemory( & dcb, sizeof (dcb), 0); if (!mState(hComm, & dcb)) // get current DCB // Error in mState return FALSE; // Update DCB rate. = CBR_9600 ; // Set new state. if (!mState(hComm, & dcb)) // Error in mState. Possibly a problem with municat
win32 api 串口编程 来自淘豆网www.taodocs.com转载请标明出处.