stm32 usb hid通信速度太慢是什么原因 STM32 USB HID 发送数据什么时候发送完

\u5982\u4f55\u4f7f\u7528STM32\u7684USB\u5e93\u652f\u6301\u5ef6\u8fdfHID\u7684GET

\u5982\u679c\u8981\u652f\u6301HID\u7684GET_REPORT\u8bf7\u6c42\uff0c\u6309\u7167\u4e0a\u4e00\u7bc7\u535a\u5ba2\u4e2d\u7684\u8bf4\u660e\uff0c\u53ea\u9700\u8981\u5728STM32 USB\u5f00\u53d1\u5e93\u4e2d\u7684CustomHID\u4f8b\u5b50\u4e2d\u505a\u5982\u4e0b\u4fee\u6539\u5373\u53ef\uff1a

1\uff09\u5728usb_prop.c\u7684\u51fd\u6570CustomHID_Data_Setup()\u4e2d\uff0cGET_PROTOCOL\u4e4b\u540e\u589e\u52a0\u5982\u4e0b\u4ee3\u7801\uff1a

/*** GET_PROTOCOL ***/
else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_PROTOCOL)
{
CopyRoutine = CustomHID_GetProtocolValue;
} /* \u4ee5\u4e0a\u4ee3\u7801\u4e3a\u539f\u6709\u4f8b\u7a0b\u4e2d\u7684\u4ee3\u7801 */
/*** GET_REPORT ***/ /* \u4ee5\u4e0b\u4ee3\u7801\u652f\u6301GET_REPORT */
else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_REPORT)
{
CopyRoutine = CustomHID_GetReport;
}


2\uff09\u518d\u589e\u52a0\u4e00\u4e2a\u51fd\u6570\uff1a

uint8_t *CustomHID_GetReport(uint16_t Length)
{
if (Length == 0)
{
return 10;
}
return &Report_Buffer[pInformation->Ctrl_Info.Usb_wOffset];
}
3\uff09\u4fdd\u8bc1\u5728IN Token\u5230\u6765\u4e4b\u524d\uff0cReport_Buffer\u4e2d\u5305\u542b\u6709\u6548\u7684\u6570\u636e\u3002

\u53ef\u4ee5\u8bbe\u7f6e\u53d1\u9001\u6570\u636e\u7684\u957f\u5ea6\u7684 uint16_t wNBytes
/*******************************************************************************
* Function Name : UserToPMABufferCopy
* Description : Copy a buffer from user memory area to packet memory area (PMA)
* Input : - pbUsrBuf: pointer to user memory area.
* - wPMABufAddr: address into PMA.
* - wNBytes: no. of bytes to be copied.
* Output : None.
* Return : None.
*******************************************************************************/
void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
{
uint32_t n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */
uint32_t i, temp1, temp2;
uint16_t *pdwVal;
pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
for (i = n; i != 0; i--)
{
temp1 = (uint16_t) * pbUsrBuf;
pbUsrBuf++;
temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
*pdwVal++ = temp2;
pdwVal++;
pbUsrBuf++;
}
}

stm32 是FS 12Mb 的而且hid是中断传输一次最多64字节.
而且间隔是ms单位,
你觉得能快到哪去
我测试FS 12Mb/s bluk批量传输能到1MByte/s左右这速度可以了
除非加HS的PHY

扩展阅读:usb audio and hid ... stm32 usb blaster ... stm32 usb device ... stm32 hal usb ... nethunter usb hid ... steam-324 ... esp32s3 usb hid ... usb hid协议 ... stm32 usb dm不接电阻 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网