Прошивка .hex и .bin файла в STM32

В этом уроке рассмотрим способы загрузки программы в микроконтроллер STM32 из файлов .hex и .bin на примере STM32F103C8T6.

Если вы ведёте разработку программы в специальной среде разработки, например, в STM32CubeIDE, то проблемы загрузить готовую программу на микроконтроллер не существует — это можно сделать из самой среды.

Однако, могут возникнуть определённые обстоятельства, при которых нужно зашить .hex файл вне среды. Например, когда исходников программы нет, а есть только .hex файл, или хочется прошить целую серию плат одной и той же программой, а может быть требуется прошить клон STM32, который не шьётся в среде по какой-то причине (как в случае с китайскими клонами).

Для загрузки программы на микроконтроллер STM32 идеально подойдёт оригинальная программа STM32CubeProgrammer, которая появилась взамен ST-Link Utility.

Подопытные отладочные платы STM32 и программаторы ST-Link V2 всегда можно приобрести в нашем интернет-магазине:

В корзину
В корзину

Приложение STM32CubeProgrammer

Итак, у нас есть .hex или .bin файл, который мы зашьём в микроконтроллер STM32F103C8T6. Запускаем приложение.

Прошивка hex при помощи STM32CubeProgrammer

В левой колонке имеет список инструментов, из которых, впрочем, нам понадобится только вторая Erasing & programming.

В середине находится форма текущего инструмента.

Справа — форма настроек связи с микроконтроллером.

Выбор файла .hex или .bin

Сначала следует выбрать файл, который мы будем загружать на микроконтроллер. Для этого, в левой части экрана открываем вторую сверху вкладку Erasing & Programming. Откроется форма, на которой, кроме всего прочего, будет поле для выбора файла программы.

Прошивка hex при помощи STM32CubeProgrammer

В поле File path указываем полный путь к файлу с расширением .hex или .bin.

Примечание. В случае выбора файла .bin, следует указать адрес начала программы в поле Start address. Например, в STM32F103C8T6 — это 0x8000000.

Ещё из полезного на данной форме:

  • Skip flash erasing before programming — отключает стирание памяти МК перед прошивкой;
  • Verify programming — читает паять МК после прошивки и сверяет с оригиналом на предмет ошибок;
  • Run after programming — автоматически перезагрузит МК и запустит программу.

Раздел Automatic Mode пригодится в случае, когда нужно прошить серию плат не делая дополнительных телодвижений — просто касаемся контактами платы и автоматически начинается загрузка программы! Запуск этого режима осуществляется кнопкой Start automatic mode.

Загрузка программы через ST-Link

ST-Link — это оригинальный программатор от STMicroelectronics. Однако, существует масса аналогов ST-Link, которые хуже или лучше копируют оригинал. В данном примере будем использовать популярный клон ST-Link V2 на базе STM32F103C8T6.

Подключаем к USB порту компьютера программатор ST-Link, к которому присоединён подопытный микроконтроллер. Перемычки BOOT0 и BOOT1 при этом могут быть убраны вовсе.

Сразу после подключения, в правой части экрана появится информация о программаторе ST-Link: серийный номер, режим порта, частота и прочее. Там же есть кнопка Firmware Upgrade для обновления прошивки именно программатора.

Если ничего не появилось, пробуем нажать кнопку обновления списка в поле Serial number.

Затем нажимаем кнопку Connect — она находится слева сверху. Вместе с этим, в таблице появится содержимое памяти контроллера в шестнадцатеричном виде.

Прошивка hex при помощи STM32CubeProgrammer

В консоли появится такой вывод:

00:51:22 : ST-LINK SN  : 48FF6B064982565023120187
00:51:22 : ST-LINK FW : V2J42S7
00:51:22 : Board : --
00:51:22 : Voltage : 3.26V
00:51:22 : SWD freq : 4000 KHz
00:51:22 : Connect mode: Normal
00:51:22 : Reset mode : Hardware reset
00:51:22 : Device ID : 0x410
00:51:22 : Revision ID : Rev X
00:51:22 : Debug in Low Power mode is not supported for this device.
00:51:22 : UPLOADING OPTION BYTES DATA ...
00:51:22 : Bank : 0x00
00:51:22 : Address : 0x4002201c
00:51:22 : Size : 8 Bytes
00:51:22 : Bank : 0x01
00:51:22 : Address : 0x1ffff800
00:51:22 : Size : 16 Bytes
00:51:22 : UPLOADING ...
00:51:22 : Size : 1024 Bytes
00:51:22 : Address : 0x8000000
00:51:22 : Read progress:
00:51:22 : Data read successfully
00:51:22 : Time elapsed during the read operation is: 00:00:00.006

