`
isiqi
  • 浏览: 16489850 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

WinCE串口编程API函数(二)

阅读更多

异步串口I/O:

  BOOL GetCommMask(

  HANDLE hFile,

  LPDWORD lpEvtMask

  );

  BOOL SetCommMask(

  HANDLE hFile,

  DWORD dwEvtMask

  );

  BOOL WaitCommEvent(

  HANDLE hFile,

  LPDWORD lpEvtMask,

  LPOVERLAPPED lpOverlapped

  );

  GetCommMask函数用于得到串口已经设置了的串口事件,参数hFile指定已打开的串口句柄,参数lpEvtMask用于存取得到的串口事件集。SetCommMask函数的功能与GetCommMask函数正好相反,用于设置串口事件集。WaitCommEvent函数用于等待预先设置的串口事件中的某一个事件发生,该函数将阻塞线程,直到预先设置的串口事件中的某一事件的发生。参数lpEvtMask用于存储已经发生的事件,参数lpOverlapped必须设置为NULL,因为在Windows CE中不支持重叠I/O操作。

  串口时间表: EV_BREAK 检测到中断发生 EV_CTS CTS信号改变了状态 EV_DSR DSR信号改变了状态 EV_ERR 串口驱动程序检测到了错误,如CE_RXPARITY,CE_OVERRUN,CE_FRAME EV_RING 检测到振铃 EV_RLSD RLSD信号改变了状态 EV_RXCHAR 接收到了一个字符 EV_RXFLAG 接收到了一个事件字符 EV_TXEMPTY 在输出缓冲区中的最后一个字符被发送 .设置端口读写超时:

  BOOL GetCommTimeouts(

  HANDLE hFile,

  LPCOMMTIMEOUTS lpCommTimeouts

  );

  BOOL SetCommTimeouts(

  HANDLE hFile,

  LPCOMMTIMEOUTS lpCommTimeouts

  );

  在用ReadFile和WriteFile读写串口时,需要考虑超时问题。如果在指定的时间内没有读出或者写入指定数量的字节数据,那么ReadFile函数或者WriteFile函数就会返回。GetCommTimeouts函数用来查询当前的超时时间设置,该函数会填充一个COMMTIMEOUTS结构。SetCommTimeouts函数用来通过一个COMMTIMEOUTS结构设置超时时间。两个函数的返回值都是成功时返回非零值,失败时返回零。

  typedefstruct _COMMTIMEOUTS {

  DWORD ReadIntervalTimeout; /*读间隔超时*/

  DWORD ReadTotalTimeoutMultiplier; /*读时间系数*/

  DWORD ReadTotalTimeoutConstant; /*读时间常量*/

  DWORD WriteTotalTimeoutMultiplier; /*写时间系数*/

  DWORD WriteTotalTimeoutConstant; /*写时间常量*/

  } COMMTIMEOUTS,*LPCOMMTIMEOUTS;

  ReadIntervalTimeout:以毫秒为单位设置通信线路上的两个字符到达之间最大时间间隔。在ReadFile操作期间,从接收到第一个字符开始计时。如果任意两个字符到达之间的时间间隔超过这个最大值,则ReadFile操作完成,返回缓冲数据。如果该值设置为0,则不使用间隔超时。

  ReadTotalTimeoutMultiplier:读时间系数。以毫秒为单位设置一个用来计算读操作总超时时间的时间系数。

  ReadTotalTimeoutConstant:读时间常量。以毫秒为单位设置一个用来计算读操作总超时时间的时间常量。

  读总超时时间 = 读时间系数*要读的字节数 + 读时间常量

  WriteTotalTimeoutMultiplier:写时间系数。以毫秒为单位设置一个用来计算写操作总超时时间的时间系数。

  WriteTotalTimeoutConstant:写时间常量。以毫秒为单位设置一个用来计算写操作总超时时间的时间常量。

  写总超时时间 = 写时间系数*要写的字节数 + 写时间常量

  超时有间隔超时和总超时两种类型。间隔超时是指在接收时两个字符之间的最大时延。从串口读取数据时,当接收到一个字节时,通信驱动程序启动一个内部定时器开始计时,在下一个字节到来之前,如果定时器时间超过了间隔超时时间,读操作就会被放弃。总超时是指读操作或者写操作总共花费的最大时间。写操作只支持总超时,读操作对两种类型的超时都支持。

  如果应用程序将ReadIntervalTimeout和ReadTotalTimeoutMultiplier设置为MAXDWORD,并且将ReadTotalTimeoutConstant设置为大于0并且小于MAXDWORD的数,则调用ReadFile函数时,会有以下情况:

  1 如果接收缓冲区中有字符存在,则ReadFile函数立即返回这些字符。

  2 如果接收缓冲区中没有字符,则ReadFile函数会等待直到一个字符到达,然后立即返回。

  3 若在ReadTotalTimeoutConstant设定的时间内没有任何字符到达,则ReadFile超时返回。

  间隔超时和总超时的设置是不相关的。

  下面列举一些情况:

  1 有读间隔超时,读总超时,写总超时:将COMMTIMEOUTS结构中的五个成员设置为相应值。

  2 有读总超时,写总超时:将ReadIntervalTimeout设置为0,将其他成员设置为相应值。

  3 在读一次输入缓冲区中的内容后,读操作就立即完成,不管是否读入了要求的字符:将ReadIntervalTimeout设置为MAXDWORD,

  将ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都设置为0。

  4 ReadFile没有超时设置,直到有适当的字符数返回或者错误发生,该函数才返回:将ReadIntervalTimeout,ReadTotalTimeoutMultiplier和

  ReadTotalTimeoutConstant都设置为0。

  5 WriteFile没有超时设置:将WriteTotalTimeoutMultiplier和

  WriteTotalTimeoutConstant都设置为0。

  例:

  ----------------------------------

  COMMTIMEOUTS CommTimeOuts;

  GetCommTimeouts(m_hComm, &CommTimeOuts);

  CommTimeOuts.ReadIntervalTimeout = 100;/* 接收字符间最大时间间隔 */

  CommTimeOuts.ReadTotalTimeoutMultiplier = 1;

  CommTimeOuts.ReadTotalTimeoutConstant = 100;/* 读数据总超时常量 */
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

  CommTimeOuts.WriteTotalTimeoutConstant = 0;

  SetCommTimeouts(m_hComm, &CommTimeOuts);

  ----------------------------------

  ----------------------------------

  COMMTIMEOUTS CommTimeOuts;

  GetCommTimeouts (m_hComm, &CommTimeOuts);

  CommTimeOuts.ReadIntervalTimeout = MAXDWORD;

  CommTimeOuts.ReadTotalTimeoutMultiplier = 0;

  CommTimeOuts.ReadTotalTimeoutConstant = 0;

  CommTimeOuts.WriteTotalTimeoutMultiplier = 10;

  CommTimeOuts.WriteTotalTimeoutConstant = 1000;

  SetCommTimeouts( m_hComm, &CommTimeOuts )

分享到:
评论

相关推荐

    WinCE串口API函数.zip_WINCE串口编程_wince 串口_串口 WINCE

    在Windows CE(简称WinCE)操作系统中...熟练掌握这些函数及其使用方法,是进行WinCE串口编程的基础。通过文档中的"WinCE串口API函数.doc",开发者可以更深入地学习每个函数的详细用法和示例,进一步提升串口编程能力。

    wince下串口编程(232可用)

    在WinCE系统中,串口通信主要依赖于系统提供的SerialPort类或API函数。 1. **串口初始化**: 在WinCE中,首先需要打开串口,这通常通过调用CreateFile API完成。函数参数包括串口设备名(如"COM1:"),访问模式...

    WinCE串口调试源码.zip

    1. **WinCE串口API**:WinCE提供了类似于Windows API的串口操作函数,如CreateFile、SetCommState、SetCommMask、ReadFile、WriteFile等,用于打开、配置、读写串口。 2. **DCB结构体**:Device Control Block,用于...

    WINCE串口读写小精灵 MFC/API版

    《WINCE串口读写小精灵 MFC/API版》是一款专为Windows CE系统设计的串口通信工具,它集成了MFC(Microsoft Foundation Classes)框架和API(Application Programming Interface)编程方式,使得开发者在WINCE5、...

    Wince下串口实例(可运行)

    在Wince下,串口通信可以通过Windows CE的Win32 API实现,比如`CreateFile`、`SetCommState`、`WriteFile`和`ReadFile`等函数。本实例可能包含了设置波特率、校验位、停止位、数据位等参数,以及发送和接收数据的...

    vs2008开发的WINCE串口收发的源码

    在"串口编程示例(eWin助手源码)"这个压缩包中,包含了实际的源码示例,它演示了上述步骤的实现。通过学习这些源码,你可以理解如何在VS2008环境下构建一个完整的串口通信程序。这将帮助你在实际项目中实现类似功能...

    wince串口编程[整理].pdf

    在WinCE串口通信的实践中,我们将使用面向对象的编程方法。创建一个名为`CPort`的类来封装串口操作,包括打开、关闭串口、发送和接收数据。以下是一些关键成员函数: - **CPort()** 和 **~CPort()**:构造和析构...

    wince 串口通讯 源码

    本资源提供的是“wince串口通讯”源码,下面将详细介绍串口通信的基本概念、在WinCE中的实现以及相关编程知识。 串口通信,也称为串行通信,是指数据以串行方式一位一位地传输。在计算机硬件中,串口通常指的是COM...

    cea.rar_CEA_WINCE 串口_evc 串口_wince 串口_wince 串口

    ”这表明该压缩包包含了一套已经封装好的串口通信类,可以简化EVC中的串口编程工作。封装类通常会隐藏底层的复杂细节,提供简洁的API,使开发者能够更专注于应用逻辑。 串口通信在WinCE中主要依赖于系统提供的...

    Wince 串口助手 加强版 EVC源码

    这些API函数是Windows CE串口通信的核心,用于打开串口、设置波特率、数据位、停止位、校验位等参数,以及读写数据。 例如,`CreateFile`函数用于打开一个串口设备,返回一个文件句柄,后续的通信操作都将基于这个...

    wince串口编程.pdf

    线程的实现通常依赖于Windows API中的`SetCommMask()`和`WaitCommEvent()`函数,前者用于设置要监听的事件,后者则等待这些事件的发生。 在实际编程中,开发者还需要考虑串口参数的配置,如波特率、数据位、停止位...

    Wince_Serial.zip_wince 串口_wince程序

    在Windows CE(简称WinCE)操作系统中,串口通信是一个重要的功能,对于开发嵌入式..."Wince_Serial.zip"这个资源包为开发者提供了实践和学习WinCE串口编程的实用工具和资料,对深入理解和应用WinCE串口技术大有裨益。

    wince 串口读写程序

    2. **WinCE API**:开发者需要直接调用Windows CE的API函数,如`CreateFile`来打开串口,`SetCommState`来设置串口参数,`WriteFile`和`ReadFile`进行数据传输,以及`CloseHandle`关闭串口。 3. **同步与异步通信**...

    wince 串口调试程序

    本文将深入探讨wince在ARM9平台上如何进行串口编程,帮助你掌握这个关键技能。 串口在wince中的实现主要是通过Windows CE的API函数来完成的。这些API函数提供了打开、关闭、读取、写入以及配置串口参数等基本操作。...

    UART.rar_WinCE 串口通信_wince_wince UART_wince 串口

    4. **串口编程**:压缩包中的“UART”可能是源代码文件或者一个已编译的库,包含了实现串口通信的函数和API。常见的操作包括打开串口、设置波特率、读写数据、关闭串口等。了解这些API的使用方法对于进行WinCE设备的...

    WinCE 串口源代码

    这份源代码不仅提供了一个实际运行的示例,也是学习和研究WinCE串口编程的一个良好起点。通过深入研究和理解这份源代码,开发者可以更好地应对各种串口通信场景,提升其在WinCE平台上的开发能力。

Global site tag (gtag.js) - Google Analytics