St link is not in dfu mode что делать
Embedded Matters
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.
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 и наблюдаем результат загрузки… для уверенности, жмем проверку.
все удачно… можно запускать…
если ошибка вылезла, значит где-то косяк…
Итак, будем считать что все удачно… переключаем перемыку в режим работы приложения
и наслаждаемся миганием диодика…
…
Уффф. Столько букоффф. Устал копипастить картинки 🙂
ST-Link V2 в маленьком корпусе
Самый недорогой программатор/отладчик 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 надо соответственно этому указать настройки.
Многобукфф
Vladislav’s personal blog site
Как прошить чип STM32
В своей недавней статье я подробно разобрал каким образом можно прошивать программным кодом чипы семейства AVR. Сегодня же я рассмотрю способы, которыми можно прошить чипы семейства STM32. Но, я не буду приводить примеры того, как можно «залить» прошивку в микроконтроллер при помощи шнура от утюга или же варианты сопряжения CentOS установленного на Chromebook и программатора от STMicroelectronics. Пойдем по пути наименьшего сопротивления и используем современный ПК с установленной на него Windows 10 64-х битной редакции. В качестве подопытной, которую будем прошивать, возьмем фирменную плату NUCLEO-F103RB. Плата относится к серии Nucleo-64, хотя сами микроконтроллеры 32-х битные. Вероятно, что цифра 64 используется по количеству выводов чипа микроконтроллера, так как для плат серии Nucleo-64 обычно используются LQFP64 корпуса микросхем.
Тот самый случай, когда за деревьями не видно леса
В платы Nucleo производитель заботливо уместил средство подключения, программирования и отладки, ST-Link. Плата просто подключается USB-кабелем к компьютеру, и если установлены драйвера, то ее можно прошивать новой прошивкой, связаться по последовательному порту и протоколу, а также начать процедуру отладки. И все по одному кабелю. Однако, ST-Link, вместе с USB-портом, выполнены на куске платы, который можно с легкостью удалить, попросту его отломав. Именно так и поступим, дабы приблизить ситуацию к наиболее распространенной, когда у нас нет встроенного программатора. Ведь нам с вами так или иначе приходится сталкиваться с чипами STM32 без каких- либо дополнительных интегрированных инструментов вообще. Но прежде, чем переходить к практике по прошивке необходимо разобраться в теории, точнее в теории управлением чипами семейства STM32.
Итак, согласно спецификации, чип STM32F103RB обладает целыми тремя коммуникационными протоколами, посредством которых можно взаимодействовать с внутренней памятью с целью внедрения в нее прошивки:
Universal Synchronous and Asynchronous Receiver-Transmitter (USART)
Данный коммуникационный протокол позволяет подключаться к чипу даже обычным терминалом. В минимальной конфигурации для подключения к устройству нужен всего один провод. В этом случае данные будут отправляться только в одном направлении. Либо на устройство, либо с устройства. Но все же рекомендуется применять как минимум трехпроводную схему подключения: GND, TX, RX. Для подключения с целью прошивки необходимо использовать только USART1.
На чипе STM32F103RB USART1 располагается на следующих выводах:
При подключении к USART следует помнить, что чипы семейства STM32 работают на напряжении 3.3 В и не стоит подключаться к ним переходниками с напряжением в 5 вольт.
Joint Test Action Group (JTAG)
JTAG — весьма популярный интерфейс, ставший промышленным стандартом. Интерфейс применяется для подключения к сложным интегральным схемам с целью тестирования и отладки. В том числе, при помощи данного интерфейса можно осуществлять заливку прошивок в чипы STM32.
На чипе STM32F103RB JTAG-интерфейс выведен на следующие позиции:
Для функционирования коммуникации с чипом достаточно подключить только четыре первых позиции, но для большей гибкости, особенно в сложных случаях рекомендуется так же использование JNTRST.
Single Wire Interface Module (SWIM), Serial Wire Debugging (SWD) и ST-LINK
Фирма ST весьма крупная, на начало 2020 в ней работало более 40 тысяч человек. Это очень много и управлять такой махиной без бюрократического подхода просто невозможно. Поэтому в недрах ST периодически рождаются и формируются различные экосистемы. Экосистема STM32 не стала исключением. Она росла, развивалась до того момента, пока разобраться в нагромождении аббревиатур, названий, интерфейсов, их групп и прочего стало очень не просто. Но возможно. Аббревиатурой SWIM, как правило именуют сразу три сущности: кабель, технологию подключения по одному проводу и аппаратный модуль, обеспечивающий подобное подключение. SWD — означает технологию отладки при использовании последовательного подключения. При чтении литературы и форумов по STM32 можно так же натолкнуться на сокращения типа SWO вкупе с SWV.
SWO это Single wire output, т.е. технология позволяющая по одному проводу выдавать из чипа какую-то информацию. Как правило она используется для отладки, когда разработчики не желают использовать обычные UART для ее вывода, что весьма полезно, так как в любой момент можно подключиться к работающему устройству и начать получать отладочную информацию. Получать и просматривать информацию можно посредством Serial Wire Viewer (SWV). По сути, обычным терминалом с дополнительными функциями. Выдача информации осуществляется только при использовании режима SWD и доступна на микропроцессорах начиная с Cortex-M3.
И подбираясь к самому интересному, хочется отметить, что под наименованием ST-LINK кроется не только комплекс технологий, объединяющих SWIM, SWD, SWO и тому подобное, но еще и программное обеспечение, которое реализует весь набор практик и интерфейсов.
Для подключения ST-LINK на STM32F103RB задействованы следующие выводы:
Для работы через SWIM/SWD нужно-то всего два проводка, не забываем про обязательное соединение земли по всем подключенным устройствам. TRACESWO можно не подключать, особенно если данной функцией вы не пользуетесь, да и для отладки она, а не для загрузки прошивки.
Аппаратное обеспечение
Для работы с STM32 разработано и выпущено в свет великое множество различных аппаратных модулей, вот лишь самые популярные из них:
К сожалению, у меня нет на руках ни J-Link, ни тем более Black Magic Probe, поэтому в качестве аппаратных устройств рассмотрим только USART и ST-Link.
ST-Link великий и ужасный
Когда кто-то упоминает устройство ST-Link, то скорее всего имеет ввиду китайский аналог под кодовым названием ST-Link V2 Mini. Небольшой USB-свисточек в цветастом корпусе с десятипиновым разъемом IDC. Именно такой и будем рассматривать далее. Стоят подобные устройства более, чем доступно, работают отменно, подключаются и к семейству STM8, и к семейству STM32. Но прежде пробежимся по версиям ST-Link, ведь ST-Link V2 означает вторую версию устройства.
На начало 2020 актуальны следующие аппаратные версии ST-Link:
Производят ST-Link V2 Mini в массовом порядке все, кому не лень. А не лень в первую очередь нашим китайским друзьям. Вот и поставляют они универсальные отладчики-программаторы в невероятных количествах на мировой рынок. И это хорошо, ведь благодаря массовому выпуску и конкуренции есть возможность приобрести программатор за очень небольшие средства. Да, он не самой последней версии, но работать с ним можно. Нужно только разобраться как.
Типичные представители китайских ST-Link V2 Mini
На свои устройства, заботливые производители из далекой и большой страны, предусмотрительно наносят распиновку выходов. И делают они это совершенно верно, так как никакой инструкции к устройству не прилагается. Однако, если покопаться в сети, то можно обнаружить, что существует несколько вариантов реализации вывода на китайских ST-Link V2 Mini, поэтому стоит обратить внимание на выводы, при подключении нового устройства.
При первом знакомстве с ST-Link V2 Mini у меня возникло затруднение в плане определение выводов на программаторе. Да, они подписаны и пронумерованы на корпусе, но на самом разъеме кроме ключа нет ничего. Поэтому пришлось повозиться с определением, где первый «шпынек», а где второй и все последующие.
Распиновка у моего ST-Link v2 Mini
Если подключить ST-Link V2 Mini к ПК под управлением Windows 10, то система автоматически найдет драйвер и произведет его установку. Если же драйвер не установился, либо используется версия операционной системы отличная от Win10, то можно поступить двумя путями: а) скачать драйвер с сайта производителя, б) скачать программную оболочку (о них ниже) от STMicroelectronics в поставке которой уже есть драйвер. Хочется сразу предупредить, что скачка любого программного обеспечения от ST возможна только зарегистрированным пользователям. Так компания накапливается данные о своих существующих или потенциальных клиентах.
Чем грозит отсутствие RST на STM32?
У китайских V2 Mini есть еще одна особенность. Поскольку программаторы предназначены как для работы с STM8, так и с STM32, то они содержат сразу выводы и для тех, и для других. Причем выводы на левой части разъема, около ключа, предназначены для подключения STM8 (там задействованы RST и SWIM), а на правой для STM32 (там SWCLK и SWDIO). Поэтому при работе с STM32, даже если подключить на плату вывод с RST, функция аппаратного сброса работать не будет, так как она используется только для семейства чипов STM8, для STM32 применяется другой вывод микрочипа, который не выведен на колодку разъема. Ту же учесть постиг вывод SWO. Увы, за дешевизну и многофункциональность приходится платить. Хотя, некоторые умельцы отключают вывод RST и SWIM и подключают туда верные выводы с нужных ножек микрочипа в программаторе.
В принципе, который так же подтверждается практикой, вполне можно не подключать выход сброса на микроконтроллере к программатору. Чипы STM32 весьма стабильны и если в вашей программе нет переназначений выводов, которые используются для SWD, то переход в режим программирования возможен без аппаратного сброса. Однако, если вы что-то напутали и назначили выводам (в случае STM32F103RB это PA13 и PA14) какие-то функции, то просто так запустить программатор не выйдет.
В чем проблема? Дело в том, что по умолчанию, STM32 сразу же запускает на выполнение программный код пользователя. А поскольку чип работает очень быстро, то программным способом не удается поймать момент между запуском чипа и инициализацией выводов SWD. В этом случае необходимо «нажимать» на сброс собственноручно. Ножку Reset микроконтроллера необходимо соединять с землей, запускать подключение SWD, отпускать Reset. Если наловчиться, то таким образом можно добиться срабатывания 8 или даже 9 раз из 10.
В режиме ручного сброса есть нюанс. А именно нештатный загрузчик (bootloader). Его наличие может несколько облегчить работу по подключению неподключаемого чипа, так как обычно загрузчик ждет некоторое время сигнала через UART о начале загрузки прошивки. Однако, насколько мне известно, свой загрузчик устанавливает только Arduino с ядром Maple. Но данный фреймворк уже не актуален в виду окончания его развития и поддержки.
USART/UART
Для подключения по последовательному протоколу к чипу потребуется обыкновенный конвертер USB2COM (USB2TTL, USB2UART или под любым другим наименованием). Я уже рассматривал несколько вариантов, включая кабели с чипами, для подключения по UART к AVR. Смысл подключения к STM32 ровно такой же. Только в качестве преобразователя интерфейсов под STM32 я приобрел платы от Waveshare на чипе PL2303. Платы простейшие, оборудованные всего четырьмя выводами.
При подключении к ПК, автоматически устанавливаются драйвера и устройство определяется в системе как COM-порт. При подключении адаптера к микроконтроллеру стоит обратить внимание на установленную перемычку. Плата от Waveshare способна работать с двумя напряжениями: 3.3 и 5 вольт. С чипами STM32 необходимо работать только в режиме 3.3 вольта.
Типичные китайские USB2COM свистки
Подключение адаптера к плате примитивное. Соединяем GND, соединяем выводы адаптера и микроконтроллера Rx и Tx перекрестно (Rx одного идет на Tx другого и наоборот). Все, теперь можно работать.
Стоит ли подключать Vcc?
На ST-Link, как и на USB2TTL есть выводы Vcc/Vdd/V+. На них подается постоянное напряжение в 3.3 вольта, родное для большинства чипов STM32. Стоит ли соединять эти выводы между платой микропроцессора и адаптером? В каких-то случаях да, в каких-то случаях нет.
Если вы планируете прошивать (или проводить отладку) платы без подключения внешнего питания, то подключение Vcc от внешнего адаптера (ST-Link или USB2COM) позволит работать с платой в штатном режиме ее микропроцессора. Он будет думать, что все работает так как надо, а вот возможные силовые элементы, например, реле, отвечать на управляющие запросы уже не смогут. Подключать Vcc сразу от ST-Link и от USB2TTL можно только в том случае, если оба устройства подключены к одному ПК.
Если же программируемое устройство работает со своим питанием, то нужды в подключении дополнительного Vcc от ST-Link или же от USB2UART излишне, а в некоторых случаях может приводить и к выходу из строя адаптеров.
Из этого правила есть исключение. Если используется не китайский аналог аппаратного программатора ST-Link, а «родное» устройство, а на плате или у микроконтроллера используется нестандартное питание, то подключение сенсора напряжения с программатора ST-Link желательно. В этом случае будет происходить согласование уровней интерфейса, а плату микроконтроллера придется запитывать от внешнего устройства.
Соединять GND (землю) между всему устройствами — обязательно.
BOOT0/BOOT1
ST позаботились об отказоустойчивости своих чипов. Даже в случае, если нет возможности подключиться к чипу по SWD, у пользователя все еще остается возможность добраться до микроконтроллера и закачать в него обновленную прошивку или стереть всю память. Процедура осуществляется через встроенный загрузчик (bootloader), который вызывается только при особой конфигурации выводов.
Что интересно, загрузить прошивку через загрузчик можно не только через USART (как все обычно привыкли), но и через CAN-шину, USB-DFU (Direct Firmware Upgrade), I2C и SPI протоколы. Другими словами, хоть через что-то, а загрузиться можно. Но таким многообразием способов загрузки оснащены только старшие модели микроконтроллеров семейства STM32, в младших доступен только USART.
Согласно спецификации, получить доступ к загрузчику можно аж 12 различными способами. Но, далеко не все из них доступны на каждом из чипов семейства STM32, да и обычно используется только способ под номером 1. При загрузке микроконтроллера, необходимо на вывод Boot0 микроконтроллера подать высокий уровень (3.3 В), а на вывод Boot1 низкий (0 В, соединить с землей). При выполнении этих двух условий микроконтроллер запустит прошитый на заводе в чип загрузчик.
У чипа STM32F103RB Boot0 выведен на отдельный вывод, а Boot1 совмещен с выводом PB2. Поэтому, по сути, если ничего не подключать к PB2, то можно оперировать только Boot0 (хотя позже мы увидим, что это не совсем так). Подаем на него высокий сигнал при загрузке чипа (по питанию или по сбросу), и попадаем в загрузчик.
На плате Nucleo-F103RB Boot0 выведен на пин с номером 7 morpho-коннектора. Закоротить на 3.3 вольта его можно при помощи перемычки (на плате есть две запасные перемычки на выводах с нижней стороны) установленной на пины 5-7 (пин 5 это Vdd).
Программное обеспечение
Для загрузки прошивки в чипы STM32 и платы на их основе существует необъятное множество программных продуктов, даже сама ST рекомендует набор из пяти бесплатных утилит для загрузки:
STM32CubeProg
Фирменный программатор от ST, скачивается с официального сайта (не забываем про обязательную регистрацию). STM32CubeProg позиционируется как универсальное средство, содержащее в себе всё необходимое, да еще и под несколько платформ (Windows, Linux, MacOS) сразу. STM32CubeProg можно использовать как в виде графической оболочки, так и в виде консольной версии для любителей клавиатуры и черного экрана терминала. Такая неприхотливость и неразборчивость объяснятся просто — оболочка написана на Java, поэтому может портироваться куда угодно (необходимо только изменять небольшое платформозависимое ядро). ST даже не стали разбивать поставку по операционным системам, просто включили все дистрибутивы в один архив, а пользователь сам разберется, что ему нужно. Удобство неимоверное.
При первом подключении ST-Link V2 программатор может определить, что версия прошивки на ST-Link V2 устарела и предложит ее обновить. При желании можно обновить, на китайских устройствах проблем без или после обновления версии прошивки не обнаружено.
Огрызок Nucleo-64 с подключенным St-Link V2 MIni
При подключении ST-Link к плате Nucleo с отломанным ST-Link V2.1 подключаем выходы с китайского ST-Link V2 к коннекторам ST morpho CN7 (гребенка с левой стороны) следующим образом:
После физического подключения на плате Nucleo включается светодиод питания (красный) и начинает выполняться прошивка (если туда зашит блинкер, то будет мигать зеленый светодиод). На ST-Link V2 загорается синий светодиод. После нажатия на кнопку Connect в STM32CubeProgrammer микроконтроллер переводится в режим остановки, считывается некоторый объем памяти и устройство готово к программированию или любым другим операциям. ST-Link V2 в этот момент сигнализирует о режиме остановки попеременным миганием синего и красного светодиодов.
Программатор подключившийся к плате посредством интерфейса ST-Link
Cube Programmer, помимо просто прошивки позволяет выполнять следующие операции:
CubeProg помимо ST-Link может подключаться по UART, USB и OTA (обновление по воздуху). Для начала рассмотрим наиболее интересующий нас вариант подключения посредством ST-Link. При подключении ST-Link V2 к компьютеру и выборе варианта загрузки через ST-Link в окне ST-LINK Configuration отображаются некоторые настройки, которые могут повлиять на способность подключения. Дам пояснения всем им:
Итак, если есть какие-то сложности при подключении программатора к микроконтроллеру, то начинаем играться с настройками. В большинстве случаев помогает переключение в режим Connect Under Reset. А если же проблем нет, то переходим непосредственно к программированию.
Процесс обновления прошивки ST-Link в STM32CubeProg
В качестве программы-примера для прошивки я буду использовать обычный Blink («мигатель») написанной на языке MBED (активно продвигается ST для своих плат). Код программы примитивен, но вполне рабочий (и компилируется всего в 50 Кб):
#include «mbed.h»
DigitalOut myled ( LED1 ); int main () <
while ( 1 ) <
myled = 1 ;
wait ( 1 );
myled = 0 ;
wait ( 1 );
>
>
Итак, программа откомпилирована под мой чип (STM32F103RB), Flash-память контроллера предварительно стерта (дабы убедиться, что новая программа работает, а не старая). Мой компилятор подготовил для меня сразу два файла:
На главной странице CubeProg нажимаем плюсик и выбираем файл с расширением bin для загрузки. Если с файлом все в порядке, то его содержимое (в одном из форматов разрядности) открывается в окне просмотра. Теперь можно подключится к чипу, если чип уже не подключен, и нажимаем Download (тут странно, ведь в нашей культуре загрузка прошивки в чип была бы выгрузкой, Upload). Отключаем программный программатор (Disconnect) и перезагружаем плату. После перезагрузки встроенный светодиод начинает мигать.
Альтернативный способ загрузки прошивки в Cube Prog
Загрузить прошивку в микроконтроллер можно и на вкладке Erasing & Programming. В этом случае есть возможность настроить параметры загрузки. В данном примере я включил галочки проверки загруженного после прошивки, а так же запуск программы на исполнение после завершения загрузки. При этом ST-Link не выходит из режима подключения к плате, а все так же остается подключенным.
Подключаемся через заводской загрузчик и с использованием STM32 Cube Programmer
Как правило, при подключении через ST-Link проблем не возникает. А вот с UART придется совершить больше действий. Для начала следует убедиться, что в системе есть драйвера под USB2COM адаптер. Под чип PL2303 в Win10 обыкновенно все уже имеется сразу, либо скачивается с серверов обновления Microsoft. Но все равно, следует открыть диспетчер оборудования (Device Manager) и убедиться, что устройство работоспособно и ему назначен соответствующий номер порта. В моем случае устройство подключилось на COM4.
Вторым шагом необходимо провести соответствующую коммутация проводников. Подключить Tx на USB2TTL к выводу PA9, Rx к выводу PA10 (при чтении спецификации не лишним будет обратить внимание на то, что USART1 может быть альтернативно переназначен на другую пару выводов, в случае с F103RB это PB6 и PB7). Затем необходимо подключить вывод PB2 (сюда заведен вывод BOOT1 микрочипа) к любому выводу земли. Подключаем вывод BOOT0 к любому выводу 3.3 V, а также не забываем про соединение GND USB-адаптера и платы. Если плата не питается от чего-то еще, то подключаем так же питание 3.3 V с USB-адаптера на, например, Vdd пин Nucleo (кстати, на Nucleo присутствует перемычка, определяющая откуда на микропроцессор будет подавать питание, с Vdd или от USB встроенного ST-Link, при отломанном ST-Link питание в любом случае будет браться с Vdd).
К Nucleo-64 подключены свистки UART и ST-Link
Таким образом мы подключили USB2UART адаптер к USART1 (именно к USART1 подключается загрузчик) платы Nucleo, подали на нее с того же самого адаптера питание и активировали Схему 1 вызова заводского загрузчика (BOOT0 +3,3V; BOOT1 GND). После нажатия на сброс, если все было подключено верно, вместо выполнения кода мигателя (он остался от предыдущих экспериментов с ST-Link) будет исполнен заводской загрузчик. Небольшое замечание: несмотря на то, что по умолчанию BOOT1 (PB2 в случае Nucleo-F103RB) инициализируется на землю, его все равно рекомендуется жестко соединить с GND, в противном случае возможно срабатывание загрузчика «через раз» (при этом пользовательская прошивка так же не будет вызываться, так как BOOT0 не будет передавать ей управление).
STM32 Cube Prog подключенный к плате через заводской загрузчик
Для подключения через USART в CubeProg необходимо выбрать тип подключения UART и выбрать соответствующий COM-порт. В отношении остальных параметров вопрос остается открытым. Дело в том, что заводской загрузчик от ST обладает возможностью автоподстройки под параметры подключения по UART, с другой стороны, на конкретных параметрах и из-за особенностей аппаратного обеспечения может не произойти подключение к загрузчику программатора. Поэтому, если подключение не происходит необходимо в первую очередь поиграться со скоростью подключения, затем с четностью. Если же ничего не помогает, то необходимо еще раз перепроверить все подключения.
После установления связи программатора с платой посредством UART можно пользоваться CubeProgrammer точно так же, как и при подключении через ST-Link. Более того, можно не отключать от платы и сам адаптер ST-Link, на работоспособность его присутствие не влияет. А вот следует ли отключать 3.3 V от BOOT0? Высокий уровень на BOOT0 требуется для инициализации заводского загрузчика. После подключения программатора к чипу, можно отключить BOOT0 от напряжения, тогда при следующей перезагрузке платы управление будет передано пользовательской прошивке, загруженной в чип.
ST-Link Utility
ST-Link Utility, пожалуй, основная и наиболее популярная утилита для загрузки прошивок в STM32 посредством ST-LINK, которой все пользуются. Загружается программный продукт с сайта ST за регистрацию. По набору возможностей и функций ST-Link Utility практически полностью повторяет STM32CubeProg за исключением двух моментов. Utility работает под Windows, Utility может подключаться к платам только посредством SWD или JTAG. Все остальное, начиная от настройки Option Bytes и заканчивая внешними загрузчиками с командной строкой повторяет CubeProg. Да, интерфейс немного отличается, он проще, зато нет никакой Java и в помине.
Место где кроются настройки в ST-Link Utility
Настройки подключения (те самые Connect under reset) скрываются в меню Target, там же кроются пункты про прошивке.
Все готово к заливке прошивки в ST-Link Utility
Итак, пробуем прошить нашу плату через ST-Link V2 и с применением ST-Link Utility. Подключаемся к устройству, очищаем Flash-память, выбираем наш файл firmware.bin и жмем Start. Секунда ожидания и зеленый индикатор на плате замигал. Прошивка проведена удачно.
Несмотря на то, что ST-Link Utility полностью повторяет часть функций CubeProg, многие разработчики используют именно ее, так как считают, что этот продукт более надежен и прост в использовании.
STVP (STM32)
Утилита STVP (ST Visual Programmer) можно скачать с официального сайта ST. Она работает под управлением Windows и поддерживает не только STM32, но и чипы семейства STM8 (если они кому до сих пор интересны). STVP является часть ST MCU Toolset, который помимо самого программатора включает еще среду разработки STVD и ассемблерный линкер.
Вид STVP с подключение к чипу
STVP заточен на ассемблер, на настоящих хардкорщиков, тех кто способен писать программы для микроконтроллеров обращаясь напрямую к регистрам и памяти микроконтроллера. Поэтому он может работать только с файлами hex и s19. Подобного компилятора у меня под рукой не нашлось, поэтому процедуру прошивки пришлось пропустить, тем не менее программатор подключился через китайский ST-Link V2 к моей плате, считал ее память и отобразил все на экране. При наличии желания – связка работоспособная, тем более, что STVP работает не только с ST-Link, но и с RLink, STICE и прочими аппаратными системами ориентированными в основном на семейство STM8.
Flasher-STM32
Flasher-STM32 в девичестве назывался STM32 Flash loader demonstrator и использовался для загрузки демонстрационного мигателя с первыми платами. Загружает прошивки только через UART (он же COM-порт) и присутствует исключительно под Windows. Заполучить прошивальщик можно все там же, с сайта ST.
Основные экраны STM32 Flash Loader
DfuSe
Наименование DfuSe происходит от Device Firmware Upgrade STMicroelectronics Extension. Методика DFU была придумана для еще более простого обновления прошивок на разработческих платах с портом USB. Программа работает только через подключение по USB. Доступны библиотеки для написания собственных приложений по загрузке прошивок в микроконтроллеры.
Основной и единственный экран DfuSe
DfuSe принимает на борт прошивки только в формате DFU. Формат содержит не только саму прошивку как таковую, но еще и манифест или матаданные о том, как эту прошивку применять (или иначе — информацию о плате). И если подключенная плата не является поддерживаемой, то никакой прошивки не произойдет. Тем самым существенно упрощается вся процедура прошивки и уменьшается риск порчи платы при прошивке, но нужна поддержка режима DFU на самой плате, что несколько сокращает популярность программатора.
Интерфейс DfuSe Manager для работы с DFU-файлами
Создаются файлы DFU при помощи комплектной утилиты DFU File Manager. Она может не только запаковать прошивку в файл, но и произвести обратный процесс.
К слову сказать, но мне так и не удалось подключить Nucleo-F103RB к DfuSe, так как USB на плате подключается к ST-Link V2.1, а не напрямую к микроконтроллеру. Для работы же DFU требуется прямое подключение микроконтроллера к USB (с согласованием уровней, разумеется). В таком случае, при наличии соответствующих драйверов (и с задействованием схемы с запуском загрузчика) в операционной системе можно загружать прошивку по обычному USB.
Можно ли использовать плату ST-Link V2.1 от плат Nucleo?
В процессе изысканий способов заливки прошивок разными способами в плату на основе чипа STM32 от платы донора Nucleo-64 была успешно отломана часть с программатором ST-Link версии 2.1 с портом USB. И сразу же возникает вопрос, а нельзя ли эту плату в дальнейшем использовать как удобный программатор? Ведь иметь одно устройство, сочетающее в себе сразу три (ST-Link, Virtual COM и USB Mass Storage) ой как удобно.
Nucleo-64 с подключенным SWD ST-Link V2.1
Давайте попробуем, в качестве бонуса, подключить программатор ST-Link от платы Nucleo обратно к плате Nucleo посредством проводков, словно мы используем произвольный чип STM32 с программатором ST-Link V2.1.
На «огрызке» имеется несколько разъемов и перемычек для подключения чего-либо, вот они:
Итак, для целей использования ST-Link от Nucleo как отдельного программатора ST-Link V2.1 следует:
Соответственно, если все подключено верно, то появляется сразу три возможности:
Вместо заключения
Разработчики STM32 проделали огромную работу, как в плане разработки своих чипов, так и программного обеспечения. Несомненно, что чипы STM32 современны и весьма удобны в работе. Вокруг них собрана невероятная инфраструктура, написаны сотни и тысячи спецификаций, разработаны десятки программных и аппаратных комплексов для работы с микроконтроллерами STM32. Но все это многообразие может вызвать реакцию отторжения у новичка, который может быть просто ошеломлен объемом информации, которую следует переварить, дабы хоть как-то начать ориентироваться в мире STM32. И надеюсь, что мое кратенькое погружение в запутанный мир современной микроэлектроники позволит хоть немного облегчить труд познания.
Казалось бы, что тема прошивки чипов STM32 исчерпана, но приведенные методики хоть и являются массовыми, но сами по себе всего лишь верхушка айсберга, вершина огромного пласта информации. И соответственно присутствует огромное, непаханое поле для творчества.
Опубликовано 31.01.2020 автором kvv в следующих категориях:
Soft железо статья