Прошивка STM32 через USB чаще всего не удаётся из-за того, что микроконтроллер не переведён в режим загрузчика: компьютер видит устройство как неизвестное или не видит вовсе, а STM32CubeProgrammer сообщает, что DFU-устройство не найдено. Причина почти всегда одна — вывод BOOT0 не подтянут к высокому уровню перед подачей питания, поэтому чип стартует из пользовательской флеш-памяти, а не из системного загрузчика.
В этой статье разберём, как прошить STM32 через USB без внешнего программатора: какие способы существуют, как правильно войти в DFU-режим, какие драйверы понадобятся на Windows и что делать, если устройство не определяется. Материал ориентирован на популярные платы вроде Blue Pill (STM32F103) и отладочных плат с разъёмом USB.
Способы прошивки STM32 через USB
Загрузить прошивку в микроконтроллер через USB-порт компьютера можно несколькими путями, и выбор зависит от конкретной модели чипа и платы. Не все STM32 имеют встроенный USB-загрузчик — это важно проверить до начала работы.
- 🔌 Встроенный DFU-загрузчик — системный bootloader, зашитый производителем в ROM чипа. Есть не у всех серий: например, у STM32F103 его нет, а у STM32F4 и многих других — есть.
- 🔁 USB-UART переходник — прошивка через встроенный UART-загрузчик (есть почти у всех STM32) с помощью адаптера на базе CH340 или CP2102.
- 🧩 Сторонний USB-загрузчик — например, загрузчики для плат Blue Pill, которые записываются один раз через UART или ST-Link, после чего плата прошивается напрямую по USB.
- 🛠️ Программатор ST-Link — формально тоже подключается по USB, но работает через интерфейс SWD, это отдельный метод.
Проверка поддержки USB-загрузчика
Компания STMicroelectronics публикует документ AN2606 — официальное описание системных загрузчиков для всех серий STM32. Именно там указано, какие интерфейсы (USB, UART, CAN, SPI) поддерживает загрузчик конкретного чипа и на каких выводах они активны. Это первый документ, который стоит открыть перед прошивкой.
Обратите внимание: наличие разъёма USB на плате ещё не означает поддержку DFU. На той же Blue Pill разъём есть, но встроенного USB-загрузчика у STM32F103 нет — разъём работает только с пользовательской прошивкой или со сторонним загрузчиком.
Почему у STM32F103 нет DFU
Системный загрузчик STM32F1 серии поддерживает только USART1 (выводы PA9/PA10). USB-DFU в ROM этого семейства не реализован, поэтому «прошивка Blue Pill по USB» возможна только после установки стороннего загрузчика, который сам записывается через UART или SWD.
Вход в режим DFU (bootloader)
Чтобы чип запустил системный загрузчик, необходимо задать правильную комбинацию на выводах BOOT0 и BOOT1 до подачи питания или до сброса. Классическая схема: BOOT0 подтягивается к высокому уровню (логическая единица), BOOT1 — к низкому. Точные требования для вашей модели уточняйте в AN2606 и datasheet, так как у части серий логика выводов отличается.
На отладочных платах для этого обычно есть перемычки или кнопка BOOT. Порядок действий выглядит так:
- 📍 Переведите перемычку BOOT0 в положение «1» (или зажмите кнопку BOOT).
- 🔌 Подключите плату к USB-порту компьютера или нажмите и отпустите RESET.
- ✅ Отпустите кнопку BOOT — чип останется в режиме загрузчика до следующего сброса.
- 💻 Проверьте в Диспетчере устройств, появилось ли устройство STM32 BOOTLOADER или устройство в режиме DFU.
⚠️ Внимание: если войти в загрузчик не удаётся, проверьте, не удерживает ли прошитая ранее программа выводы BOOT в другом состоянии, и не запитана ли плата от внешнего источника с конфликтом по линиям питания USB. Подключайте плату одним источником питания за раз.
☑️ Чек-лист входа в DFU-режим
Установка драйверов и подготовка ПК
На современных версиях Windows устройство в режиме DFU обычно определяется автоматически, но для стабильной работы рекомендуется установить пакет STM32CubeProgrammer — вместе с ним ставятся необходимые драйверы. Если устройство видно с жёлтым восклицательным знаком, драйвер можно установить вручную из каталога установки программы.
Для метода через USB-UART переходник потребуется драйвер соответствующего чипа — CH340, CP2102 или FTDI, в зависимости от вашего адаптера. После установки в системе появится виртуальный COM-порт, номер которого виден в Диспетчере устройств.
Прошивка через STM32CubeProgrammer
STM32CubeProgrammer — официальная бесплатная утилита STMicroelectronics, поддерживающая прошивку через USB (DFU), UART, SWD и другие интерфейсы. После запуска программы в правом верхнем углу выберите тип подключения USB и нажмите кнопку обновления списка портов — при корректном входе в DFU устройство появится в выпадающем списке.
Далее нажмите Connect, перейдите на вкладку загрузки (иконка со стрелкой), укажите файл прошивки в формате .hex, .bin или .elf и запустите запись. Для формата .bin программа попросит указать стартовый адрес — для большинства STM32 это начало флеш-памяти, точное значение смотрите в reference manual вашей модели (часто это 0x08000000).
После завершения записи полезно включить верификацию — программа сравнит содержимое флеш-памяти с файлом и сообщит о несовпадениях. Затем верните перемычку BOOT0 в нулевое положение и перезагрузите плату: микроконтроллер стартует уже из вашей прошивки.
Сравнение методов прошивки
| Метод | Оборудование | Поддержка чипами | Сложность |
|---|---|---|---|
| Встроенный DFU | Только USB-кабель | Не все серии (проверять AN2606) | Низкая |
| USB-UART адаптер | Переходник CH340/CP2102 | Практически все STM32 | Низкая |
| Сторонний USB-загрузчик | USB-кабель после первичной записи загрузчика | Зависит от загрузчика | Средняя |
| ST-Link (SWD) | Программатор ST-Link | Все STM32 | Низкая |
Типичные ошибки и их решение
Устройство не появляется в системе даже после установки BOOT0 — начните с кабеля и порта: попробуйте другой USB-кабель и порт напрямую на материнской плате, без хабов. Если плата ранее прошивалась программой, использующей выводы USB, это не мешает загрузчику, но плохой контакт в разъёме — мешает.
Ошибка «No DFU device found» в CubeProgrammer при видимом устройстве в системе чаще всего указывает на проблему с драйвером. Переустановите драйвер через Диспетчер устройств, указав вручную драйвер из папки установки CubeProgrammer, либо используйте утилиту Zadig для смены драйвера на совместимый.
⚠️ Внимание: не меняйте состояние перемычек BOOT и не отключайте кабель в процессе записи флеш-памяти. Прерывание прошивки может оставить чип с повреждённой программой — восстановление потребует повторного входа в загрузчик или подключения через SWD.
Если запись проходит, но после сброса программа не стартует, проверьте две вещи: возвращён ли BOOT0 в нулевое положение и тот ли стартовый адрес указан при загрузке .bin-файла. Неверный стартовый адрес — самая частая причина «прошилось, но не работает» при прошивке bin-файлов.
⚠️ Внимание: некоторые платы имеют защиту от чтения/записи (RDP), выставленную предыдущей прошивкой. Если CubeProgrammer сообщает о защите, потребуется снятие RDP с полным стиранием чипа — все данные во флеш-памяти будут потеряны.
Частые вопросы
Можно ли прошить STM32F103 (Blue Pill) напрямую через USB-разъём?
Напрямую через встроенный загрузчик — нет, у серии F1 нет USB-DFU в ROM. Варианты: прошивка через USB-UART переходник по USART1 (PA9/PA10) или предварительная запись стороннего USB-загрузчика через UART или ST-Link, после чего плата прошивается по USB.
Компьютер не видит плату в режиме DFU. Что проверить в первую очередь?
Проверьте кабель (должен поддерживать передачу данных), положение перемычек BOOT0/BOOT1 до момента подачи питания, наличие устройства в Диспетчере устройств и драйверы. Подключайте плату напрямую к порту ПК, минуя USB-хабы.
Какой стартовый адрес указывать для bin-файла?
Для большинства STM32 флеш-память начинается с адреса 0x08000000, но точное значение зависит от модели и от того, рассчитана ли прошивка на работу с загрузчиком. Сверьтесь с reference manual вашего чипа и документацией к проекту.
Чем отличается прошивка через DFU от прошивки через ST-Link?
DFU использует встроенный загрузчик и не требует дополнительного оборудования, но доступен не на всех чипах и не позволяет отлаживать код. ST-Link работает через интерфейс SWD, поддерживается всеми STM32 и даёт полноценную отладку.
После прошивки плата не запускается. В чём причина?
Наиболее вероятные причины: перемычка BOOT0 не возвращена в нулевое положение, указан неверный стартовый адрес при загрузке bin-файла либо прошивка собрана под другую модель чипа. Проверьте эти пункты по порядку.