embedded techniques for everyone ; solve atleast one problem of the world a day ; provide the world what you do not get ; invent and service the world
Friday, April 05, 2013
ST-Link is not in the DFU mode
I faced problem when trying to execute the debugger in STM32F4-Discovery board.
When I tried to search with the keyword «ST-Link is not in the DFU mode», I was disappointed that there was almost no hits. Luckily I find one Japanese language blog and I could solve it.
To upgrade ST-Link over STM32F4 Discovery 1. Select JTAG mode in setting of STM32 ST-LINK Utility (Select «JTAG», from menu «Target->Settings->Connexion Protocol») 2. Disconnect and reconnect the target and execute «Firmware update» from «ST-LINK» menu 3. When the upgrad is over, Restore the setting to «SWD»
To know about ST-LINK utility, please visit the following link:
13 comments:
Rather than do all of these steps, leave your settings alone and click on ST-LINK->Firmware update. When the «ST-Link Upgrade» dialog appears, unplug and physically reconnect the board. Finally click the «Device Connect» button from the dialog.
With Discovery board stm32f051R8 to upgrade st link disconnect two jumpers on the boar marked as st-link and upgrade via ST-LinkUpgrade exe
Thanks!, It worked for me too.
It worked for me too. Thanks. Odair from Brazil. Development engenieer,
Thank you all! It works with JTAG/SWO option.
You are my favourite person this month. I am very inexperienced with stm32 arm devices and I could not connect to my device without this utility. The official page of my device doesn’t even mention the utility so how was I supposed to know about it?
BTW Internet is full of crap nowadays. Found your post after 2 hours of getting tortured by false Google returns 🙂
Thank you! Worked like a charme.
hahah, reconnecting worked like a charm
Hi all, as of 3/1/2019 reconnecting still works. Upgraded Purple stick from V2.J17.S4 to V2.J33.57.
Попробовал залить Custom HID USB Device. При BOOT0=0 находит в диспетчере устройств, показывает в HID-устройствах, корректно отображает VID и PID. Но стоит поставить BOOT0=1, как тишина. Никакой реакции, в диспетчере устройств тоже
За счет технических и конструктивных решений однокомпонентные винтовые SMD-клеммы от TE Connectivity позволяют оптимизировать общий процесс сборки печатной платы. Винтовое исполнение гарантирует устойчивость к различным ударам и вибрациям, обеспечивая надежное соединение при силовых нагрузках.
Попробовал залить Custom HID USB Device. При BOOT0=0 находит в диспетчере устройств, показывает в HID-устройствах, корректно отображает VID и PID. Но стоит поставить BOOT0=1, как тишина. Никакой реакции, в диспетчере устройств тоже
За счет технических и конструктивных решений однокомпонентные винтовые SMD-клеммы от TE Connectivity позволяют оптимизировать общий процесс сборки печатной платы. Винтовое исполнение гарантирует устойчивость к различным ударам и вибрациям, обеспечивая надежное соединение при силовых нагрузках.
Самый недорогой программатор/отладчик ST-Link V2 на примере STM32F103CBT6.
Обязательно меняем провода на короткие
Итак первым делом меняем провода для соединения ST-LINK V2 с STM32F103C8T6 на короткие 10см.
Используем для соединения с STM32F103C8T6 только 4 провода (SWD интерфейс):
Нет SWO трассировки
То есть не выведен отдельный провод PB3 SWO из программатора наружу.
Как обновить внутреннее ПО
через программу ST-LINK Utility
Проверяем сначала связь с контроллером программой ST-LINK Utility:
Обновление внутреннего ПО
Чтобы сделать Firmware Update в программе ST-LINK Utility надо установить перемычку в положение 1 (режим DFU). В результате должно получится примерно так, кнопка Yes активна:
The “Connect Under Reset” option allows to connect to the target using a reset vector catch before executing any instruction. This is useful in many cases like when the target contains a code that disables the JTAG/SWD pins.
Т.е. это похоже когда программа в начале своего исполнения отключает SWD возможности. Понятно отладка тут не будет возможна.
Mode : Hot Plug возможен с Reset Mode : (Software System Reset|Core Reset|Hardware Reset)
Итак режим (Mode) и Reset Mode настраивается именно в ST-Link V2 через Stm32-Link Utility.
В Keil надо соответственно этому указать настройки.
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…
Собственно и все готово.
Загрузка в контроллер…
Подключаем нашу подопытную плату с уже загруженным botloader-ом к USB, предварительно установив перемычки в режим DFU Mode.
Можно проконтролировать появлением STM Device in DFU Mode в списке устройст… запускаем «загружалку».
указываем ей наш dfu файл…
Жмем Upgrade и наблюдаем результат загрузки… для уверенности, жмем проверку.
все удачно… можно запускать…
если ошибка вылезла, значит где-то косяк…
Итак, будем считать что все удачно… переключаем перемыку в режим работы приложения
и наслаждаемся миганием диодика… … Уффф. Столько букоффф. Устал копипастить картинки 🙂