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

2019-08-17 00:19发布

设置为双缓冲,根据设置语句的先后次序,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);      //处理接收到的数据


试过单缓冲,接收数据没有问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。