您好!
我修改了 USB_DEV_BULK 示例 A 位、可以读取来自主机(PC)的数据、但无法发回我的"状态代码"。 只有第一个字母"1"会返回到主机。
静态 uint32_t
EchoNewDataToHost (tUSBDBulkDevice * psDevice、uint8_t * pui8Data、
uint32_t ui32NumBytes)
{
uint32_t ui32Loop、ui32Space、ui32Count;
uint32_t ui32ReadIndex;
uint32_t ui32WriteIndex;
uint32_t valueL;
uint32_t 值计算器;
uint32_t valuec;
tUSBRingBufObject sTxRing;
//
//获取当前缓冲区信息,以便我们直接写入
//发送缓冲区(我们已经从中获得了足够的信息
//直接访问接收缓冲区的参数)。
//
USBBufferInfoGet (&g_sTxBuffer、&sTxRing);
//
//传输缓冲区中有多少空间?
//
ui32Space = USBBufferSpaceAvailable (&g_sTxBuffer);
//
//我们可以处理这一整段时间的字符数?
//
ui32Loop =(ui32Space < ui32NumBytes)? ui32Space:ui32NumBytes;
ui32Count = ui32Loop;
//
//更新接收计数器。
//
G_ui32RxCount += ui32NumBytes;
//
//转储调试消息。
//
debug_print ("接收到的%d 字节\n"、ui32NumBytes);
//
//设置为通过直接访问 USB 缓冲区来处理字符。
//
ui32ReadIndex =(uint32_t)(pui8Data - g_pui8USBRxBuffer);
ui32WriteIndex = sTxRing.ui32WriteIndex;
while (ui32Loop)
{
UARTprintf ("\n");
//
//左侧 USB MSG
//
if ((g_pui8USBRxBuffer[ui32ReadIndex]='L')
{
ui32ReadIndex++;
ui32ReadIndex =(ui32ReadIndex == bulk_buffer_size)?
0:ui32ReadIndex;
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_PIN_3);
UARTprintf (“左”);
char buffer[3];
uint32_t i;
对于(i = 0;i<3;i++){
Buffer[i]= g_pui8USBRxBuffer[ui32ReadIndex];
ui32ReadIndex++;
ui32ReadIndex =(ui32ReadIndex == bulk_buffer_size)?
0:ui32ReadIndex;
}
valueL = atoi ((char *) buffer);
UARTprintf ("\n %I"、valueL);
sprintf (g_pui8USBTxBuffer、"100");
}
//
// RGITH 端 USB MSG
//
否则、if ((g_pui8USBRxBuffer[ui32ReadIndex]='R')
{
ui32ReadIndex++;
ui32ReadIndex =(ui32ReadIndex == bulk_buffer_size)?
0:ui32ReadIndex;
UARTprintf (" right ");
char buffer[3];
uint32_t i;
对于(i = 0;i<3;i++){
Buffer[i]= g_pui8USBRxBuffer[ui32ReadIndex];
ui32ReadIndex++;
ui32ReadIndex =(ui32ReadIndex == bulk_buffer_size)?
0:ui32ReadIndex;
}
valueer = atoi ((char *) buffer);
UARTprintf ("\n %I"、评估器);
sprintf (g_pui8USBTxBuffer、"100");
}
ui32loop--;
}
//
//我们已对数据进行处理,因此现在发送已处理的数据
//返回到主机。
//
USBBufferDataWritten (&g_sTxBuffer、sizeof (g_pui8USBTxBuffer[bulk_buffer_size]);
debug_print ("写入%d 个字节\n"、ui32Count);
//
//我们处理了尽可能多的直接来自接收缓冲区的数据
//我们需要返回允许较低层的字节数
//适当地更新其读取指针。
//
return (ui32Count);
}
我可以告诉我什么是错误、这真的很好、我以前从未使用过 USB 通信、我一直使用过 UART。 因此、在下一步中、我想获得有关创建一个诸如"UARTPrintln"的函数的帮助、该函数可以使用一个简单的参数来调用、该参数将是消息本身。