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);      //处理接收到的数据


试过单缓冲,接收数据没有问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-08-17 00:39
帮顶。。。。
ticat710
2楼-- · 2019-08-17 06:17
再顶。。。。不知道有谁解决了这个问题
jery99
3楼-- · 2019-08-17 09:03
这个问题 解决了吗?我也出现了这样的问题 吗,只不过我是发送。请问如果解决了 是怎么解决的。
gaihuishi0613
4楼-- · 2019-08-17 11:15
jery99 发表于 2017-6-26 09:29
这个问题 解决了吗?我也出现了这样的问题 吗,只不过我是发送。请问如果解决了 是怎么解决的。

你的解决了吗?
解决了能不能给我发个code参考一下,我的也是发送

一周热门 更多>