Прошивка stm32 через UART
![](https://istarik.ru/uploads/images/00/00/01/2018/11/28/03b6f7.png)
Любой микроконтроллер stm32 можно прошивать через USART_1 и другие интерфейсы, подробно смотрите в AN2606. Для этого в МК есть специальный системный загрузчик, который зашивается в System memory (спец. область памяти) на этапе производства, его нельзя удалить или изменить. Это загрузчик инициализируется путём «подтягивания» пина BOOT_0 к «плюсу», после чего он ожидает поступления прошивки.
Через USART можно загружать любые
Описание сделано на примере платы Blue Pill, однако всё сказанное справедливо для любого stm32.
![](http://istarik.ru/uploads/images/00/00/01/2018/10/10/06c8f8.jpg)
Для работы потребуется USB to UART конвертер…
![](http://istarik.ru/uploads/images/00/00/01/2016/01/24/3ad8f5.jpg)
Если такой штуковины нет, то есть два варианта превращения ардуины в конвертер…
превращение
1. Замкнуть RESET на GND (может не прокатить).
2. Загрузить в неё вот такой незамысловатый скетч:
Чтобы проверить работает ли ардуина в качестве конвертера, замкните RX и TX, откройте
и отправьте какие-нибудь символы. Если они вернулись, значит всё работает.
2. Загрузить в неё вот такой незамысловатый скетч:
void setup()
{
pinMode(0, INPUT);
pinMode(1, INPUT);
}
void loop()
{}
Чтобы проверить работает ли ардуина в качестве конвертера, замкните RX и TX, откройте
![](http://istarik.ru/uploads/images/00/00/01/2018/07/27/ae9a3a.png)
Перед прошивкой необходимо подтянуть пин
![](http://istarik.ru/uploads/images/00/00/01/2018/07/26/b317a1.png)
Если плата фирменная
На фирменных платах (Discovery, Nucleo) тоже нужно подтянуть пин BOOT0 к плюсу, но просто так это сделать не получится. Возьмите схему вашей платы и найдите там соответствующие перемычки…
Искать надо что-то вроде этого:
![](//istarik.ru/uploads/images/00/00/01/2018/11/26/7a2292.jpg)
Не помню от какой платы эта схема, но суть такая: в данном случае пин BOOT_0 подтянут к «минусу» через резистор R16 и перемычку SB16. Если убрать перемычку SB16, то пин подтянется к «плюсу» через резистор R17 и можно прошивать. После прошивки надо вернуть всё на место.
Перемычка может выглядеть как резистор.
Искать надо что-то вроде этого:
![](http://istarik.ru/uploads/images/00/00/01/2018/11/26/7a2292.jpg)
Не помню от какой платы эта схема, но суть такая: в данном случае пин BOOT_0 подтянут к «минусу» через резистор R16 и перемычку SB16. Если убрать перемычку SB16, то пин подтянется к «плюсу» через резистор R17 и можно прошивать. После прошивки надо вернуть всё на место.
Перемычка может выглядеть как резистор.
Режим системного бутлоадера
Bootloader (загрузчик) – это обычная программа, которая в момент старта МК решает, что должно происходить дальше.
![](//istarik.ru/uploads/images/00/00/01/2018/07/28/75c9b6.png)
Обычный режим, BOOT_0 подтянут к минусу. Как только подаётся питание на плату, сразу же стартует прошитая программа (если она есть конечно).
![](//istarik.ru/uploads/images/00/00/01/2018/07/26/b317a1.png)
Режим «системного bootloader'а», BOOT_0 подтянут к плюсу. Системный bootloader ожидает прошивку — можно загружать в МК всё что угодно через USART_1 или через SWD (ST-Link). В более продвинутых камнях можно прошивать и через другие интерфейсы. См. мануал на свой микроконтроллер.
Системный bootloader зашивается в System memory на этапе производства, его нельзя удалить или изменить.
![](//istarik.ru/uploads/images/00/00/01/2018/07/26/65d2fa.png)
В этом режиме, с помощью программатора, можно заливать прошивку в оперативную память. Это продлевает жизнь Flash-памяти при отладке программ. После обесточивания программа естественно исчезает.
![](http://istarik.ru/uploads/images/00/00/01/2018/07/28/75c9b6.png)
Обычный режим, BOOT_0 подтянут к минусу. Как только подаётся питание на плату, сразу же стартует прошитая программа (если она есть конечно).
![](http://istarik.ru/uploads/images/00/00/01/2018/07/26/b317a1.png)
Режим «системного bootloader'а», BOOT_0 подтянут к плюсу. Системный bootloader ожидает прошивку — можно загружать в МК всё что угодно через USART_1 или через SWD (ST-Link). В более продвинутых камнях можно прошивать и через другие интерфейсы. См. мануал на свой микроконтроллер.
![](http://istarik.ru/uploads/images/00/00/01/2018/07/26/65d2fa.png)
В этом режиме, с помощью программатора, можно заливать прошивку в оперативную память. Это продлевает жизнь Flash-памяти при отладке программ. После обесточивания программа естественно исчезает.
Соединяем конвертер и STM следующим образом…
картинка![](//istarik.ru/uploads/images/00/00/01/2018/07/27/fe9108.png)
![](http://istarik.ru/uploads/images/00/00/01/2018/07/27/fe9108.png)
Конвертер RX <-> PA9 STM
Конвертер TX <-> PA10 STM
Конвертер GND <-> GND STM
… и подключаем конвертер и STM к компьютеру.
Инструкция по прошивке для
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/7465ad.png)
Скачайте архив и распакуйте куда-нибудь.
![](http://istarik.ru/uploads/images/00/00/01/2019/10/17/2fa39b.jpg)
Перейдите в папку Flash Loader Demonstrator и запустите Flash Loader Demonstrator.exe
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/4f044e.png)
Выбираем СОМ-порт конвертера и жмем Next...
WARNING Remove Protection (защита от записи)
Такое сообщение…
![](//istarik.ru/uploads/images/00/00/01/2018/10/21/76bc71.png)
… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой Remove protection и следом нажмите ОК.
![](//istarik.ru/uploads/images/00/00/01/2018/10/21/94ebce.png)
Защита снята.
![](http://istarik.ru/uploads/images/00/00/01/2018/10/21/76bc71.png)
… означает, что плата, залочена. Ничего страшного нет, просто снимите защиту кнопкой Remove protection и следом нажмите ОК.
![](http://istarik.ru/uploads/images/00/00/01/2018/10/21/94ebce.png)
Защита снята.
Если выдаёт ещё какие-то ошибки, то либо не нажали Reset, либо что-то с конвертером.
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/7cb0b0.png)
Если светофор даёт
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/624373.png)
Жмем Next...
![](http://istarik.ru/uploads/images/00/00/01/2018/10/16/d298fe.png)
В пункте Download to device указываем путь к нужному
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/31f5bf.png)
Всё готово, верните джампер в исходное положение и нажмите Reset.
![](http://istarik.ru/uploads/images/00/00/01/2018/07/26/761582.png)
Инструкция по прошивке для
![](http://istarik.ru/uploads/images/00/00/01/2018/07/25/97c431.png)
Скачайте архив и распакуйте куда-нибудь.
Из папки соответствующей вашей ОС скопируйте файл stm32flash в домашнюю папку.
В терминале дайте команду:
./stm32flash -w /home/dima/myfile.bin -v -g 0x0 /dev/ttyUSB0
Название и путь к файлу у вас будет свой. HEX-файлы тоже можно прошивать этой утилитой.
Если будет ругаться на права, тогда дайте команду…
sudo chmod 777 /dev/ttyUSB0
… или запускайте утилиту через
Защита от записи
Если появилось вот такое сообщение…
![](http://istarik.ru/uploads/images/00/00/01/2018/10/23/808765.png)
… тогда дайте по очереди две команды:
./stm32flash -u /dev/ttyUSB0
./stm32flash -k /dev/ttyUSB0
Первая снимает защиту от записи, вторая от чтения.
Если у Вас стоял ардуиновский загрузчик, то он будет затёрт, чтоб его востановить просто залейте описанным выше способом этот файлик. И не забудьте вот про это.
П.С. Все описанные действия можно проделать с помощью фирменной утилиты — STM32CubeProgrammer (Windows®, Linux®, macOS®)
На этом наверно всё.
Всем спасибо
![](https://istarik.ru/uploads/images/00/00/01/2019/10/17/1db9cc.jpg)
Телеграм-чат istarik
Телеграм-чат STM32
Статья о том, как из платы Blue Pill сделать программатор.
![](http://istarik.ru/uploads/images/thnd.png)
- 0
- stD
102786
Поддержать автора
Комментарии (0)