问题描述
你好吗?希望你们一切都好=)
我使用 V.10.1 版本固件包开发了我的应用程序。要求我更新固件以使用 V1.11.1 固件包。当我升级时,一些事情搞砸了,包括 CustomHID。
这是正在发生的事情:
在 CUSTOM_HID_OutEvent_FS 函数中,我的设备使用
确认收到的包USBD_CUSTOM_HID_SendReport。这与 V1.10.1 完美配合。现在我升级了,我的整个 USB 通信在第一次发送 ACK 后就搞砸了。第一次发送包后,我的应用程序无法通过 USB 接收或发送数据。如果我删除ACK发送,我可以继续接收数据。
更新后我注意到的:
PCB 和 USB LL 库已更改。经过大量调试后,我注意到这个特定的函数搞砸了:PCD_EP_ISR_Handler。
此功能从 V1.10.1 更新到 V1.11.1。我研究了这个函数和 USB 代码流,发现了一个让我的 USB 通信恢复工作的变化。这是 EP_ISR_Handler 函数的最后几行:
if ((ep->type == EP_TYPE_BULK) && ((wEPVal & USB_EP_KIND) == 0U))
{
/* multi-packet on the NON control IN endpoint */
TxByteNbre = (uint16_t)PCD_GET_EP_TX_CNT(hpcd->Instance,ep->num);
if (ep->xfer_len > TxByteNbre)
{
ep->xfer_len -= TxByteNbre;
}
else
{
ep->xfer_len = 0U;
}
/* Zero Length Packet? */
if (ep->xfer_len == 0U)
{
/* TX COMPLETE */
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->DataInStageCallback(hpcd,ep->num);
#else
HAL_PCD_DataInStageCallback(hpcd,ep->num);
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
else
{
/* Transfer is not yet Done */
ep->xfer_buff += TxByteNbre;
ep->xfer_count += TxByteNbre;
(void)USB_EPStartXfer(hpcd->Instance,ep);
}
}
/* Double Buffer Iso/bulk IN (bulk transfer Len > Ep_Mps) */
else
{
(void)HAL_PCD_EP_DB_Transmit(hpcd,ep,wEPVal);
}
}
让我的 USB 通信恢复工作的是在上面的最后几行代码片段中将 HAL_PCD_EP_DB_Transmit 更改为 HAL_PCD_EP_Transmit。
我远非 USB 专家,老实说,我不知道此功能更改对 USB 流的确切影响是什么。我所知道的是,我不应该修改 ST 驱动程序以使我的应用程序正常工作。
我的自定义 HID 已经开始工作,遵循 ST youtube 频道上提供的教程。我使用的 USB 设置完全按照 64 字节包接收/发送教程中的描述。
我已经尝试过的事情:
-> 仅使用 CUSTOM Hid 使用 V1.11.1 创建了一个项目。有同样的行为。
-> 尝试使用 V1.11.0。有同样的行为。
所有这些都解释了,有人可以给我提示我该怎么做吗?我需要将固件包更新到最新版本。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)