2

我正在尝试使用STM32F103C8创建自定义 HID 设备,我选择的 IDE 是 STM32CubeIDE,我关注的 教程位于 ST youtube 官方频道。

ST提供了很棒的工具“设备配置工具”,我可以在其中配置微控制器,并且会生成很多基于我​​的配置的代码。该生成的代码具有“用户代码部分”,用户可以在其中创建他的逻辑,如果他需要重新配置微控制器,“设备配置工具”将不会删除该部分代码。

问题:要配置自定义 USB HID,我需要在没有用户代码的地方更改由“设备配置工具”生成的代码,如果我再次运行“设备配置工具”,这些更改将被删除。我只能在“设备配置工具”中设置的字段是: 在此处输入图像描述

但这还不够,我还需要更改 CUSTOM_HID_EPIN_SIZE 和 CUSTOM_HID_EPOUT_SIZE 定义表示设备和主机一次相互发送的字节数,如果我更改“数据包”的大小,我将需要更改默认生成的回调接收该数据并使用它的函数,例如该工具生成如下代码:

{
  USBD_CUSTOM_HID_HandleTypeDef     *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData;

  if (hhid->IsReportAvailable == 1U)
  {
    ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf[0],
                                                              hhid->Report_buf[1]);
    hhid->IsReportAvailable = 0U;
  }
  return USBD_OK;
}

但我需要指向“Report_buf”的指针,而不是它的副本,以便s first 2 elements, and the default generated code pass only copy of 2 first bytes, and i can在“设备配置工具”中更改它。

我目前的解决方案:实际上我解决了这个问题,但我认为我没有以正确的方式解决它并且它有效。我已经更改了此处的模板文件“STM32CubeIDE_1.3.0\STM32CubeIDE\plugins\com.st.stm32cube.common.mx_5.6.0.202002181639\db\templates”并且还更改了“STM32CubeIDE_1.3.0\en.stm32cubef1. zip_expanded\STM32Cube_FW_F1_V1.8.0\Middlewares\ST\STM32_USB_Device_Library\Class\HID"

我认为这不是正确的做法,有人知道做这件事的正确方法吗?

我在这里的 ST 论坛上也发现了同样的问题,但没有解决。

4

1 回答 1

0

您想要实现的正是 st trainer 在此链接上解释的内容。 https://www.youtube.com/watch?v=3JGRt3BFYrM

Trainer 一步一步解释如何更改代码以使用指向缓冲区的指针

if (hhid->IsReportAvailable == 1U)
  {
    ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf);
    hhid->IsReportAvailable = 0U;
  }
于 2021-08-27T06:23:21.873 回答