ВОПРОС Перенос usb-cdc с stm32 на gd32

Dizzy

МЕСТНЫЙ
ПРОВЕРЕННЫЙ
Регистрация
03.02.2025
Сообщения
38
Реакции
19
Баллы
18
Город
Брест
Имя
Дмитрий
Собственно, уперся в сабж при переносе проекта из stm32 (cube) на GD32 (Platformio) и закопался на ровном месте. Конкретно взятый gd32, имеет почти полное соответствие по адресам, структурам и назначению регистров с stm32 в части usb. Есть незначительные отличия в тактировании, полный список отличий составлять было лень. В результате, проект завелся под gd32-spl, осталось только реализовать вкусные плюшки. У gd32 есть своя библиотека usb, представлена всего тремя пользовательскими функциями и кардинально отличается от аналогичной библиотеки stm. (в ардуиновском loop было бы вполне юзабельно)
Что делал:
1. Подключил библиотеки gd32 usbd, заглушил вызовы cdc_transmit_fs, подменил Init. Устройство подключается, определяется. Как быть дальше с таким куцым набором функций, выведенных наружу, при необходимости работать даже с CDC_SET_CONTROL_LINE_STATE, я не знаю.
2. Решил оставить все на stm библиотеках, но взять от HAL только минимально необходимое, соскладировав в отдельный файл. И снова фиаско. Зависимость от CMSIS+HAL такая, что их нужно втащить чуть ли не полностью, при этом нужно разруливать конфликты с GD32 CMSIS+SPL. Когда файл с HAL-функциями стал больше 2000 строк, а ошибок "inplicit declaration" перевалило за 2 сотни, от этой идеи пришлось отказаться.

Надеюсь, у кого-нибудь возникнет идея, как без титанических усилий достичь желаемого?
 
  • Последнее редактирование:
Последнее редактирование:
Возможно, я был неверно понят. Как работать с stm библиотекой, я знаю. Это все очень хорошо расписано в аппнотах, примерах и готовых проектах. Исходный проект под STM32-CMSIS-HAL переделан под GD32-CMSIS-SPL почти весь, кроме usb-cdc части. Библиотека gd32 устроена и работает иначе, чем у stm, хотя аппаратные части (навскидку) идентичны в части usb.
 
Короче говоря, прицепил сбоку pcd_module от stm32-hal, middleware и cdc-core. USB phy конфигурируется, но выпадает в default handler. Все-таки, отличия в аппаратной части имеются. Регистры эндпоинтов не конфигурятся корректно.
 
Все, добил, наконец! Получилось примерно так:
Код:
GrblHAL 1.1f ['$' or '$HELP' for help]
ok
[VER:1.1f.20250910:]
[OPT:VNMSL,100,512,3,0]
[AXS:3:XYZ]
[NEWOPT:ENUMS,RT+,ES,TC,SED]
[FIRMWARE:grblHAL]
[SIGNALS:HSE]
[NVS STORAGE:*FLASH]
[DRIVER:GD32F303CC]
[DRIVER VERSION:250716]
[BOARD:GENERICGD32F303CC]
ok

Применимо к линейке плат lunyee/cronos/annoy tools на базе GD32F30x, 48k RAM, 256k Flash. В аттаче прошивка под USB-CDC c generic pinmap.
STEP X - A1, DIR X - A5, Limit X - B12
STEP Y - A2, DIR Y - A6, Limit Y - B13
STEP Z - A3, DIR Z - A7, Limit Z - B12
ENABLE - A15
PWM SPINDLE - A8, ENA - B1, DIR - B0
Control: Estop-B5, Feed hold - B6, Start - B7
Probe - A7

Тестирование проводил на светодиодах, вроде все работает. Было бы неплохо прогнать на реальном железе.
 

Вложения

  • firmware.zip
    107 KB · Просмотры: 2
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

Конечно, Ваше программное обеспечение для блокировки рекламы отлично справляется с блокировкой рекламы на нашем сайте, но оно также блокирует полезные функции. Мы стараемся для Вас и не обязываем Вас донатить и скидывать денег на наши кошельки, чтобы пользоваться форумом, но реклама это единственное, что позволяет поддерживать проект и развивать его.

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать