STM32 HID如何发送小于64字节的数据包?

时间:2018-07-09 11:53:26

标签: c usb stm32 hid

我正在将STM32F103与“ STM32_USB-FS-Device_Lib_V4.0.0”一起使用,以将数据发送到PC。 STM32中的发送函数为:

void USB_Send(unsigned char *p,u8 len)
{
    UserToPMABufferCopy(p, GetEPTxAddr(ENDP1), len);
    SetEPTxCount(ENDP1, len); 
    SetEPTxValid(ENDP1);
    while(GetEPTxStatus(ENDP1)!=EP_TX_NAK);
}

但是奇怪的是,当len = 64时,我编写的C#程序和我下载的调试工具正确接收了数据。但是,当len <64时,什么也收不到。我尝试了“ Bus Hound” USB数据包嗅探器,该嗅探器可以记录少于64个的数据包,但是我的程序中从未输入过readdata函数。

我还尝试在STM32程序中更改ConfigDescriptor中的MaxPacketSize值和ReportDescriptor中的REPORT_COUNT值,但是它们不起作用。

HID是否限制一个数据包的长度必须为某个值,如果长度小于该值,则必须在数据包末尾填充额外的数据,直到长度等于特定值为止。

有人可以给我一些帮助或提示,谢谢!


补语:

我试图无延迟地发送两个32Bytes数据包,但这没有用。

这是我的C#接收代码:

//Init code:
HIDP_CAPS capabilities = new HIDP_CAPS();
int hidCapsSucsess = HidP_GetCaps(ptrToPreParsedData, ref capabilities);  //HidP_GetCaps is a win API
SafeFileHandle handle_read = CreateFile(devicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);  //CreateFile is a win API
FileStream FS_read = new FileStream(handle_read, FileAccess.ReadWrite, capabilities.OutputReportByteLength, false);
//...
//Receive code:
public byte[] read()
{
    byte[] readBuf = new byte[capabilities.OutputReportByteLength];
    FS_read.Read(readBuf, 0, capabilities.OutputReportByteLength);
    return readBuf;
}

我试图在STM32的ReportDescriptor中更改输出的REPORT_COUNT的值。断点调试显示“ capabilities.OutputReportByteLength”已更改,但奇怪的是它等于REPORT_COUNT + 1。此外,当“ capabilities.OutputReportByteLength”小于65时,发生错误:“ 提供的用户缓冲区对于“ FS_read.Read”中的请求操作无效”。

0 个答案:

没有答案
相关问题