Программирование STM32. Часть 14: Прошиваем STM32 через ST-Link
Допустим, копая просторы Интернета, нашли мы очень интересное электронное устройство на микроконтроллере STM32, причем и все схемы, и прошивка прилагается. Но вот незадача, никогда мы не занимались загрузкой прошивки в STM32, раньше работали только с AVR-ками. Не беда! В этой статье мы разберемся в этом вопросе, ведь загружать готовую прошивку в STM32 не сложнее, чем в старые добрые AVR-ки, а может даже и проще! Итак, поехали! Предыдущая статья здесь, все статьи цикла можно посмотреть тут: https://dimoon.ru/category/obuchalka/stm32f1.
Программатор
В предыдущей части мы познакомились с несколькими вариантами программатора ST-Link. В данном примере в качестве программатора я буду использовать отладочную плату stm32f4discovery, просто потому, что она у меня есть. Для того, чтобы использовать эту отладочную плату в качестве программатора, нужно сделать 2 вещи:
- Снять перемычки, соединяющие линии программирования встроенного ST-Link-а с микроконтроллером, распаянным на плате
- С помощью гребенки, на которую выведена шина SWD, подключить сигнальные линии программатора к внешнему микроконтроллеру
На картинке, приведенной далее, показана распиновка разъема SWD:

На китайских отладочных платах с микроконтроллером stm32f103c8 имеется соответствующий разъем, через который можно загрузить прошивку в МК. Эти платы выглядят примерно так:

Пины на разъеме программирования подписаны как GND, CLK, DIO, 3V3. Соединение с программатором выполняется вот таким образом:
- GND — GND
- CLK — SWCLK
- DIO — SWDIO
У меня макеты выглядят вот так:

В данном случае отладочная плата с stm32f103c8 припаяна к «решету», на котором соединена с остальными компонентами на обратной стороне проводом в изоляции. Таким же проводом выполнено подключение программатора к отладочной плате:

Софт
Перейдем теперь к программной составляющей. Нам понадобится драйвер для программатора и управляющая софтина, через через которую мы будем загружать прошивку в микроконтроллер. Для этого нам нужно на официальном сайте www.st.com скачать пакет STM32 ST-LINK utility. А что нужно сделать перед скачиванием чего-нибудь с www.st.com? Правильно! Надо у них зарегистрироваться.
[Шуточка про «нельзя просто так взять и скачать что-то с st.com»]
Кину ссылку на архив в конце статьи.
Итак, мы добыли архив с пакетом STM32 ST-LINK Utility. После установки подключаем программатор к ПК по USB и подключаем питание к отладочной плате. Если драйвера на программатор не установились автоматически, то идем в диспетчер устройств, там находим наш STM32 STLink, выбираем Обновить драйвер->Выполнить поиск на этом компьютере. После этого все должно заработать. Затем, из меню «Пуск» запускаем программу «STM32 ST-LINK Utility«:

Выглядит интерфейс ST-LINK Utility вот так:

Далее, нам необходимо произвести небольшие настройки. В меню выбираем Target->Settings…

Открывается вот такое окошко:

Выставляем настройки, как на скриншоте и нажимаем OK. После этого программатор автоматически подключится к прошиваемому микроконтроллеру. Пробежимся по кнопкам управления:

«Подключиться к микроконтроллеру» — выполняет подключение программатора к МК. При этом работа прошивки останавливается. После этого можно выполнять дальнейшие манипуляции с flash-памятью МК.
«Отключиться от микроконтроллера» — после того, как мы все сделали, нажимаем на эту кнопку и SL-Link отключается от МК, при этом запускается загруженная во flash-память прошивка.
«Очистить чип» — при нажатии на эту кнопку стирается вся flash-память микроконтроллера. Это необходимо делать перед загрузкой другой прошивки в МК.
Для того, чтобы прошить наш .hex или .bin файл в МК нужно сделать следующее. В меню выбираем Target->Programm…

После этого у нас открывается окошко выбора файла прошивки. Выбираем нужный нам файл, после чего появляется вот такое окно:

