Dfu драйвер windows stm32

Обновление прошивки по USB-DFU

Download Firware Update Class (DFU)

И вот тут самое время понять, что еще могут существовать другие загрузчики одновременно с системными — это ваши , которые пишутся вами и находятся в адресах FLASH 0х08000000.

Более того у STM есть готовый вариант в Кубе для создания вашего загрузчика по USB и называется USB : Download Firware Update Class (DFU). Генерируем , прошиваем в контроллер.

И загрузчик появляется в адресах 0x0800000 до 0x800C000 (помечена только Readable)

Далее надо пользоваться утилитами от STM Dfu File Manager и DfuSeDemo :

Dfu File Manager готовит вашу прошивку для записи выше вашего бутлодера, а DfuSeDemo собственно ее шьет во Flash выше с адреса 0x800C000.

И происходит это без подтянутой к 1 ножке boot0 контроллера.

Для общего понимания картины адреса памяти :

Думаем , а куда мы заливем свой код программы ? Мы пользовались Atollic True Studio, там были такие настройки :

Например смотрите выходной файл проекта (*.map)

FLASH это с адреса 0x08000000. А вот системный загрузчик лежит где-то по адресу 0x00000000 по-видимому всегда прекрасно себя чувствует, так как его стереть нельзя.

В нашем случае имеем STM32F205VG к примеру и у него есть такие варианты загрузчиков :

Но как узнать какой версии системный загрузчик?

Оказывается никак или предположительно по некоторым букво-цифрам на корпусе контроллера.

Типичный вариант организации пинов для активации загрузчика

BOOT0

Видим , что в нашем готовом устройстве есть вариация по BOOT0 :

Штатно BOOT0 на земле и это означает , что начало программы стартует с SRAM , т.е. по адресу 0x20000000 .

BOOT1

BOOT1 может быть выведен наружу и идти на пин , который связан с разъемом на микро SD карты. Понятно для закгрузки с микро SD карты прошивки например.

2 проекта для текстирования

В итоге для тестирования связки с загрузкой через STM Dfu File Manager и DfuSeDemo сделаны открытые два примера на Atollic True Studio .

Первый реализует пользовательский загрузчик по USB (DFU) и прошивается с адреса 0x0800000 до 0x0800C000. А второй проект реализует саму основную обновляемую программу, которую прошиваем по адресу с 0x0800C000 и выше.

STM32F205VG_FLASH.ld

Внимание во втором проекте :

#define VECT_TAB_OFFSET 0xC000 /*!

Переключение в первом проекте между режимами загрузки и выполнение основной программы происходит программно установкой переменной boot = 1|0.

Можно прошивать каждый проект независимо , код каждого проекта должен попадать в свою область памяти и не вредить другому.

Читайте также:  Linux как установить curl

Теперь по-шагово поехали :

Собираем (и прошиваем) первый проект:

Собираем (но не прошиваем) второй проект:

Файл *.hex через утилиту STM Dfu File Manager преобразуем в файл *.dfu .

Запускаем первый проект в режиме (boot =1) с отладчиком и трассировкой SWO

Файл *.dfu через утилиту DfuSeDemo отсылаем контроллеру (то есть прошиваем через USB DFU Class)

Перезапускаем проект 1 с boot =0 и наблюдаем , что программа перешла на адрес 0x800C000 и начала выполняться :

Использование платы STM32 Leaf Maple Mini в Windows Studio Code с PlatformIO

В данной статье рассматривается:

На плате Leaf Maple Mini зашит загрузчик позволяющий загружать нашу прошивку через USB порт, как это делается в Arduino IDE. Загрузка производится в режиме DFU mode, что требует установки драйверов VID_1EAF&PID_0003.

При подключении плата определяется системой как COM порт, но в режиме загрузки прошивки переключается в режим DFU mode.

Прежде чем пытаться что-то прошить в наш контроллер нам необходимо установить драйвер.

Установка драйверов на плату Leaf Maple Mini

Качаем набор компонентов для работы с платами STM32 для Arduino IDE

Подключаем нашу плату по USB

Переводим нашу плату в режим работы DFU mode:

Кратковременно нажимаем кнопку RESET и пока быстро мигает светодиод жмем кнопку but=32 и удерживаем некоторое время.
Или зажимаем кнопку but=32 и кратковременно нажимаем RESET и держим некоторое время.

