В этом руководстве (перевод статьи [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.
Программирование микроконтроллеров STM32-это так просто!
Изначально нельзя сказать то же самое про плату 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).
STM32 — программирование для начинающих. Пошагово. CubeMX CubeIDE
Процесс установки загрузчика по шагам:
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 FilesSTMicroelectronicsSTM32CubeSTM32CubeProgrammer».
5. Запустите утилиту STM32CubeProgrammer, выберите COM-порт для подключения (метки 1 и 2 на рисунке ниже). В этом примере показан выбор COM4, но в вашем случае может быть другой номер COM-порта, который был подключен на шаге 2. Оставьте остальные опции по умолчанию и кликните на кнопке Connect (метка 3 на рисунке).
6. В окне будет показан дамп памяти программ FLASH микроконтроллера, начиная с адреса 0x08000000. Кликните на кнопку загрузки файла прошивки, она находится слева (на рисунке ниже она показана красной стрелкой).
7. Отобразится окно диалога «Erasing , см. рисунок ниже. Кнопкой 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ИмяПользователяDocumentsArduinohardware» (здесь вместо ИмяПользователя будет другой каталог, соответствующий имени текущего пользователя операционной системы). Если каталог Arduinohardware не существует, то создайте его.
10. Откройте консоль командной строки с правами администратора, и перейдите в каталог «C:UsersИмяПользователяDocumentsArduinohardwareArduino_STM32driverswin”. Запустите файл 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.
Источник: microsin.net
Программирование ARM-контроллеров STM32 на ядре Cortex-M3. Часть 5. Как залить прошивку в контроллер
Ну, вот мы и дошли до одного из самых интересных этапов, — как же залить в контроллер готовую прошивку и оживить наконец нашу железяку (а также как считать прошивку обратно или защитить её от чтения / перезаписи).
Вообще-то прошивать контроллеры STM32 можно по-разному, но мы рассмотрим самый простой вариант прошивки — через последовательный интерфейс с помощью фирменной утилиты Flash Loader Demonstrator. Эта утилита совершенно бесплатна и её можно скачать как с официального, так и с нашего сайта.
Как мы ранее уже говорили, — в системной области памяти контроллера зашит bootloader. Именно он и позволяет записать прошивку во flash-память через последовательный интерфейс.
Для начала вам нужно скачать и установить себе на компьютер утилиту Flash Loader Demonstrator.
Далее, нужно соединить контроллер с компьютером через UART1. Мой подопытный STM32F103C8T6 имеет 48-выводный корпус, в котором UART1 выведен на ноги 30 (Tx) и 31 (Rx).
Обратите внимание, что в контроллере используется именно UART (причём с уровнями 0/+3,3В), а не RS-232, то есть соединять напрямую выводы контроллера и com-порт компьютера нельзя. Я нашёл выход из этой ситуации в использовании USB-to-COM преобразователя RH-0002 на микросхеме cp2102. Помимо того, что этот преобразователь может использоваться как USB-to-UART с уровнями 0/+3,3 В (его можно разделить на две отдельных части: USB-to-UART и UART-to-RS232), он также позволяет запитать контроллер напряжением 3,3 Вольта (то есть отпадает необходимость во внешнем источнике питания). Вот здесь описано, как собрать преобразователь самостоятельно
Итак, ногу Tx контроллера нужно соединить с ногой Rx преобразователя, а ногу Rx контроллера — с ногой Tx преобразователя. Кроме этого, контроллер нужно запитать и обеспечить нужные уровни на ногах BOOT0 (pin 44), BOOT1 (pin 20). Для запуска bootloadera, который расположен в system memory, ногу BOOT1 нужно подтянуть к «земле», а BOOT0 — к «питанию» (табличка справа).
Подтяжку для BOOT0, BOOT1 лучше делать не жёсткую, а джамперами, чтобы можно было легко выбирать режимы загрузки (например, переключившись после заливки проги в режим загрузки из flash, можно будет эту прогу сразу и потестить).
Схема подключения показана ниже.
Дальше всё просто. Запускаем Flash Loader Demonstrator. Откроется страничка, на которой нужно выбрать com-порт и скорость обмена.
Чётность и количество бит данных уже настроены как надо, скорость можно менять — контроллер в процессе инициализации обмена настраивается на выбранную скорость автоматически, com-порт нужно выбрать тот, который создался при подключении USB-to-COM преобразователя к компьютеру (наш преобразователь создаёт при подключении виртуальный com-порт, полностью имитирующий настоящий аппаратный). После того, как всё настроили — жмём «Next».
О том, что всё нормально и соединиться с контроллером удалось, нам сообщит зелёный сигнал светофора на следующей страничке. Если связь не установится — на эту страничку нас вообще не пустят, сообщив, что контроллер не отвечает.
При установлении связи программа автоматически определит сколько у контроллера flash-памяти и защищена ли эта память от чтения. Нажав кнопку «Remove protection» защиту можно снять, но при этом содержимое флеша будет стёрто (предыдущая записанная туда прошивка уничтожится). Жмём «Next».
В следующем окне нам предлагают выбрать тип программируемого камня (хотя непонятно зачем, — он и так автоматически определяется), а также показывают для нашего камня PID, карту flash-памяти, и версию bootloader-а. Просто жмём «Next».
В следующем окне нужно выбрать, что мы собственно хотим с нашим контроллером делать. Тут возможны следующие варианты: Erase (стереть), Download to device (загрузить в контроллер прошивку), Upload from device (считать прошивку с контроллера), Enable/Disable Flash protection (включить/выключить защиту flash-памяти), Edit option bytes (изменить байты опций).
- Если мы хотим залить прошивку — выбираем Download to device, потом жмём на квадрат с тремя точками и выбираем в проводнике файл с прошивкой, которую надо залить, после чего опять жмём «Next».
- Если мы выберем считывание прошивки, то нажав на квадрат с тремя точками напротив пункта Upload from device нужно указать путь к файлу, в который вы хотите сохранить считанную прошивку (если файл не существует, — вас спросят хотите ли вы его создать).
- Если же нам нужно защитить прошивку от чтения или перезаписи или, наоборот, отменить такую защиту, то ставим галочку напротив Enable/Disable Flash protection и ниже, в выпадающих меню, выбираем, что же именно нужно сделать.
- Если нам нужна более «тонкая настройка» контроллера — выбираем пункт Edit option bytes.
Как я уже говорил, если вы отмените установленную ранее защиту от чтения, то это всё равно не даст вам возможности считать защищённую программу, так как программа после отмены защиты будет попросту стёрта.
Ну да ладно, мы немного отвлеклись. Итак, допустим мы выбрали заливку прошивки в контроллер и нажали «Next».
На следующей странице внизу появится прогресс-бар, в котором будет показан ход выполнения процедуры загрузки. После того, как вся прошивка будет загружена в контроллер, этот прогресс-бар станет зелёным и в нём белыми буквами будет написано: «Download operation finished successfully» (операция загрузки успешно завершена). После этого, можно нажать кнопку «Close» и закрыть Flash Loader Demonstrator
Всё, теперь чтобы залитая программа начала выполняться нам останется только настроить контроллер на загрузку из flash (BOOT0 = 0, BOOT1 — любой уровень) и перезагрузить его.
P.S. Если вы работаете в Keil uVision, то можете прямо в него прописать путь к программе-загрузчику. Для этого нужно выбрать в меню пункт «Flash->Configure Flash Tools…», далее в открывшемся окне на вкладке «Utilities» выбрать пункт «Use External Tool for Flash Programming» и в строке «Command» указать полный путь к утилите «Flash Loader Demonstrator» (тыкаем на три точки справа от строки, в открывшемся проводнике находим и выбираем нужную программу). Всё, теперь прошивку можно заливать в контроллер прямо из среды Keil uVision, выбрав в меню пункт «Flash->Download» (при этом будет автоматически запускаться Flash Loader Demonstrator).
- Часть 1. Установка MDK, создание проекта, основы Keil uVision
- Часть 2. Команды и директивы ассемблера, структура и синтаксис программы. Первая программа для STM32
- Часть 3. Карта памяти контроллеров STM32, методы работы с памятью
- Часть 4. Регистры, старт и режимы работы контроллеров STM32
- Часть 5. Как залить прошивку в контроллер
- Часть 6. Настройка системы тактирования
- Часть 7. Работа с портами ввода-вывода
- Часть 8. Процедуры на ассемблере для STM32
- Часть 9. Система прерываний
- Часть 10. CMSIS, использование стандартных библиотек и функций
- Часть 11. Подключение и использование драйверов из пакета StdPeriph
- Часть 12. Работа с модулями USART и UART.
- Часть 13. Работа с модулями ADC
- Часть 14. Использование DMA
- Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры
- Часть 15. Таймеры. Глава 2 — Таймеры общего назначения TIM9 — TIM14
- Часть 15. Таймеры. Глава 3 — Таймеры общего назначения TIM2 — TIM5
- Часть 15. Таймеры. Глава 4 — Продвинутые таймеры TIM1, TIM8
- Часть 16. Создание устройства USB HID в Keil uVision при помощи библиотечного компонента USB
- Приложение 1. Набор инструкций THUMB-2 и особенности их использования
- Приложение 2. Таблица векторов прерываний для семейств STM32F101, STM32F102, STM32F103
- Приложение 3. Драйвера и функции библиотеки StdPeriph
Понравилась статья? Поделись с друзьями!
Источник: radiohlam.ru
Урок 2. Плата STM32F103C8T6. Загрузка программы во FLASH-память микроконтроллера через системный бутлоадер.
В уроке получим минимальную информацию об отладочной плате STM32F103C8T6. Добавим к плате компоненты необходимые для загрузки программ в микроконтроллер (прошивка FLASH).
В наших уроках будем использовать отладочную плату на базе микроконтроллера STM32F103C8T6.
Часто ее называют ”Blue pill”, в переводе – синяя таблетка или пилюля.
По моей партнерской ссылке плата стоит всего 175 руб.
Технические характеристики платы STM32F103C8T6.
В последующих уроках мы будем подробно изучать функциональные возможности микроконтроллера и платы. Сейчас коротко, только общие характеристики.
Микроконтроллер | STM32F103C8T6, ядро ARM Cotrex M3 |
Число разрядов | 32 бита |
Максимальная частота | 72 мГц |
Объем памяти программ (FLASH) | 64 / 128 кБайт |
Объем памяти данных (RAM) | 20 кБайт |
Выводы | 37 |
Таймеры общего назначения | 3 |
Расширенный таймер с ШИМ управления двигателем | 1 |
Системный таймер | 1 |
Сторожевые таймеры | 2 |
UART | 3 |
SPI | 2 |
I2C | 2 |
CAN | 1 |
USB | 1 |
Контроллеры прямого доступа к памяти | 7 |
АЦП | 2 АЦП, 10 каналов, время преобразования 1 мкс |
Часы реального времени | есть |
Аппаратный модуль расчета CRC | есть |
Напряжение питания микроконтроллера | 2 … 3,6 В |
Напряжение питания платы | 5 В |
Ток потребления | до 50 мА |
Размеры платы | 53 x 22,5 мм |
Выводы микроконтроллера непосредственно соединены с выводами платы.
Сейчас обращаем внимание на следующее:
- Микроконтроллер питается от напряжения 3 В и высокие уровни выходных и входных дискретных сигналов у него тоже 3 В. Но часть выводов, обозначенных на схеме закрашенной точкой, допускают при использовании в качестве входов подключение сигналов с уровнями 5 В. Так называемые толерантные к 5 В входы. Остальные входы рассчитаны на напряжение не более напряжения питания, обычно 3 В. Повышение этого напряжения свыше 4 В приведет к повреждению микроконтроллера.
- При использовании в качестве выходов, выводы микроконтроллера допускают вытекающий и втекающий ток не более 20 мА. Рекомендуется не более 8 мА. Но 3 вывода, отмеченные восклицательным знаком, могут быть использованы только в схемах с втекающим током и не более 3 мА.
- К выводу PC13 подключен светодиод общего назначения. Светится он при низком уровне сигнала.
Система питания платы.
Схема цепей питания выглядит так.
Узел вырабатывает напряжение 3,3 В, необходимое для питания микроконтроллера. Используется стабилизатор XC6204.
Он получает питание 5 В либо с USB порта, либо с вывода платы 5 V. Эти цепи соединены непосредственно без защитного диода. Поэтому использовать плату с одновременным питанием от этих двух источников нельзя.
Ток потребления микроконтроллера зависит от частоты тактирования и использования периферийных устройств.
Частота, мГц | Ток потребления, мА | |
Все периферийные устройства включены | 72 | 50 |
48 | 36 | |
36 | 29 | |
24 | 20 | |
16 | 15 | |
8 | 9 | |
Все периферийные устройства выключены | 72 | 33 |
48 | 25 | |
36 | 20 | |
24 | 14 | |
16 | 11 | |
8 | 7 |
Я привел эту таблицу, чтобы вы поняли насколько важно выбирать оптимальную частоту тактирования, особенно в приложениях критичных к энергопотреблению. Микроконтроллеры STM32 позволяют это делать гибко и оперативно.
Вот полная принципиальная схема платы.
Загрузка программы в микроконтроллер с помощью системного бутлоадера.
Четырех контактный разъем на торце платы предназначен для загрузки программ с помощью аппаратного программатора, например StLink. Но в микроконтроллере существует программный загрузчик, позволяющий зашить программу через UART 1 (выводы A9 и A10). Он называется системным загрузчиком и зашивается в память микроконтроллера на этапе производства.
За режим работы платы отвечают 2 желтые перемычки.
Это обычный режим работы. При включении или сбросе запускается программа из FLASH.
При таком положении перемычек запускается системный загрузчик. Это режим прошивки FLASH-памяти микроконтроллера.
При таком положении перемычек программа загружается в ОЗУ. Используется на этапе отладки для сохранения ресурса программирования FLASH-памяти.
Соответствие состояния входов BOOT и режимов работы микроконтроллера STM32. Перемычка BOOT0 на рисунках расположена сверху.
BOOT1 | BOOT0 | Режим запуска программы |
Внутренняя FLASH | ||
1 | ||
1 | Системная память | |
1 | 1 | Внутреннее ОЗУ |
Таким образом, процесс программирования через системный бутлоадер выглядит так:
- подключить выводы A9 и A10 к COM порту компьютера;
- установить перемычку BOOT0 в режим запуска из системной памяти;
- сбросить микроконтроллер;
- запустить на компьютере программу прошивки FLASH микроконтроллера;
- вернуть перемычки в состояние запуска программы из FLASH;
- сбросить микроконтроллер.
Во первых в современных компьютерах не часто встречается COM порт. Во вторых слишком много манипуляций с перемычками и сбросом. Утомительное занятие.
Я упростил этот процесс так.
Плату подключил к компьютеру через мост USB-UART. Я использовал PL2303, но можно применить любой другой модуль, даже плату Ардуино со встроенным преобразователем интерфейсов. Например, Arduino Nano. Надо только соединить вход сброса с землей для того, чтобы микроконтроллер не влиял на сигналы преобразователя интерфейса CH340.
Вместо перемычки BOOT0 я установил кнопку. Еще одну кнопку припаял на сигнал сброса. Штатной кнопкой сброса пользоваться неудобно.
Вот моя схема отладочного модуля.
Резистор 10 кОм припаян между выводами трех контактного разъема PLS, установленного вместо перемычки BOOT0.
Питание плата STM32 получает от моста USB-UART. На нем надо установить перемычку питания в положение 5 В.
У меня все это выглядит так.
Пользоваться достаточно удобно. Когда кнопки не нажаты, плата работает в обычном режиме.
- Нажимаю и удерживаю кнопку ПРОШИВКА, кратковременно нажимаю кнопку СБРОС.
- Загружаю программу во FLASH микроконтроллера.
- Отпускаю кнопку ПРОШИВКА.
- Нажимаю кнопку СБРОС.
Все это делается пальцами одной руки.
В следующем уроке будем устанавливать программное обеспечение для разработки приложений STM32, создадим и загрузим в микроконтроллер первую тестовую программу.
Источник: mypractic.ru