Ох уж эти весельчаки из ST!
Ладно, когда у МК разных семейств одинаковая вроде периферия как-то отличается. Но когда ты лепишь в одной и той же линейке разное — это ж совсем дичь! У STM32F303 в самых младших (6/8) нет USB, у средних (B/C) буфер 512Б и доступ к нему 1/16 (ХЗ, зачем они так это назвали, на самом деле это значит, что мы в uint32_t пишем по 2 байта данных, получается "прореженный" буфер), а у старших (D/E) буфер 1к (причем, как у F0 256Б с его хвоста делится с CAN) и доступ к нему — 2/16 (т.е. данные в буфере идут непрерывно).
Я, правда, в F0 что-то адово намутил с этими буферами (нужно тупо memcpy сделать, а я там привожу к uint16 и по два байта читаю).
Решил проблему так: объявил макрос USB1_16 — будет доступ "прореженный", объявил USB2_16 — непрерывный; в третьем случае — ошибка. Надо будет причесать все это и подумать, как организовать таким образом, чтобы уже не было архитектурнозависимых вещей в файлах usb.[ch] и usb_lib.[ch] (и вообще, лучше их объединить, выкинув в отдельный файл лишь дескрипторы; да и подумать, как проще реализовать переход к другому классу: хоть между HID и CDC).
Подтяжку USB DP на своей косячной плате сделал постоянной, но таки завтра перепаяю на какую-нибудь "кнопку": задолбался шнурок из компа выдирать/вставлять каждый раз после новой прошивки (аналогично с запуском дебаггера). Плату я переделал и подтяжку сделал через p-канальный мосфет так, чтобы она всегда была включена, если МК не подаст единичку на затвор (тогда и с DFU проблем не будет). Вместо ноги управления CS экрана у меня сейчас светодиод мигает. Завтра продолжу разбираться, почему у меня CAN не работает (неужто с ним тоже какие-то "нюансы"?).
Я, правда, в F0 что-то адово намутил с этими буферами (нужно тупо memcpy сделать, а я там привожу к uint16 и по два байта читаю).
Решил проблему так: объявил макрос USB1_16 — будет доступ "прореженный", объявил USB2_16 — непрерывный; в третьем случае — ошибка. Надо будет причесать все это и подумать, как организовать таким образом, чтобы уже не было архитектурнозависимых вещей в файлах usb.[ch] и usb_lib.[ch] (и вообще, лучше их объединить, выкинув в отдельный файл лишь дескрипторы; да и подумать, как проще реализовать переход к другому классу: хоть между HID и CDC).
Подтяжку USB DP на своей косячной плате сделал постоянной, но таки завтра перепаяю на какую-нибудь "кнопку": задолбался шнурок из компа выдирать/вставлять каждый раз после новой прошивки (аналогично с запуском дебаггера). Плату я переделал и подтяжку сделал через p-канальный мосфет так, чтобы она всегда была включена, если МК не подаст единичку на затвор (тогда и с DFU проблем не будет). Вместо ноги управления CS экрана у меня сейчас светодиод мигает. Завтра продолжу разбираться, почему у меня CAN не работает (неужто с ним тоже какие-то "нюансы"?).