DFU bootloader на stm32f10rct6, на котором его в стоке нет. Вроде бы сделал. Есть отдельный проект на бутлоадер, который радостно грузит фирмварь, заливаемую через DFU c 0x08008000. Есть тупой блинк-проект для проверки того, что бутлоадер нормально отрабатывает - тоже работает. Заливается, радостно мигает светодиодом. Пробую усложнить блинк - впиливаю FreeRTOS. Работает, заливается, грузится бутлоадером, мигает. Постепенно усложняю, приводя плюс-минус к тому же виду, что и основной проект. Врубаю два SPI, I2C, I2S, UART. Работает - заливается, мигает. Добавляю USB CDC - все, привет, перестает. Инициализирую через кубик. Причем, MX_USB_DEVICE_Init() стоит после инициализации всей периферии в коде. Но при этом - если я его комментирую, вся периферия инициализируется нормально, scheduler запускается, таска с миганием светиком отрабатывает. Если я его раскомментирую - все виснет еще до того, как запуститься scheduler, то на инициализации SPI, то на UART, какой-то чистый рандом. Ну и стандартная добавка - "вектора перекинуты", простая прошивка, как уже и говорил и льется, и работает. ЧЯДНТ? Инициализация USB DFU в буте стоит после загрузки кода прошивки и если она не грузанулась. То есть когда прошивка грузится - USB в буте не инициализируется, по идее конфликта нет.
Хорошей практикой считается перед передачей управления в основной код - вернуть все в исходное состояние. Не увидел здесь о том что делаешь деинит
Стек у УСБ всегда был особенным. Я правда последний раз его трогал года три назад
Обсуждают сегодня