Прошивка 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. Загрузить в неё вот такой незамысловатый скетч:
Чтобы проверить работает ли ардуина в качестве конвертера, замкните 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.
… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой 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®)
На этом наверно всё.
Всем спасибо
Статья о том, как из платы Blue Pill сделать программатор.
—>
Известит Вас о новых публикациях
Прошивка STM32 через UART при наличии hex-файла
Данная статья вам поможет прошить STM32 через UART, если у вас есть скомпилированный hex-файл прошивки.
Нам понадобится любой USB-UART адаптер из следующих:
Качаем Flash Loader Demonstrator. Подключаем плату к компьютеру через USB-UART адаптер. Схема подключения такая:
Перемычку BOOT0 ставим в положение 1 и нажимаем Reset. Это переключит плату в режим загрузчика. В положении 0 данная перемычка включает режим выполнения пользовательской программы сразу после включения/сброса.
Запускаем программу. Настраиваем параметры порта. Если в процессе загрузки программы возникает ошибка, попробуйте установить меньшую скорость передачи. У меня всё работает и на максимальных скоростях.
Здесь мы видим сообщение, что микросхему успешно удалось прочитать. Если это не удаётся, то значит стоит защита от чтения, которую можно снять соответствующей кнопкой, при этом текущее содержимое будет уничтожено. Функцию защиты можно использовать для защиты программы от копирования. Также здесь мы можем увидеть размер флэш-памяти микроконтроллера.
Здесь мы видим адреса страниц памяти, а также их состояние (защита от чтения/записи). Просто жмём Next.
Вот здесь уже предстоит выбрать, что мы хотим сделать с микроконтроллером, а точнее с его памятью. Можно очистить память (полностью или частично), загрузить программу, выгрузить программу из памяти в файл, установить защиту, либо произвольно отредактировать данные. Выбираем загрузку на устройство (Download to device). Выбираем hex-файл с прошивкой. Галочка «Verify after download» позволяет проверить правильность записи программы. Если же поставить галочку «Jump to the user program», то программа будет выполнена сразу же после загрузки, даже без возвращения перемычки BOOT0 на место и перезагрузки контроллера.
Нажимаем Next и если всё пройдёт успешно, то МК будет прошит.
Обратите внимание, что загрузчик «намертво» прошит в STM32 и стереть его невозможно. Это делает данные микроконтроллеры неубиваемыми в плане прошивки. При неудачной заливке программы, просто необходимо перепрошить её ещё раз.