Как запрограммировать STM32 без программатора

   Мало кто знает, а в особенности те, кто только начинает изучать микроконтроллеры STM32, что их можно запрограммировать не имея специального программатора. Необходимо лишь выбрать режим загрузки контроллера через встроенный загрузчик, подключитьcя через UART и записать необходимый код.
   Теперь обо всем подробнее. Большая часть контроллеров STM32 имеет встроенный (нестираемый) загрузчик в специальной области памяти, который работает по протоколам UART, SPI, I2C и CAN. Конечно же проще всего работать через UART, т.к. он есть почти у каждого, кто имеет дела с электроникой, поэтому его и будем рассматривать.
   Выбор области памяти, из которой осуществляется загрузка контроллера осуществляется подачей низкого или высокого уровня на ножки BOOTx (может быть как одна, так и несколько). Подробнее о том, как выбрать загрузчик на конкретном контроллере указано в AN2606. Так же в AN2606 указано, какой интерфейс контроллера можно использовать для программирования. Еще, чтобы записать код в контроллер, потребуется небольшая программка с сайта ST, которая называется STM32 FlashLoader Demonstrator.
   Ну и чтобы понять, как эти знания использовать, запрограммируем плату с STM32F103C8T6B на борту.

STM32F103C8T6 board



   На плате имеются джамперы для установки режима загрузки контроллера. К сожалению они не подписаны, поэтому смотрим на фото выше и устанавливаем их так же. Установка джамперов BOOT0 в "1" и BOOT1 в "0" активируют встроенный загрузчик, как сказано в AN2606. Теперь можно подключить питание, а так же сигнальные линии RX и TX. Не стоит забывать о том, что линии RX и TX подключаются перекрестно:
RX <---> TX
TX <---> RX

UART connection

   Далее запускаем программу FlashLoader Demonstrator. выбираем нужный COM-порт и жмем далее. Если все подключено верно, то получаем сообщение о том, что подключенный контроллер имеет 64 кБ памяти и не имеет защиты от чтения.

FlashLoader Demonstrator

   Жмем далее. Открывается лист с имеющимися в контроллере страницами памяти, он нас не интересует, снова жмем далее. Открывается страница с возможностью выбора действий над контроллером:

  • Erase (стереть)
  • Download to device (загрузить прошивку в МК)
  • Upload from device (считать прошивку из МК)
  • Enable/Disable Flash protection (включить/отключить защиту флеш памяти)
  • Edit option bytes (редактирование защиты памяти)
   Здесь нас интересует загрузка прошивки в МК (Download to device). записывать будем заранее подготовленный hex файл с мигающим светодиодом. Если у Вас нет готового файла прошивки для проверки МК, Вы можете скачать его по ссылке в конце статьи. 
   Жмем на три точки, выбираем наш файл "test_stm.hex", ставим галочку возле "Verify aster download" для проверки правильности загрузки, а так же "Jump to the user program", чтобы МК сразу начал выполнять загруженную программу по окончании процесса загрузки.

FlashLoader Demonstrator



   Нажимаем далее, и видим как происходит процесс загрузки. При успешной загрузке, на зеленой полосе снизу появится надпись "Download operation finished successfully".



   На этом процесс программирования завершен, светодиод мигает. После отключения платы с контроллером от питания или при нажатии кнопки сброса не забудьте переставить джампер BOOT0 в положение "0", иначе МК снова запустит загрузчик, а не Вашу программу!

Hex-файл для проверки: stm32_test.hex

Комментарии

Популярные сообщения из этого блога

Разборка ноутбука Xiaomi Mi notebook pro 15.6 (сушим клавиатуру)

Использование UART + DMA при заранее неизветном количестве принимаемых символов (STM32)