В диспетчере задач у нас должно появиться устройство Maple 003 которое требует установки драйверов.

Распаковываем скаченный ранее архив, идем в папку

\Arduino_STM32-master\drivers\win\ запускаем от АДМИНИСТРАТОРА — install_drivers.bat, драйвер должен установиться. Жмем RESET на плате, теперь установиться драйвер COM порта.

Если драйвера не установились или плата не определяется системой, пойдем по другому пути, зашьем загрузчик сами.

Прошивка в плату Leaf Maple Mini загрузчика

Я буду зашивать с использованием ST-LINK V2, но мы так же может прошить, используя COM переходники.

Качаем и устанавливаем:

Подключаем ST-LINK V2 к плате Leaf Maple Mini:

ST-LINK V2 Maple Mini
2 SWCLK (SWD clock) D21
4 SWDIO (SWD data input/output) D22
6 GND (Ground) GND
8 3.3V VCC

Запускаем STM32 ST-LINK Utility

Переводим нашу плату в режим DFU mode см.выше.

Жмем в программе Connect

Жмем на вкладку Binary File и выбираем скачанный ранее файл maple_mini_boot20.bin

Жмем Program Verify

В открывшемся окне жмем Start

Начнется прошивка нашего загрузчика.

Теперь еще раз пробуем установить драйвера описанным выше способом.

Использование платы Leaf Maple Mini в Windows Studio Code

Запускам Windows Studio Code с установленной PlatformIO и добавляем платформы как на картинке

Создаем проект из примеров ST STM32 –> arduino-blink

Переходим в созданный проект

Правим platformio.ini

Подключаем нашу плату по USB, она определиться системой как COM порт.

Жмем 3 см. картинку. Ждем окончания заливки прошивки в плату.

Если у вас выскакивает ошибка:

Значит, вы не поставили драйвера на плату.

Дополнительно о плате Leaf Maple Mini:
Особенности микроконтроллера
  • STM32F103CBT6 in LQFP48 package
  • ARM®32-bit Cortex®-M3 CPU
  • 72 MHz max CPU frequency
  • VDD from 2.0 V to 3.6 V
  • 128 KB Flash
  • 20 KB SRAM
  • GPIO (34) with external interrupt capability
  • 12-bit ADC (2) with 10 channels
  • RTC
  • Timers (4)
  • I2C (2)
  • USART (3)
  • SPI (2)
  • USB 2.0 full-speed
  • CAN

Схема платы Leaf Maple Mini

Еще информация по данной плате Leaf Maple Mini читать

Использование в Arduino IDE читать

Конечно, использовать DFU mode для заливки наших прошивок в плату по USB не есть хорошо, лучше прошивать, используя ST-LINK V2. Так же использование библиотек Arduino для работы с платой производительности нам не прибавит.

Разработку под STM32 лучше конечно производить в STM32CubeIDE — бесплатная среда разработки от STM, полностью поддерживает STM32CubeMX

Я использую Visual Studio 2019 Community с надстройкой VisualGDB – где Visual Studio 2019 Community – бесплатна, а вот VisualGDB стоит денег. Данная связка в последних версиях прекрасно работает с STM32CubeMX

STM32 bootloader DFU mode с использованием CubeMX. Инструкция пошаговая, step by step

Итак, сочинение сего мандригала было сподвигнуто практически полным отсутствием пошаговой инструкции с использованием обычного инструментария предлагаемого STMicroelectronics.

Великое множество обнаруженных в сети bootloader-ов, иногда весьма занятных, к сожалению «заточены» под какой-либо конкретный кристалл.

Предлагаемый материал содержит процедуру использования пакета CubeMX, «загружалки» DfuSeDemo и утилиты подготовки прошивки Dfu file manager, т. е. Мы абстрагируем наши «хотелки» от железки, да простят меня гуру макроассемблера и даташита.

Готовим окружение…

Нам необходимы собственно сам CubeMX, загружалка DfuSeDemo+Dfu file manager, лежат в одном пекете, STM32 ST-LINK Utility, все изыскиваем на сайте STMicroelectronics совершенно бесплатно.

Наша подопытная жлезка с чипом STM32F103C8T6 от дядюшки Ляо

и программатор ST-Link оттуда же.

