首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32F103 用usb双缓冲机制,丢包,空包问题

stm32F103 用usb双缓冲机制,丢包,空包问题

设置为双缓冲,根据设置语句的先后次序,1:出现一帧数据一帧空包情况(该帧数据丢失)   或者 2:正确接受数据,最后一帧数据没有,接着再发送相同数据发现接收帧数对了,但是因为第一次接收少了最后一帧,所以每次重发最后一帧都收不到。

情况2初始化和接收代码如下

初始化:
          SetEPType(ENDP1, EP_BULK);
   SetEPDoubleBuff(ENDP1);
          SetEPDblBuffAddr(ENDP1, ENDP1_RXADDR, ENDP1_RX1ADDR);
          SetEPDblBuffCount(ENDP1, EP_DBUF_OUT, 0x40);
          ClearDTOG_RX(ENDP1);
          ClearDTOG_TX(ENDP1);
          ToggleDTOG_TX(ENDP1);
          SetEPRxStatus(ENDP1, EP_RX_VALID);
          SetEPTxStatus(ENDP1, EP_TX_DIS);


接收:

  FreeUserBuffer(ENDP1, EP_DBUF_OUT);           //该语句放在处理数据前会出现接收空包情况

  if (GetENDPOINT(ENDP1) & EP_DTOG_TX)
  {
    /*read from ENDP1_BUF0Addr buffer*/
    Data_Len = GetEPDblBuf0Count(ENDP1);
    PMAToUserBufferCopy(Bulk_Data_Buff, ENDP1_RXADDR, Data_Len);
  }
  else
  {
    /*read from ENDP1_BUF1Addr buffer*/
    Data_Len = GetEPDblBuf1Count(ENDP1);
    PMAToUserBufferCopy(Bulk_Data_Buff, ENDP1_RX1ADDR, Data_Len);
  }

  DoWith_Data(Data_Len);      //处理接收到的数据


试过单缓冲,接收数据没有问题。
继承事业,薪火相传
返回列表