как правильно изменить свойства / сгенерированный код пользовательского HID в STM32CubeIDE

Я пытаюсь создать пользовательское HID-устройство с STM32F103C8, 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 cant измените это в "Инструменте конфигурации устройства".

Мое текущее решение: на самом деле я решил эту проблему, но я не думаю, что решил ее правильно, и это работает. Я изменил файлы шаблонов, которые находятся здесь "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 здесь, но она не была решена.

2 ответа

У меня была та же проблема, когда сгенерированный код записывал изменения, и это было сложно исправить. Мое решение — разместить проект в репозитории git. Как только все будет так, как вам нравится, зафиксируйте и отправьте изменения. После генерации вам нужно только запустить git restoration для затронутых файлов.

то, чего вы хотите достичь, - это именно то, что объясняет st trainer по этой ссылке. https://www.youtube.com/watch?v=3JGRt3BFYrM

Тренер шаг за шагом объясняет, как изменить код, чтобы использовать указатель на буфер.

      if (hhid->IsReportAvailable == 1U)
  {
    ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf);
    hhid->IsReportAvailable = 0U;
  }
Другие вопросы по тегам