Здесь нам нужно нажать Start чтобы запустить процесс. После того, как прошивка была загружена в МК, нажимаем на кнопку «Отключиться от микроконтроллера«.
Те, кто раньше работал с микроконтроллерами AVR знают о такой вещи как фьюз-биты. Если в AVR-ках неправильно их выставить, то прошивка может работать некорректно. Для вас хорошая новость: в STM32 фьюз-битов нет! Достаточно просто залить в МК файл с управляющей программой и все будет работать.
Ну что ж, на этом, пожалуй, закончу, всем кто дочитал, спасибо за внимание Продолжение тут
Ссылки
Драйвер и софт для ST-Link: STM32 ST-LINK utility
Программатор stm32 своими руками.
Самодельная и доступная альтернатива продаваемому программатору от STMicroelectronics. Является выдержкой и компиляцией нескольких статей и схем найденных в интернете. Реализация в минимально возможном форм-факторе.

У любого разработчика встраиваемого софта должен быть программатор для устройств которые он использует. В моём случае микроконтроллеры фирмы STMicroelectronics, а так же Milandr (российские процессоры на ядре ARM).
Покупка данного девайса весьма затратна, особенно если сравнивать с себестоимостью компонентов — печатной платы и радиодеталей.
Решено было сделать программатор самостоятельно. За основу легли схемы отладочных плат для различных МК, в итоге получился полнофункциональный отладочный модуль и не только для stm32, но и для stm8 и даже миландровских чипов (проверено пока только на К1986ВЕ92, но думаю и другие тоже будут шиться и отлаживаться).
- программирование и отладка STM32;
- программирование и отладка STM8;
- программирование и отладка ARM Миландр.
Сам программатор можно рассмотреть на фото выше. Провода растянутые по плате это лишь последующие доработки связанные с отсутствием необходимого светодиода (слева) и с необходимостью программировать платы без подачи на них питания (справа).
Ядром является контроллер stm32f103, который и используется во всех отладочных платах. На его входах и выходах устройства, я имею ввиду разъем для подключения программируемого микроконтроллера, установлены диоды для защиты от статики, диоды выбраны достаточно маленькие, но легко доступные и без особых сложностей впаиваемыми, даже людьми с ослабленным зрением, сам я впрочем и не жалуюсь со своими единичками на обоих глазах.
В качестве разъема для подключения к компьютеру используется microUSB, выбор пал только лишь из-за его современности по сравнению с его мини братом. У меня же самого на плате стоит именно мини, когда собирал заложенного микро не было в наличии.
После сборки и проверки на короткое замыкание подключаем устройство к компьютеру и видим что ничего не происходит, разве что программатор определяется как неизвестное устройство, причина в отсутствии прошивки.
Для обеспечения работы необходимо зашить по в микроконтроллер, для этого нам понадобиться usb-uart переходник, бутлоадер и утилита для прошивки.
Если с утилитой и переходником проблем на возникает, то с загрузчиком все несколько иначе — так как сама прошивка в контроллерах на отладочных платах заблокирована от считывания и вытащить у меня не получилось. Благо живем в современном мире, где есть интернет.
Решение было найдено на одном из многочисленных форумов — бинарник прошивки. Правда была проблема, после прошивки контроллера программатор определялся, но работать не хотел, зато спокойно прошивался через st-link utility, было решено подчистить файл прошивки, удалив все лишнее, оставив только сам загрузчик.
Как можно догадаться все удалось и теперь загрузчик можно взять здесь.
Для заливки используем разъем P1, выводы 3 и 4 которого замыкаем вместе, переводя микроконтроллер в режим загрузки по usart1. Подключаем uart переходники подаем питание на плату программатора, можно через usb разъем.
В утилите выбираем используемый последовательный порт и следуем остальным инструкциям. Этот процесс в картинках описывать нет смысла — все довольно тривиально.
После окончания прошивки отключаем все вспомогательные устройства и подключаем программатор к компьютеру, он должен нормально определиться. Теперь осталось обновить прошивку программатора с помощью st-link utility.
Можно пользоваться и наслаждаться работой собранного собственными руками программатора.
Данный программатор хорошо себя зарекомендовал, на протяжении года пользования. Отлично работал при -40 о С в климатической камере, помогая отлаживать одно из разрабатываемых устройств, а так же дважды посетил вместе со мной Камчатку, где отлично себя чувствовал в суровых климатических условиях.
Для желающих собрать аналогичный программатор:
- Немного истории. K-line адаптер.
- Защита прошивки от считывания.
CDEblog
Блог инженера-схемотехника, конструктора и немного программиста
Программатор ST-LINK V2 для процессоров STM8/STM32 (клон)