Либо появится какая-нибудь ошибка, например, о том, что ST-Link не увидел микроконтроллер:

Error: No STM32 target found!

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

Теперь жмём кнопку Start Programming на форме Erasing & Programming. Ждём завершения. Готово!

Прошивка hex при помощи STM32CubeProgrammer

В консоли при этом появится такой вывод:

00:36:36 : Memory Programming ...
00:36:36 : Opening and parsing file: cide_led_blink.bin
00:36:36 : File : cide_led_blink.bin
00:36:36 : Size : 4.62 KB
00:36:36 : Address : 0x08000000
00:36:36 : Erasing memory corresponding to segment 0:
00:36:36 : Erasing internal memory sectors [0 4]
00:36:36 : Download in Progress:
00:36:37 : File download complete
00:36:37 : Time elapsed during download operation: 00:00:00.781
00:36:37 : Verifying ...
00:36:37 : Read progress:
00:36:37 : Download verified successfully

Загрузка программы через UART

Для этого варианта понадобится USB-UART преобразователь (подойдет любой: CH340G, CP2102, FT232 и пр.). Подключаем его к микроконтроллеру по схеме:

USB-UARTGnd3V3TXRX
STM32F103C8T6Gnd3V3RX (PA10)TX (PA9)

На микроконтроллере STM32F103C8T6 ставим перемычку на BOOT0. То есть контакт BOOT0 должен быть подтянут к питанию 3.3В. Теперь при запуске МК перейдет в режим загрузчика и будет ждать данных на UART интерфейсе.

Подключаем USB-UART к компьютеру.

В правой колонке STM32CubeProgrammer выбираем режим программирования — UART. Затем в поле Port жмём правую кнопку для обновления списка портов и выбираем нужный. Наконец, жмём кнопку Connect и ждём пока приложение подключится к МК и посмотрит его содержимое.

Прошивка hex при помощи STM32CubeProgrammer - UART

При удачном подключении в консоли появится такой вывод:

00:35:03 : RTS low
00:35:03 : DTR low
00:35:03 : Serial Port COM17 is successfully opened.
00:35:03 : Port configuration: parity = even, baudrate = 115200, data-bit = 8, stop-bit = 1.0, flow-control = off
00:35:03 : Activating device: OK
00:35:03 : Board : --
00:35:03 : Chip ID: 0x410
00:35:03 : BootLoader protocol version: 2.2
00:35:08 : UPLOADING OPTION BYTES DATA ...
00:35:08 : Bank : 0x00
00:35:08 : Address : 0x1ffff800
00:35:08 : Size : 16 Bytes
00:35:08 : UPLOADING ...
00:35:08 : Size : 1024 Bytes
00:35:08 : Address : 0x8000000
00:35:08 : Read progress:
00:35:09 : Data read successfully
00:35:09 : Time elapsed during the read operation is: 00:00:01.313

Жмём кнопку Start Programming и ждём завершения процедуры. Вывод в консоли будет такой же как в случае прошивки через ST-Link.

Загрузка программы через DFU

Данный режим позволяет прошивать микроконтроллер напрямую через USB интерфейс. Как правило, DFU режим поддерживается на аппаратном уровне в ряде микроконтроллеров, например, в STM32F407, STM32F401 и пр. с поддержкой USB OTG. А вот в STM32F103C8T6 аппаратной поддержки DFU как раз нет.

Этот раздел будет дописан позже, на примере платы STM32F401.

Полезные ссылки

Приложение STM32CubeProgrammer

https://download.robotclass.ru/Software/en.stm32cubeprg-win64-v2-16-0.zip


Изменено:

Прошивка .hex и .bin файла в STM32: 2 комментария

  1. Доброго. Скачать напрямую уже нельзя, только через VPN. Так же после прошивки, нужно зайти во вкладку CPU и запустить выполнение, при первом прошивании, МК будет в режиме ожидания

  2. Добрый день.
    После установки «STM32CubeProgrammer», программа не запускается. Вернее запускается с ошибкой «CubeProgrammer_API or one of its dependencies is missing. Please try reinstalling the program or check you java architecture.»
    Windows 7 64bit.
    Судя по ошибке — что то с Java, но что с этим делать не пойму!!!
    Поможет кто?

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

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

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