Прошивка STM32 с помощью STM32 Flash Loader Demonstrator

Ко мне периодически обращаются с вопросом — как прошить STM32?

В STM32 есть встроенный Bootloader, затереть его в отличие от Arduino нельзя, никаких фьюз-битов тоже настраивать не нужно. То есть в любом новом проце с завода есть все, чтобы его прошить через обычный COM порт или USB-UART переходник.
Почему такая простая операция вызывает проблемы, я не знаю, но решил, что проще один раз показать 🙂

Я взял для примера плату из этого поста, но принцип абсолютно одинаковый для любых плат:

  1. пин BOOT0 подтянуть к питанию (3.3V)
  2. подключить USART1 микроконтрллера черех переходник USB-UART к ПК.
  3. запустить Flash Loader Demonstrator и залить прошивку
  4. отключить переходник USB-UART (не обязательно)
  5. подтянуть BOOT0 к земле (нормальное положение)
  6. если питание не отключали, то нажать Reset на плате, если отключали — пора подключить питание

Вот и все операции.
Показываю наглядно:

Надеюсь, теперь у всех все получится 🙂

Прошивка STM32 с помощью STM32 Flash Loader Demonstrator: 29 комментариев

  1. Спасибо. Все получилось, проблема оказалась то ли в винде, то ли в подключении через usb-хаб. На другом компе все заработало с первого раза.

  2. Можно настроить прошивку прямо из эмблокса. Прикрепляю сюда свои настройки и ссылку на ютуб с описанием и демонстрацией работы. Вот это у меня по tools/ configure tools… кнопка Add :

    uart bootloader

    C:\Program Files\STMicroelectronics\Software\Flash Loader Demonstrator\STMFlashLoader.exe

    -c —pn 2 —br 115200 —db 8 —pr EVEN —sb 1 —ec OFF —to 10000 —co ON -Dtr —Hi -Rts —Lo -i STM32_Low-density_16K -e —all -d —fn «${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.HEX»

    Мой вариант для стм32ф103 на 64к(как видите многие параметры опущены, исп. по умолчанию) :
    -c —pn 2 —to 10000 -i STM32_Med-density_64K -e —all -d —fn «${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.HEX»

    C:\Program Files\STMicroelectronics\Software

    Обратите внимание на 3-тий пункт «-c —pn 2» эта двойка — номер ком порта. У вас он дб актуальным. Так же «STM32_Low-density_16K» указывает на тип мк, типы можете найти в папке «C:\Program Files\STMicroelectronics\Software\Flash Loader Demonstrator\Map» тип — название файла без расширения.

    Делал по аналогии с примером из папки с программой «Flash Loader Demonstrator» и с настройками ст линка автора топика.
    http://youtu.be/d2FEyruDSQU

    • Основная проблема с этими COM портами, за которую я их и не люблю — плодятся как кролики, у меня их номера перевалили за 3й десяток и при наличии Bluetooth их одновременно видно до десятка. Каждый раз менять настройки для разных плат и разных USB-UART (у меня их штуки 4 разных) — тоже неудобно. Я поэтому для CodeBlocks и AVR в свое время написал AVRDudeR — GUI с настройками для каждого проекта типа МК, программатора и номера порта, если он требуется. Тут по всей видимости нужно то же самое и сделать выбор COM порта при запуске утилиты без параметров, например.
      Но если под рукой нет никакого отладчика, а прошить надо — вариант.

  3. Добрый вечер!
    Прошиваю плату STM32F103C8 через Loader Demonstrator с помощью «USB 2.0 to TTL UART 6PIN Module Serial Converter CP2102 STC PRGMR» согласно видео данной статьи, проект беру из статьи «http://habrahabr.ru/post/191624/». Всё удачно прошивается, перемычку переставил, пытался далее подключить диоды через резисторы к PB5 и PB6 соответственно, и к земле другим концом, безрезультатно. Пробовал замерить напряжения между портами и землей, около 1 В. Плату саму запитывал через «USB 2.0 to TTL» переходник, так и внешним источником. Подскажите в чём я могу ошибаться?

    • Вариантов довольно много. Основная ошибка — собирают проект не под тот МК или не объявляют какие-то дефайны и в итоге нужные ноги просто не инициализированы. Проверьте, что Target под MD (medium density) собран.

  4. Добрый день. Есть в наличии такая же точно плата и есть stm32f4-discovery, как её подключить, чтобы прошить через swd?

    • Эту плату через разъем JTAG (в нем есть и SWD пины, какие именно — можно посмотреть в документации на ST-Link/v2, там есть распиновка разъема). А STM32F4-Discovery подключается кабелем miniUSB — ST-Link/v2 и снимаются перемычки, соединяющие отладчик с девбордом. Соединять достаточно VDD, SWDIO, SWCLK, GND

  5. Совершенно случайно решил проверить: что если подтянуть BOOT0 к питанию, а BOOT1 к земле — всё заработало! На видео у Вас работает и при BOOT0 к питанию и BOOT1 к питанию — хотя у меня плата точь в точь.

    • Хотя наверно немного разные, так как Вы пишете: «подтянуть BOOT0 к земле (нормальное положение)», у меня в том же положении он к питанию подключается.

  6. заводим такую плату так же как на видео, ни каких откликов, подскажите в чем может быть дело, как проверить на живучесть? если не трудно на почту напишите, может что подскажите почитать?

    • На почту я пишу только в частном коммерческом порядке. Без отладчика или осциллографа особо не проверить никак.

  7. Добрый день, спасибо за статью, весьма полезно. Не подскажите, как решить такаю проблему: пробую прошить stm32f103c8 с помощью Flash Loader Demonstrator через USART1, нормально определяется контроллер, объем памяти, показывает список страниц, все незалоченные, далее выбираю файл, жму next, получаю ошибку «unable to erase flash». Не работает также опция скачать прошивку в файл, выдает ошибку read protection (хотя все страницы незалочены). Не работает и опция erase all. С но теперь уже с ошибкой «write protected» 😉 Платку купил вот такую: http://www.ebay.fr/itm/STM32F103C8T6-ARM-STM32-Developpement-Minimum-Conseil-Module-Pour-Arduino-EB-/231274901824?ssPageName=ADME:L:OC:US:3160 (понравилось то, что ее можно как микросхему dip40 использовать).

    • У вас установлена защита от записи и считывания прошивки. Чтобы ее снять, нужен JTAG или SWD программатор и ST-Link Utility например.

      • Спасибо! Тем не менее, как-то непонятно, читаю AN3155 — USART protocol used in the STM32 bootloader (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00264342.pdf), в нем приведена таблица команд, которые воспринимает бутлоадер через USART1, в частности, указано, что при блокировке чтения доступна команда «Readout Unprotect», которая должна эту блокировку снять (предварительно очистив всю память). Ну ок, пытаюсь посредством Flash Loader Demonstrator отправить эту команду процессору — получаю в ответ «unsupported command». Версия bootloader’а — 2.2, должен поддерживать. Как говорится, не верь глазам своим 😉 К сожалению, у меня нет ни SWD, ни ST-Link, чтобы попробовать с их помощью (заказал, жду). Может быть, все-таки есть возможность победить проблему с помощью USART?

        • Честно говоря не пробовал, т.к. ST-Link у меня есть. Надо будет на досуге поэкспериментировать.

          • Понятно, если появятся новости, отпишите, пож-та. Спасибо!

  8. Подскажите кто нибудь,проблема с синтезатором.Слетела прошивка.Какой прогой прошивальщиком я могу залить bin файл на eeprom s29gl512tfi02.На плате есть jtag разъем.В структурной схеме возле шины txd и rxd есть надпись uart.uart адаптер и прошивка есть.Только проблема с программным обеспечение.Какое использовать под uart адаптер???

  9. Здравствуйте, подскажите пожалуйста, как считать прошивку с контроллера STM32 через UART?

    • На этапе выбора файла прошивки выбрать upload from device и вместо записи Вы считаете прошивку, если она не защищена.
      Вот в этом окне:
      Чтение прошивки STM32 flash loader demonstrator
      Чтение прошивки STM32 Flash Loader Demonstrator

      • Спасибо за ответ, считать прошивку получилось, но после считывания прошивки с помощью USB UART программой Flash loader принтер включается индикатор питания горит на кнопки не реагирует, такое предположение что контроллер висит. Можете подсказать как вывести его из этого состояния. Заранее благодарен.

        • А как принтер связан с прошивкой контроллера? USB UART — это отдельное устройство.
          Если же речь о МК, то нужно просто вернуть BOOT0 в исходное положение не забывать и перезапустить контроллер кнопкой Reset.

          • Контроллер STM32 используется в термо принтере UNS TP61.01, в данном принтере выходят из строя драйвер авто обрезчика бумаги, который выводит из строя контроллер. У меня лежат на полке уже три принтера таких , встал вопрос о их восстановлении, плат в сборе на принтеры нет, вот решил заняться этим вопросом. К контроллеру я подключался внутрисхемно на плате предусмотрены с завода штырьки для подключения. Подключился к этим выводам считал прошивку с рабочего принтера, переключил перемычку BOOT0=0, нажал кнопку Reset, рабочий принтер после считывания более не работает.

  10. Возможно, стоит защита от считывания прошивки? это было бы весьма логично, т.к. прошивка — интеллектуальная собственность. И может быть настроена на самостирание при снятии защиты.

  11. Спасибо. Именно вашей статьи и не хватало. Решил пересесть с Ардуино на STM32 и думал обязательно ли нужен ST-Link.

    • Прошу прощения, работа занимает все время, не всегда удается быстро ответить.
      ST-Link подключается к плате согласно распиновке — JTMS — SWDIO контакт, JTCK — SWCLK, GND и Vcc как обычно.
      Распиновка JTAG:
      JTAG

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.