ST-LINK V2 это USB программатор/отладчик для процессоров всех серий STM32SWD и STM8SWIM производства компании STMicroelectronics.
Примечание: цвет корпуса может отличаться от представленного на картинке (красный, жёлтый, черный и т.д.)
Особенности
- Поддержка контроллеров STM32 с отладочным интерфейсом SWD
- Поддержка контроллеров STM8 с отладочным интерфейсом SWIM
- Поддерживаемые версии программного обеспечения:
- U XTW LINK ST Utility 2.0 и выше
- STVD 4.2.1 и выше
- STVP 3.2.3 и выше
- IAR EWARM V6.20 или выше
- IAR EWSTM8 V1.30 или выше
- KEIL RVMDK V4.21 или выше
Характеристики
- Процессор: STM32F103C8T6
- Три рабочих интерфейса программатора: JTAG (Joint Test Action Group), SWIM (Single Wire Interface Module) и SWD (Serial Wire Debug)
- Интерфейс подключения: USB 2.0 / 2.54-дюймовые контакты dupont
- Регулировка напряжения в интерфейсе SWIM: 1.65 — 5.5V
- Поддержка разных режимов в интерфейсе SWIM
- низкоскоростных 9.7 Кб/сек
- высокоскоростных 12.8 Кб/сек
Комплектация
- 1 х программатор ST-LINK V2
- 1 х 4p dupont кабель
Рекомендации
Чтобы использовать программатор, необходимо выполнить следующие действия:
- Скачайте и установите драйвера, которые можно найти на официальном сайте производителей микроконтроллеров.
- Скачайте и установите среду для разработки и программирования:
- если Вас интересует внутрисхемная отладка микроконтроллера STM8, воспользуйтесь ST Visual Develop – STVD (версией 4.1.0 или более новой)
- если Вас интересует внутрисхемное программирование микроконтроллера STM8, используйте ST Visual Program – STVP (версию 3.1.0 или более новую)
- если Вас интересует программирование и отладка микроконтроллера STM32, можно применить программы: IAR toolset EWARM (версия 5.30 или более поздние), Atollic toolset TrueSTUDIO (версия 1.0 или более поздние), Keil toolset ARM-MDK (версия 3.3 или более поздние), TASKING или утилиты, скачанные с официальных сайтов
Полезные ссылки
Фотографии


