注意:
主循环部分:
while (1)
{
/*
if ((count_out != 0) && (bDeviceState == CONFIGURED))
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8))
{ //PB.8
GPIO_ResetBits(GPIOB, GPIO_Pin_9);
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
}
else{
GPIO_SetBits(GPIOB, GPIO_Pin_9);
GPIO_SetBits(GPIOB, GPIO_Pin_8);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
}
//接收USB 的数据,分析
USB_To_USART_Send_Data(&buffer_out[0], count_out);
count_out = 0;
//Add send to PC using USB:write ENP:
//---------------------------------------------
}*/
//端点中断:
void EP3_OUT_Callback(void)
{
/*
count_out = GetEPRxCount(ENDP3);
PMAToUserBufferCopy(buffer_out, ENDP3_RXADDR, count_out);
SetEPRxValid(ENDP3);
*/
//--->
/*
在用串口调试助手debug时发现官方例程的接收完全没问题,发送部分有很大问题,当发送的数据很大时就会出现很严重的丢包.
后来我将EP3_OUT_Callback函数改成下面的,将main函数里的USB_To_USART_Send_Data注释掉就OK了,分析了一下,觉得问题可能
是当发送大量数据时main函数的USB_To_USART_Send_Data还没处理完,后面的数据就过来了,将buffer_out里面的数据覆盖掉了.
当我将USB_To_USART_Send_Data移到EP3_OUT_Callback后,只有当前数据处理完才会允许下一次传输.修改后的例程我试过通过
com口给别的板子升级firmware完全没问题.
*/
count_out = GetEPRxCount(ENDP3);
PMAToUserBufferCopy(buffer_out, ENDP3_RXADDR, count_out);
//这里把数据处理完毕,再允许端口3
USB_To_USART_Send_Data(&buffer_out[0], count_out);
count_out = 0;
SetEPRxValid(ENDP3);
}
|