Прошивка STM32 через USB: пошаговое руководство

Прошивка 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-режим

Выполнено: 0 / 5

Установка драйверов и подготовка ПК

На современных версиях Windows устройство в режиме DFU обычно определяется автоматически, но для стабильной работы рекомендуется установить пакет STM32CubeProgrammer — вместе с ним ставятся необходимые драйверы. Если устройство видно с жёлтым восклицательным знаком, драйвер можно установить вручную из каталога установки программы.

Для метода через USB-UART переходник потребуется драйвер соответствующего чипа — CH340, CP2102 или FTDI, в зависимости от вашего адаптера. После установки в системе появится виртуальный COM-порт, номер которого виден в Диспетчере устройств.

📊 Каким способом вы прошиваете STM32?
Встроенный DFU-загрузчик
USB-UART переходник
ST-Link по SWD
Сторонний USB-загрузчик

Прошивка через 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-файла либо прошивка собрана под другую модель чипа. Проверьте эти пункты по порядку.