stm32F103 用usb双缓冲机制,丢包,空包问题
- UID
- 1029342
- 性别
- 男
|
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); //处理接收到的数据
试过单缓冲,接收数据没有问题。 |
|
|
|
|
|