ESM335x WEC7串口硬件流控使用说明

   日期:2024-01-23     浏览:75    评论:0    
核心提示:这边文章对ESM335x WEC7串口硬件流控的使用进行介绍说明,以供参考。
ESM335x系列工控主板支持5路高速串口,其中COM2口支持硬件RTS/CTS流控功能,其RTS/CTS分别与ESM335x的GPOI1/GPIO0复用,应用程序可以独立设置是否使能RTS/CTS功能。,

ESM335x系列工控主板支持5路高速串口,其中COM2口支持硬件RTS/CTS流控功能,其RTS/CTS分别与ESM335x的GPOI1/GPIO0复用,应用程序可以独立设置是否使能RTS/CTS功能。

RTS(Request-To-Send)流量控制功能由串口参数结构体DCB的fRtsControl成员设置,该成员的可用值如下(针对ESM335x):

说明

 RTS_CONTROL_DISABLE

禁止RTS功能,对应管脚可作为GPIO使用

 RTS_CONTROL_HANDSHAKE

启用RTS握手功能。当串口硬件输入缓冲区字符数大于40时,RTS输出高,小于24个字符时,RTS输出低

 RTS_CONTROL_TOGGLE

当发送数据时,RTS信号线被驱动为低,缓冲区数据发送完后,RTS信号为被驱动高

串口参数结构体DCB的fOutxCtsFlow成员用于指定CTS(Clear-To-Send)信号是否被监视并作为输出流量控制信号。如果此成员设置为TRUE且CTS管脚为高,则串口输出被挂起,直到CTS被拉低后重新输出。如果此成员设置为FALSE,对应管脚可作为GPIO使用。

RTS Handshake与OutxCtsFlow通常是同时使能或同时禁止的,下面是设置RTS/CTS的示例代码:

  BOOL CCESerial::SetHandshake( BOOL bSet )

  {

      DCB          dcb;

      GetCommState( m_hSer, &dcb );

      // Purge any pending characters in the serial port.

      PurgeComm(m_hSer, (PURGE_TXABORT|PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR));

      if( bSet )

      {

          dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;

          dcb.fOutxCtsFlow = TRUE;

      }

      else

      {

          dcb.fRtsControl = RTS_CONTROL_DISABLE;

          dcb.fOutxCtsFlow = FALSE;

      }

      return SetCommState(m_hSer, &dcb);

  }

除COM2口支持硬件流控外,ESM335x的所有串口(包括COM2)还支持 RTS Toggle功能,RTS Toggle主要用于RS485电路的数据收发方向控制,应用程序可以选择ESM335x 32位GPIO中的任意一位做为RTS信号线来实现RTS Toggle功能,下面是选择GPIO作为串口RTS信号并使能RTS_CONTROL_TOGGLE的示例代码:

BOOL CCESerial::SetRTSToggle( DWORD dwRTSPin )

  {

      DCB     dcb;

      BOOL    bRet;

      bRet = DeviceIoControl(m_hSer,    // file handle to the driver

             IOCTL_SET_UART_RTS_PIN,  // I/O control code

             &dwRTSPin,                // in buffer

             sizeof(DWORD),           // in buffer size

             NULL,                     // out buffer

             0,                        // out buffer size

             NULL,                     // pointer to number of bytes returned

             NULL);                    // ignored (=NULL)

     if( !bRet )

          return FALSE;

      GetCommState( m_hSer, &dcb );

      // Purge any pending characters in the serial port.

      PurgeComm(m_hSer, (PURGE_TXABORT |PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR));

      dcb.fRtsControl = RTS_CONTROL_TOGGLE;

      SetCommState(m_hSer, &dcb);

      return TRUE;

  }

完整的串口例程请与英创工程师联系获取。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服