Ну и ваша любимая IDE, в данном конкретном изложении мы используем KEIL, настройки компиляции в других IDE не очень отличаются.

Запускаем CubeMX и выбираем свой кристалл…

Отмечаем свои хотелки…

В данной конкретной задаче активируем устройство USB→Device FS и соответсвенно USB Device→ DownLoad Update Firmware class, и незабываем RCC→High Speed Clock→Cristal/Ceramic Resonator тот что на борту платы.

Далее необходимо выбрать переключалку режима bootloader-a, в данном примере просто задействуем имеющуюся перемычку boot1.

Смотрим схемку и в соответствии с ней boot1 прицеплен к ноге PB2, вот ее и задействуем в режиме GPIO_Input.

Готово, активируем закладку Clock Configuration и запускаем автомат выбора конфигурации.


Прыгаем на закладку Cofiguration…

Выбираем кнопку GPIO…


пишем пользовательскую метку, пусть это будет boot1.

Далее настраиваем проект…

Выбираем Project → Setting…

Выбираем и заполняем….

Соответсвенно выбираем для какого IDE нам Cub сгенерит проект, в нашем случае, MDK-ARM V5.

Закладку Code Generator в данном воплощении оставим без изменений…

Ну собственно и все, запускаем генерацию проекта Project→Generate Code

По окончании Cub предложит сразу запустить вашу IDE… как поступать выбирать вам.

Запускаем компиляцию и сборку и загрузку в кристалл… F7, F8…

Переключаем пины на нашей плате в режим работы и подключаем USB кабель…

Открываем в Windows панель управления→ система→ диспечер устройтв→ USB контроллер. И смотрим список устройств, Windows немого пошуршит и установит драйвер STM Device in DFU Mode (если он уже не стоял).

Итак, драйвер встал и определился, запускаем «загружалку» DfuSeDemo…

Смотрим что у нас поймалось DFU Device и дажды кликаем в поле Select Target …

Внимательно смотрим и дивимся, что флеш вплоть до адреса 0x0800C000 закрыт для записи и записываем этот адрес, он нам понадобится…

К слову, пробовал на STM32F407VE, там память открыта для записи с 0x08000000 т. е. С самого начала… почему, в нашем варианте не так, неясно, да и не копал, где то зарыто, но явно не прописано, не есть комильфо, потому что большой кусок пропадает безхозно… может кто и подскажет где копать…

Итак, «стрижка только начата»…

Нам понадобится только два файла исходников…

Открываем их в IDE и правим- дополняем…

Учитываем, что CubeMX НЕ ТОГАЕТ при перегенерации вставки между USER CODE BEGIN и USER CODE END… там и будем вписывать наши дополнения…

на этом с main.c все…

переходим на в usbd_conf.h и в

приводим к виду…

переходим к usbd_dfu_it.c, тут поболее….

Собственно и все…

Подключаем программатор, перекидываем перемычки в режим программирования, F7, F8 и botloader записан…

Теперь подготовим наше приложение для загрузки посредством bootloder…
Любимое приложение будет моргать светодиодиком…

Готовим и отлаживаем приложение, и меняем в компиляторе и теле программы отдельные места на предмет изменения адреса запуска программы и векторов прерываний…

А именно в KEIL → Configure → Flash Tools

Меняем адрес начала программы…

Говорим чтобы генерировал HEX файл

и меняем адрес таблицы векторов…

собираем программу F7…

полученный HEX преобразуем в dfo файл утилитой Dfu file manager…

указываем наш HEX файл кнопкой S19 or HEX… и жмем Generate…

получаем dfu файл.

Собственно и все готово.

Загрузка в контроллер…

Подключаем нашу подопытную плату с уже загруженным botloader-ом к USB, предварительно установив перемычки в режим DFU Mode.

Можно проконтролировать появлением STM Device in DFU Mode в списке устройст…
запускаем «загружалку».


указываем ей наш dfu файл…

Жмем Upgrade и наблюдаем результат загрузки… для уверенности, жмем проверку.

все удачно… можно запускать…

если ошибка вылезла, значит где-то косяк…

Итак, будем считать что все удачно… переключаем перемыку в режим работы приложения

и наслаждаемся миганием диодика…

Уффф. Столько букоффф. Устал копипастить картинки 🙂

Читайте также:  Windows не видит всю физическую память
Оцените статью