Действительно, PMA отображается в память контроллера с интервалом через каждые 2 байта..
Т.е. идет 2 байта PMA, потом 2 нулевых байта.. и т.д.
Еще и в доке об этом написано так что хрен поймешь.
USB CDC для STM32F103
Сообщений 91 страница 98 из 98
Поделиться912018-12-11 12:54:07
Поделиться922018-12-24 18:47:09
К проекту True Studio добавил файлы из этого проекта:
alexsam
При компилляции 5 одинаковых ошибок, при развёртывании макроса _USB_STRING_
_USB_STRING_(wsVendor, L"SaeWave.com") _USB_STRING_(wsProd, L"RemoteSwitch HUB") _USB_STRING_(wsSN, L"0123-4567-89") _USB_STRING_(wsCDC, L"CDC Device") _USB_STRING_(wsCDCData, L"CDC Data")
Ошибка - "wide character array initialized from incompatible wide string" usblib.c /USB_CDC_alexsam/src line 178 C/C++ Problem
Макрос выглядит так:
#define _USB_STRING_(name, ws) \ \ const struct name \ { \ uint8_t bLength; \ uint8_t bDescriptorType; \ uint16_t bString[(sizeof(ws) - 2) / 2]; \ /*uint8_t bString[(sizeof(ws))];*/ \ \ } \ name __attribute__((used, section("usb_string"))) = {sizeof(name), 0x03, ws};
Почему массив не совместим с расширенным символьным типом, как это исправить?
P.S Сильно не пинайте только
Поделиться932018-12-27 18:38:08
К проекту True Studio добавил файлы из этого проекта:
---
Почему массив не совместим с расширенным символьным типом, как это исправить?
Замени букву L на u.
Было
_USB_STRING_(wsVendor, L"SaeWave.com")
стало
_USB_STRING_(wsVendor, u"SaeWave.com")
Я перенес проект на GCC. Тут можно взять:
https://github.com/Utyff/STM32F103-USB- … ee/GCC_fix
Поделиться942018-12-27 23:35:50
Я перенес проект на GCC. Тут можно взять:
спасибо.
Поделиться952019-07-10 20:44:43
Что-то я забыл выложить ссылочку на свой CDC - эмуляция PL2303 на STM32F103. Код уже сую "в продакшн" ☺
Поделиться962019-07-12 09:01:13
Может почистить этот топик от офтопа, собрать ссылки на проекты в первый пост и перенести топик в раздел stm32?
Поделиться972019-07-12 10:45:13
У меня уже все работает, но только под линуксом. Почему-то ни под ондроедом, ни под игровыми приставками эмуляция PL2303 не работает: устройство не опознается. Возможно, я накосячил с таймингами. Сижу, ковыряюсь в выхлопе wireshark. Пакеты совершенно одинаковые: что от китайского "настоящего" PL2303, что от STM32, но вот от китайского ошибок нет, а от моего при коннекте на чтение возникает pl2303 ttyUSB0: pl2303_set_line_request - failed: -32. Проверил по таймингам — одинаково. Вот же чертовщина!
Вот же япона мать! Нашел проблемную строчку: здесь ZLP не нужен. Никаких ошибок в dmesg не вижу, отлично все. Но подключаю к приставке — и фигвам! После обеда на ондроеде проверю, если в нем будет работать, забью на мастдайку гнойную!
Почистить и выделить лишь дельное стоило бы...
Поделиться982019-07-12 22:35:48
Методом "Монте-Карло" починил. Изменения закоммитил.
Вот как должен выглядеть обработчик второго прогона SET_LINE_CODING:
if(ep.rx_cnt){ if(setup_packet.bRequest == SET_LINE_CODING){ linecoding_handler((usb_LineCoding*)ep0databuf); } } // wait for new data from host epstatus = SET_VALID_RX(epstatus); epstatus = SET_VALID_TX(epstatus);