Отзывы и обсуждения
-
Еще нет сообщений. Оставьте свое сообщение первым.
Необходимо быть зарегистрированным или авторизованным пользователям чтобы оставлять сообщения.
РегистрацияКак программировать платы на основе STM32 с помощью утилиты ST-Link?
В этой статье объясняется, как запрограммировать ваше приложение на плату с помощью утилиты ST-Link. Этот метод необходим, если вы компилируете с использованием ARM GCC, но рекомендуется для проектов IAR или Keil.
- STM32F429I-DISCO
- STM324x9I-EVAL
- STM32469I-DISCO
- STM32469I-EVAL
- STM32F746G-DISCO
- STM32756G-EVAL
- STM32F769I-EVAL
- STM32F769-DISCO
ST-Link Utility также может быть использован для программирования пользовательского оборудования с использованием , например ST-Link / V2 программиста .
Генерация Hex-файлов
ST-Link Utility может программировать файлы .hex и .bin. Они автоматически генерируются Make-файлами ARM gcc, поставляемыми с проектом TouchGFX. IAR и Keil IDE настроены для преобразования выходных файлов .elf в файл .hex.
- Для проектов IAR дополнительный вывод преобразуется ( intel extended форматируется) в Debug\Exe\application.hex
- Для проектов Keil выполняется следующий шаг после сборки: в
fromelf —only=ExtFlashSection —bin —output=binary .\Objects\keil5-2.axf
результате получается файл .hex: Objects\keil5-2.hex
Перепрошивка с использованием графического интерфейса ST-Link Utility
Процесс, описанный в этой статье, описывает, как использовать утилиту ST-Link для программирования внутренней и внешней флэш-памяти плат ST. Для внутренней вспышки ST-Link автоматически определит тип подключенного устройства. Однако для внешней вспышки внешний флэш-загрузчик должен быть настроен вручную. ST-Link предлагает поддержку для каждого флэш-чипа на платах, поддерживаемых TouchGFX.
При прошивке двоичного файла с помощью утилиты ST-Link вы должны указать правильный флэш-адрес вручную. Этот адрес должен совпадать с адресом, используемым в скрипте компоновщика. По умолчанию это первый адрес во флэш-памяти. При перепрошивке файла .hex утилита ST-Link найдет правильный адрес в файле .hex.
ST-Link автоматически определит диапазоны памяти для программирования и выберет подходящие флэш-загрузчики для использования, если так настроено, при открытии .hex-файла. В приведенном ниже примере target.hex приложение было открыто в ST-Link, и были обнаружены диапазоны как внутренней, так и внешней флэш-памяти.
[target.hex] opened successfully. Address Ranges [0x08000000 0x08010364] [0x90000000 0x9000CA28]Как упоминалось ранее, внутренняя флэш-память всегда распознается ST-Link для микроконтроллеров STM32, но флэш-загрузчик для диапазонов, начинающихся с 0x90000000, должен быть настроен вручную. В приведенном ниже примере мы настроим внешнюю вспышку для STM32F746G-DISCO платы:
- Выберите « Добавить внешний загрузчик » в меню « Внешний загрузчик ».
- Выберите соответствующий флэш-загрузчик в списке поддерживаемых плат (т.е. MT25QL512A_STM32756G-EVAL для STM32756G-EVAL и N25Q128A_STM32F746G-DISCO для STM32F746G-DISCO ) и выберите Подтвердить .

- Откройте .hex, который вы хотите мигать: диапазоны адресов автоматически определяются ST-Link. Как упоминалось ранее, разные двоичные файлы создаются IAR, Keil и gcc соответственно и могут использоваться ST-Link.
- Выберите « Program » в меню « Target » и начните загрузку.

Ниже приведен полный список внешних флэш-загрузчиков, которые будут использоваться для плат ST, поддерживаемых TouchGFX (ST-Link версия 4.2):
доска Флеш загрузчик STM32F429I-DISCO Только внутренняя вспышка STM324x9I-EVAL M29W128GL_STM324x9I-EVAL STM32469I-DISCO N25Q128A_STM32469I-DISCO STM32469I-EVAL MT25QL512A_STM32469I-EVAL STM32F746G-DISCO N25Q128A_STM32F746G-DISCO STM32756G-EVAL MT25QL512A_STM32756G-EVAL STM32F769I-EVAL MT25QL512A_STM32769I-EVAL STM32F769I-DISCO MX25L512G_STM32769I-DISCO STM32L4R9-EVAL MX25LM51245G_STM32L4R9I-EVAL STM32L4R9-DISCO MX25LM51245G_STM32L4R9I-DISCO Использование Flash make (ST-Link CLI)
Кроме того, вы можете создать и прошить приложение (используя ST-Link CLI) с помощью любой makefile (т.е. app/example/button_example/target/ST/STM32F746G-DISCO/gcc/Makefile ), используя следующую команду:
$ make flashMakefile знает, какую внешнюю флэш-память (см. Таблицу выше) использовать для каждой из поддерживаемых плат ST. ST-LINK имеет встроенную поддержку внутренней вспышки для каждой платы, и вы можете прошить только внутреннюю вспышку, используя следующую команду:
$ make intflashВ некоторых случаях вы не сможете запрограммировать свою доску указанным выше способом из-за следующей ошибки:
STLink USB communication error Error during erase operation.В этом случае вы можете попытаться отключить драйвер устройства USB для этой конкретной платы в диспетчере устройств Windows, чтобы устранить проблему.