DIY Microcontrollers Blog
DIY electronics for each other. Электронные самоделки для всех.
Как запрограммировать STM32 без программатора
- Получить ссылку
- Электронная почта
- Другие приложения
Мало кто знает, а в особенности те, кто только начинает изучать микроконтроллеры STM32, что их можно запрограммировать не имея специального программатора. Необходимо лишь выбрать режим загрузки контроллера через встроенный загрузчик, подключитьcя через UART и записать необходимый код.
Теперь обо всем подробнее. Большая часть контроллеров STM32 имеет встроенный (нестираемый) загрузчик в специальной области памяти, который работает по протоколам UART, SPI, I2C и CAN. Конечно же проще всего работать через UART, т.к. он есть почти у каждого, кто имеет дела с электроникой, поэтому его и будем рассматривать.
Выбор области памяти, из которой осуществляется загрузка контроллера осуществляется подачей низкого или высокого уровня на ножки BOOTx (может быть как одна, так и несколько). Подробнее о том, как выбрать загрузчик на конкретном контроллере указано в AN2606. Так же в AN2606 указано, какой интерфейс контроллера можно использовать для программирования. Еще, чтобы записать код в контроллер, потребуется небольшая программка с сайта ST, которая называется STM32 FlashLoader Demonstrator.
На плате имеются джамперы для установки режима загрузки контроллера. К сожалению они не подписаны, поэтому смотрим на фото выше и устанавливаем их так же. Установка джамперов BOOT0 в «1» и BOOT1 в «0» активируют встроенный загрузчик, как сказано в AN2606. Теперь можно подключить питание, а так же сигнальные линии RX и TX. Не стоит забывать о том, что линии RX и TX подключаются перекрестно:
Далее запускаем программу FlashLoader Demonstrator. выбираем нужный COM-порт и жмем далее. Если все подключено верно, то получаем сообщение о том, что подключенный контроллер имеет 64 кБ памяти и не имеет защиты от чтения.
Жмем далее. Открывается лист с имеющимися в контроллере страницами памяти, он нас не интересует, снова жмем далее. Открывается страница с возможностью выбора действий над контроллером:
- 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», чтобы МК сразу начал выполнять загруженную программу по окончании процесса загрузки.
Нажимаем далее, и видим как происходит процесс загрузки. При успешной загрузке, на зеленой полосе снизу появится надпись «Download operation finished successfully».
На этом процесс программирования завершен, светодиод мигает. После отключения платы с контроллером от питания или при нажатии кнопки сброса не забудьте переставить джампер BOOT0 в положение «0», иначе МК снова запустит загрузчик, а не Вашу программу!
Stm32f103c8t6 программирование через uart
В этом руководстве (перевод статьи [1]) показано, как записать загрузчик USB (USB Bootloader) в память микроконтроллера STM32F103C8T6 платы Blue Pill. С помощью этого загрузчика можно намного удобнее программировать плату Blue Pill Board через её порт USB, без необходимости применения дополнительного внешнего оборудования (такого как отладчик ST-Link или преобразователь интерфейсов USB — TTL UART).
Примечание: настоятельно рекомендуется предварительно ознакомиться с базовым руководством [2], чтобы получить общее понятие о конфигурации, настройках, соединениях платы Blue Pill.
Самая главная киллер-фича платы Arduino UNO (или любых подобных плат Arduino), из-за которой она стала такой популярной — простота программирования. Все, что нужно — просто подключить платку Arduino к компьютеру PC, запустить среду Arduino IDE, выполнить пару простых настроек — и после этого можно сразу погрузиться в мир программирования. Это действительно очень просто, если Вы правильно выбрали в настройках модель платы и правильный порт USB.
Изначально нельзя сказать то же самое про плату STM32F103C8T6 Blue Pill. В руководстве [2] было показано, как программировать обычную плату с микроконтроллером STM32F103C8T6 с помощью дополнительного внешнего адаптера USB — последовательный порт TTL UART. Описанный процесс выгрузки программы через адаптер FTDI не очень сложен, однако чтобы выгрузить программу, нужно каждый раз переключать микроконтроллер в режим программирования через его системный загрузчик (находящийся в ROM), и для нормальной работы нужно переключаться обратно (для чего ножку BOOT0 надо переводить в уровни лог. 1 и лог. 0).
Было бы проще, если использовать штатный microUSB порт платы Blue Pill для программирования. Загрузчик с открытым исходным кодом STM32F103C8T6 USB Bootloader [3] предоставляет такую возможность. С ним можно просто подключить плату Blue Pill через USB, и через него загрузить свою программу прямо из среды Arduino IDE. Как дополнительное преимущество — не придется манипулировать ножкой BOOT0, её можно просто оставить в рабочем режиме.
Для работы нам понадобиться следующее:
• Платка STM32F103C8T6 Blue Pill.
• Преобразователь интерфейсов USB — TTL UART (на чипе FTDI, CH340 или любой другой).
• Несколько соединительных проводов.
• Резистор 1.8 кОм (не обязательно).
• Компьютер PC с установленной системой программирования Arduino IDE
На рисунке ниже показана схема соединений между платой STM32 Blue Pill и преобразователем USB — TTL UART. Она такая же, как была описана в руководстве [2].
Наша задача — записать в память микроконтроллера двоичный код загрузчика [3] с помощью адаптера USB — TTL UART, как было описано в руководстве [2]. Двоичный код загрузчика находится в файле generic_boot20_pc13.bin, который можно загрузить по ссылке [4] (в каталоге binaries можно найти двоичный код загрузчика для многих других плат STM32).
Процесс установки загрузчика по шагам:
1. Выполните необходимые соединения, как показано на рисунке выше. Ножку BOOT0 необходимо перевести в уровень лог. 1, что при включении питания (или при сбросе) переведет микроконтроллер STM32F103C8T6 в режим программирования через его последовательный порт USART (запустится внутренний загрузчик, находящийся в системной памяти ROM микроконтроллера).
Примечание: логические уровни на ножках BOOT0 и BOOT1 переключаются желтыми перемычками. Резистор 1.8 кОм устанавливать не обязательно. Иногда это может понадобиться, при неуверенной работе интерфейса USB, если внутренней подтяжки pull-up не хватает.
2. Подключите к компьютеру адаптер USB — TTL UART, и подайте питание на плату Blue Pill. Питание можно подать через порт microUSB платы Blue Pill, либо так, как показано на рисунке выше — некоторые адаптеры USB — TTL UART выводят на свои контакты напряжение 5V или 3.3V. Запомните, какой номер COM-порта определился на компьютере, в Windows это можно узнать с помощью Диспетчера Устройств.
3. Выберите в каталоге binaries нужный файл загрузчика. Для платки Blue Pill нужен файл прошивки generic_boot20_pc13.bin [4].
Примечание: прошивки для разных плат отличаются в основном только ножкой микроконтроллера, к которой подключен светодиод. У платы Blue Pill это цифровой порт 13 по системе нумерации портов Arduino, что и отражено в имени файла прошивки загрузчика generic_boot20_pc13.bin.
Основные подготовительные работы сделаны. Остается самый важный шаг — выгрузка прошивки загрузчика через адаптер USB — TTL UART. Выгрузить прошивку можно двумя способами — с помощью утилиты STM32CubeProgrammer [5], либо с помощью утилиты STMFlashLoader Demo [6]. И тот и другой способ работают одинаково хорошо, в этой статье описано применение STM32CubeProgrammer.
4. Этот шаг можно пропустить, если утилита STM32CubeProgrammer уже установлена. Загрузите с сайта st.com утилиту STM32CubeProgrammer и установите. Утилита загружается в виде архива наподобие en.stm32cubeprg-win64_v2-7-0.zip (имя зависит от целевой операционной системы и от версии), для загрузки требуется регистрация на сайте st.com (регистрация несложная и бесплатная). Раскройте архив, и запустите находящийся в нем инсталлятор. При установке оставляйте все опции по умолчанию. После установки исполняемый файл утилиты STM32CubeProgrammer.exe будет находиться в папке наподобие «C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer».
5. Запустите утилиту STM32CubeProgrammer, выберите COM-порт для подключения (метки 1 и 2 на рисунке ниже). В этом примере показан выбор COM4, но в вашем случае может быть другой номер COM-порта, который был подключен на шаге 2. Оставьте остальные опции по умолчанию и кликните на кнопке Connect (метка 3 на рисунке).
6. В окне будет показан дамп памяти программ FLASH микроконтроллера, начиная с адреса 0x08000000. Кликните на кнопку загрузки файла прошивки, она находится слева (на рисунке ниже она показана красной стрелкой).
7. Отобразится окно диалога «Erasing & Programming», см. рисунок ниже. Кнопкой Browse (метка 1 на рисунке) выберите файл прошивки generic_boot20_pc13.bin. Убедитесь, что в поле ввода Start address указано значение 0x08000000 (метка 2 на рисунке). Все опции оставьте, как на рисунке, и кликните на кнопку Start Programming (метка 3 на рисунке).
Программа прошивки начнет записываться в память микроконтроллера, начиная с адреса 0x08000000, и через несколько секунд процесс завершится (отобразится сообщение «File download complete»).
8. Закройте утилиту STM32CubeProgrammer, отключите адаптер USB — TTL UART от компьютера. Переставьте перемычку BOOT0 обратно (для уровня лог. 0), после включения питания сразу будет запускаться программа загрузчика.
[Установка необходимых драйверов]9. Перед тем, как продолжить, нужно скачать драйверы. Сначала загрузите ZIP-архив по ссылке [6], это драйверы для Arduino. Распакуйте содержимое архива, и переименуйте распакованную корневую папку как Arduino_STM32. Скопируйте эту папку со всем содержимым в директорию «C:\Users\ИмяПользователя\Documents\Arduino\hardware» (здесь вместо ИмяПользователя будет другой каталог, соответствующий имени текущего пользователя операционной системы). Если каталог Arduino\hardware не существует, то создайте его.
10. Откройте консоль командной строки с правами администратора, и перейдите в каталог «C:\Users\ИмяПользователя\Documents\Arduino\hardware\Arduino_STM32\drivers\win”. Запустите файл install_drivers.bat, это установит Maple DFU Driver и Maple Serial Driver.
После этого запустите файл install_STM_COM_drivers.bat для установки STM Serial Driver.
[Конфигурирование Arduino IDE]11. Если Arduino IDE уже открыта, закройте её, подключите STM32 Blue Pill к компьютеру PC кабелем microUSB, и снова запустите Arduino IDE. В Arduino IDE перейдите в меню Tools и сделайте необходимые изменения в селекторе платы (Board Selector) так, как это было описано в руководстве [2]. Но сейчас необходимо поменять метод выгрузки программы (Upload Method) на «Maple DFU Bootloader 2.0». Остальные настройки будут такими же.
[Загрузка программы]
В качестве простой программы, на которой будем проверять работу сделанных настроек, выберите Blinky Sketch для STM32F103C8T6 Blue Pill Board. Убедитесь что для порта светодиода LED выбран порт PC13, и кликните на кнопку Upload. Программа Blinky Sketch скомпилируется, и через USB-загрузчик [3] будет записана в память микроконтроллера платы.
После загрузки программы светодиод начнет мигать.
1. How to Upload STM32F103C8T6 USB Bootloader? Program STM32 Blue Pill via USB site:electronicshub.org.
2. Getting Started with STM32F103C8T6 Blue Pill site:electronicshub.org.
3. rogerclarkmelbourne / STM32duino-bootloader site:github.com.
4. generic_boot20_pc13.bin — двоичный файл загрузчика для Blue Pill.
5. STM32CubeProgrammer software for all STM32 site:st.com.
6. STMFlashLoader Demo.
7. rogerclarkmelbourne / Arduino_STM32 site:github.com.
8. Program «blue pill» with STM32 Cores in Arduino IDE site:onetransistor.eu.
9. STM32 «Blue Pill» в среде Arduino — использование STM32F103C8T6 в Arduino IDE site:tataranovich.com.