В этом уроке рассмотрим способы загрузки программы в микроконтроллер STM32 из файлов .hex и .bin на примере STM32F103C8T6.
Если вы ведёте разработку программы в специальной среде разработки, например, в STM32CubeIDE, то проблемы загрузить готовую программу на микроконтроллер не существует — это можно сделать из самой среды.
Однако, могут возникнуть определённые обстоятельства, при которых нужно зашить .hex файл вне среды. Например, когда исходников программы нет, а есть только .hex файл, или хочется прошить целую серию плат одной и той же программой, а может быть требуется прошить клон STM32, который не шьётся в среде по какой-то причине (как в случае с китайскими клонами).
Для загрузки программы на микроконтроллер STM32 идеально подойдёт оригинальная программа STM32CubeProgrammer, которая появилась взамен ST-Link Utility.
Подопытные отладочные платы STM32 и программаторы ST-Link V2 всегда можно приобрести в нашем интернет-магазине:
Приложение STM32CubeProgrammer
Итак, у нас есть .hex или .bin файл, который мы зашьём в микроконтроллер STM32F103C8T6. Запускаем приложение.
В левой колонке имеет список инструментов, из которых, впрочем, нам понадобится только вторая Erasing & programming.
В середине находится форма текущего инструмента.
Справа — форма настроек связи с микроконтроллером.
Выбор файла .hex или .bin
Сначала следует выбрать файл, который мы будем загружать на микроконтроллер. Для этого, в левой части экрана открываем вторую сверху вкладку Erasing & Programming. Откроется форма, на которой, кроме всего прочего, будет поле для выбора файла программы.
В поле 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 — она находится слева сверху. Вместе с этим, в таблице появится содержимое памяти контроллера в шестнадцатеричном виде.
В консоли появится такой вывод:
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. Ждём завершения. Готово!
В консоли при этом появится такой вывод:
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-UART | Gnd | 3V3 | TX | RX |
STM32F103C8T6 | Gnd | 3V3 | RX (PA10) | TX (PA9) |
На микроконтроллере STM32F103C8T6 ставим перемычку на BOOT0. То есть контакт BOOT0 должен быть подтянут к питанию 3.3В. Теперь при запуске МК перейдет в режим загрузчика и будет ждать данных на UART интерфейсе.
Подключаем USB-UART к компьютеру.
В правой колонке STM32CubeProgrammer выбираем режим программирования — UART. Затем в поле Port жмём правую кнопку для обновления списка портов и выбираем нужный. Наконец, жмём кнопку Connect и ждём пока приложение подключится к МК и посмотрит его содержимое.
При удачном подключении в консоли появится такой вывод:
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
Доброго. Скачать напрямую уже нельзя, только через VPN. Так же после прошивки, нужно зайти во вкладку CPU и запустить выполнение, при первом прошивании, МК будет в режиме ожидания
Добрый день.
После установки «STM32CubeProgrammer», программа не запускается. Вернее запускается с ошибкой «CubeProgrammer_API or one of its dependencies is missing. Please try reinstalling the program or check you java architecture.»
Windows 7 64bit.
Судя по ошибке — что то с Java, но что с этим делать не пойму!!!
Поможет кто?