Прошивка stm32 через UART






Любой микроконтроллер stm32 можно прошивать через USART_1 и другие интерфейсы, подробно смотрите в AN2606. Для этого в МК есть специальный системный загрузчик, который зашивается в System memory (спец. область памяти) на этапе производства, его нельзя удалить или изменить. Это загрузчик инициализируется путём «подтягивания» пина BOOT_0 к «плюсу», после чего он ожидает поступления прошивки.


Через USART можно загружать любые .bin или .hex файлы.


Описание сделано на примере платы Blue Pill, однако всё сказанное справедливо для любого stm32.




Фирменные платы типа Discovery и Nucleo тоже можно прошивать через USART.




Для работы потребуется USB to UART конвертер…



Если такой штуковины нет, то есть два варианта превращения ардуины в конвертер…

превращение
1. Замкнуть RESET на GND (может не прокатить).
2. Загрузить в неё вот такой незамысловатый скетч:

void setup() 
 { 
   pinMode(0, INPUT); 
   pinMode(1, INPUT); 
 } 
 void loop() 
 {} 


Чтобы проверить работает ли ардуина в качестве конвертера, замкните RX и TX, откройте   и отправьте какие-нибудь символы. Если они вернулись, значит всё работает.



Перед прошивкой необходимо подтянуть пин BOOT0 к «плюсу», это переведёт МК в режим «системного бутлоадера». На описываемой плате это осуществляется перестановкой джампера…





Если плата фирменная
На фирменных платах (Discovery, Nucleo) тоже нужно подтянуть пин BOOT0 к плюсу, но просто так это сделать не получится. Возьмите схему вашей платы и найдите там соответствующие перемычки…

Искать надо что-то вроде этого:



Не помню от какой платы эта схема, но суть такая: в данном случае пин BOOT_0 подтянут к «минусу» через резистор R16 и перемычку SB16. Если убрать перемычку SB16, то пин подтянется к «плюсу» через резистор R17 и можно прошивать. После прошивки надо вернуть всё на место.

Перемычка может выглядеть как резистор.


Режим системного бутлоадера
Bootloader (загрузчик) – это обычная программа, которая в момент старта МК решает, что должно происходить дальше.




Обычный режим, BOOT_0 подтянут к минусу. Как только подаётся питание на плату, сразу же стартует прошитая программа (если она есть конечно).





Режим «системного bootloader'а», BOOT_0 подтянут к плюсу. Системный bootloader ожидает прошивку — можно загружать в МК всё что угодно через USART_1 или через SWD (ST-Link). В более продвинутых камнях можно прошивать и через другие интерфейсы. См. мануал на свой микроконтроллер.

Системный bootloader зашивается в System memory на этапе производства, его нельзя удалить или изменить.





В этом режиме, с помощью программатора, можно заливать прошивку в оперативную память. Это продлевает жизнь Flash-памяти при отладке программ. После обесточивания программа естественно исчезает.



Соединяем конвертер и STM следующим образом…

картинка



Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM

… и подключаем конвертер и STM к компьютеру.



Инструкция по прошивке для


Скачайте архив и распакуйте куда-нибудь. Если хотите, можете взять с сайта ST (в самом низу страницы).

Нажмите Reset на плате. Бывает что на описываемой плате, плохо работает кнопочка, поэтому если МК не сбрасывается (не прошивается), тогда кратковременно замкните пин Reset на «землю».



Перейдите в папку Flash Loader Demonstrator и запустите Flash Loader Demonstrator.exe


Выбираем СОМ-порт конвертера и жмем Next...

WARNING Remove Protection (защита от записи)
Такое сообщение…



… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой Remove protection и следом нажмите ОК.



Защита снята.

Если выдаёт ещё какие-то ошибки, то либо не нажали Reset, либо что-то с конвертером.




Если светофор даёт зеленый свет, то смело жмите Next...




Жмем Next...




В пункте Download to device указываем путь к нужному .bin или .hex файлу и жмем Next...





Всё готово, верните джампер в исходное положение и нажмите Reset.






Инструкция по прошивке для


Скачайте архив и распакуйте куда-нибудь.

Из папки соответствующей вашей ОС скопируйте файл stm32flash в домашнюю папку.

Эта утилита есть в репах ubuntu, в других дистрах не знаю, поэтому выкладываю.

Перед прошивкой всегда нажимайте Reset на плате.

В терминале дайте команду:

./stm32flash -w /home/dima/myfile.bin -v -g 0x0 /dev/ttyUSB0

Название и путь к файлу у вас будет свой. HEX-файлы тоже можно прошивать этой утилитой.

Если будет ругаться на права, тогда дайте команду…

sudo chmod 777 /dev/ttyUSB0


… или запускайте утилиту через sudo.


Защита от записи

Если появилось вот такое сообщение…



… тогда дайте по очереди две команды:

./stm32flash -u /dev/ttyUSB0

./stm32flash -k /dev/ttyUSB0


Первая снимает защиту от записи, вторая от чтения.




Если у Вас стоял ардуиновский загрузчик, то он будет затёрт, чтоб его востановить просто залейте описанным выше способом этот файлик. И не забудьте вот про это.


П.С. Все описанные действия можно проделать с помощью фирменной утилиты — STM32CubeProgrammer (Windows®, Linux®, macOS®)



На этом наверно всё.


Всем спасибо


Телеграм-чат istarik

Телеграм-чат STM32


Статья о том, как из платы Blue Pill сделать программатор.



  • 0
  • 98970
Поддержать автора


Telegram-чат istarik

Задать вопрос по статье
Telegram-канал istarik

Известит Вас о новых публикациях






Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.