Плата разработки STM32F103C8, также известная как STM32 Blue Pill ("синяя таблетка"), отличается невысокой стоимостью и хорошей производительностью благодаря наличию в ее составе микропроцессора на основе архитектуры ARM Cortex M3. Также ее существенным достоинством является возможность ее программирования с помощью Arduino IDE, что делает ее исключительно удобной для всех радиолюбителей, знакомых с платформой Arduino.
В предыдущей статье на нашем сайте мы рассмотрели основы работы с платой STM32 Blue Pill и ее программирование с помощью Arduino IDE. Но у той статьи есть один существенный недостаток – для программирования платы STM32 Blue Pill нам приходилось использовать FTDI программатор и необходимо было переключать джампер boot 0 между режимами программирования и работы платы, что было достаточно неудобно. При этом порт mini-USB в составе платы STM32 Blue Pill совершенно не использовался.
В данной статье для загрузки программы в плату STM32F103C8 через USB порт мы будем использовать загрузчик, разработанный компанией LeafLabs для плат Maple mini. Данный загрузчик можно записать в плату STM32 в качестве прошивки, после чего мы сможем использовать USB порт платы STM32 для загрузки в нее программ как это делается для большинства плат Arduino.
Примечание: на момент публикации оригинала данной статьи (ссылка на оригинал приведена в конце статьи) данный загрузчик был еще экспериментальным и сейчас, возможно, существуют уже более "стабильные" загрузчики для решения задачи загрузки программ в плату STM32F103C8.
Необходимые компоненты
- Плата разработки STM32F103C8T6 (STM32 Blue Pill) (купить на AliExpress).
- Плата FTDI (3.3V) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Схема проекта
Для программирования платы STM32 Blue Pill непосредственно через USB порт нам сначала необходимо загрузить в нее программу (загрузчик) Maple boot loader. Для этого нам необходимо использовать FTDI программатор, подключенный к контактам Rx и Tx платы STM32 как показано на следующем рисунке.
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Убедитесь в том, что перед записью в плату загрузчика (boot loader) джампер boot 0 на плате установлен в положение 1 (режим программирования). Когда загрузчик будет загружен в плату этот джампер можно будет вернуть в исходное положение (рабочий режим).
Загрузка Maple Boot loader в плату разработки STM32
Подключите FTDI программатор к плате STM32 как показано на рисунке выше и выполните следующую последовательность шагов.
Шаг 1. Скачайте бинарный файл (bin file) загрузчика с репозитория github.
Шаг 2. Далее нам необходимо скачать и установить программное обеспечение STM Flash loader чтобы загрузить скачанный бинарный файл в плату STM32. Для этого перейдите по данной ссылке, открывшуюся страницу пролистайте вниз и там нажмите на get software.
Шаг 3. Для скачивания этого программного обеспечения вам необходимо будет ввести свой E-mail – на него будет выслана ссылка для скачивания программного обеспечения. По указанной ссылке вы снова перейдете на данный веб-сайт, на котором вам снова необходимо будет нажать на get software, после чего начнется процесс скачивания. Он будет не очень быстрым, поэтому придется немного подождать.
Иногда данное письмо попадает в каталог вашей почты со спамом, поэтому проверьте и его на наличие данного письма.
Шаг 4. После того как вы скачали и установили программное обеспечение убедитесь что ваша плата STM32 подключена к компьютеру с помощью FTDI программатора. После этого запустите на выполнение установленный STM Flash loader. Он автоматически обнаружит COM порт, к которому произошло подключение нашей платы. В нашем случае это COM4. Остальные настройки оставьте без изменения как показано на следующем рисунке.
Шаг 5. Нажмите на кнопку Next дважды и STM Flash loader автоматически определит и выведет на экран характеристики вашей платы как показано на следующем рисунке. В нашем случае тип платы оказался STM32F1 с объемом флэш памяти 128 Кбайт.
Шаг 6. Выберите пункт Download to device и укажите местоположение вашего бинарного файла с загрузчиком (который мы скачали на 1-м шаге). Нажмите на next.
Шаг 7. STM Flash loader скачает ряд необходимых файлов как показано на рисунке ниже и начнется процесс загрузки прошивки.
Шаг 8. После того как процесс загрузки прошивки успешно завершится, мы увидим экран, показанный на рисунке ниже. Нажмите на close и выйдите из приложения. Таким образом, мы успешно загрузили в плату STM32 загрузчик Arduino. Теперь нам необходимо подготовить Arduino IDE для работы с платой STM32.
Подготовка Arduino IDE для работы с платой STM32
Для этого выполните следующую последовательность шагов.
Шаг 1. Если у вас еще не установлена Arduino IDE, то скачайте и установите ее по этой ссылке. Убедитесь, что в процессе ее установки вы выбрали правильную операционную систему.
Шаг 2. После установки Arduino IDE нам необходимо скачать и установить в нее пакеты для работы с платой STM32. Для этого в Arduino IDE откройте пункт меню File -> Preferences.
Шаг 3. Откроется новое диалоговое окно. В данном окне в поле additional Boards Manager URL вставьте следующую ссылку:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
Затем нажмите OK.
Шаг 4. После этого откройте пункт меню Tool -> Boards -> Board Manager. Откройте окно менеджера плат, в нем выполните поиск “STM32F1” и установите найденный пакет.
Шаг 5. После того как пакет будет установлен откройте каталог C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\drivers\win, в котором вы найдете установочные файлы install_drivers.bat и install_STM_COM_drivers.bat.
Шаг 6. Установите оба этих bat файла. В результате вы увидите DOS экраны как показано на следующем рисунке.
Теперь Arduino IDE подготовлена к программированию платы STM32 (Blue Pill) и необходимые драйверы для этого установлены.
Программирование платы STM32 (Blue Pill) через USB порт
Отключите от платы STM32 FTDI программатор. Подключите плату к компьютеру через порт micro-USB как показано на рисунке ниже. Убедитесь что джампер 0 находится в положении 0 (рабочий режим). Теперь, при программировании платы STM32 через USB порт у нас нет необходимости переключать джампер 0 между положениями 0 и 1 для загрузки программы в плату и ее запуска на выполнение.
В этом случае ваш компьютер должен обнаружить подключенную плату STM32 самостоятельно (автоматически). Подождите немного пока для работы с ней установятся необходимые драйверы. Затем откройте диспетчер устройств и посмотрите к какому COM порту подключилась ваша плата. В нашем случае она подключилась к порту COM8 под именем Maple Mini.
Затем в Arduino IDE откройте пункт меню Tools, пролистайте его вниз и в нем найдите плату Generic STM32F103C series как показано на рисунке ниже. Убедитесь, что выбран вариант 64k Flash type, скорость CPU 72 МГц и измените метод загрузки на STM32duino Bootloader. Также выберите правильный COM порт в соответствии с тем, который вы определили в диспетчере устройств.
После осуществления всех этих настроек проверьте правый нижний угол Arduino IDE – в нем вы должны увидеть произведенные настройки.
Теперь Arduino IDE готова к программированию платы разработки STM32 Blue Pill. Загрузим в нее стандартный пример программы мигания светодиодом.
В этом примере программы нам необходимо сделать небольшие изменения. В программе по умолчанию используется контакт PB1 для управления встроенным светодиодом, в нашей же плате встроенный светодиод подключен к контакту PC13 – этот момент необходимо изменить в программе. Полный исправленный код программы приведен в конце данной статьи.
Светодиод в представленном примере будет мигать с интервалом в 1 секунду.
1 2 3 4 |
digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(PC13, LOW); // turn the LED off by making the voltage low delay(1000); // wait for a second |
Нажмите кнопку upload в Arduino IDE и ваша программа должна скомпилироваться и начать загружаться в плату. Если все идет так, как надо, то вы должны увидеть примерно следующий экран:
Если программа успешно загружена в плату STM32, то светодиод зеленого цвета на ней начнет мигать с интервалом в 1 секунду. Вы можете самостоятельно увеличить или уменьшить эту задержку мигания. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Теперь вы можете программировать плату STM32 (Blue Pill) также, как и обычные платы Arduino и у вас больше нет необходимости изменять позицию джампера или использовать внешний FTDI программатор для загрузки кода программы в плату.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 |
void setup() { // initialize digital pin PC13 as an output (устанавливаем режим работы контакта PC13 на вывод данных) pinMode(PC13, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level) (включаем светодиод) delay(1000); // wait for a second (ждем секунду) digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW (выключаем светодиод) delay(1000); // wait for a second (ждем секунду) } |
Компилятор в ардуино ругается на PC13 в коде Blink: /var/folders/88/vzby92092n582qfcrn4b001h0000gp/T/arduino_modified_sketch_671900/Blink.ino: In function 'void setup()':
Blink:23:11: error: 'PC13' was not declared in this scope
pinMode(PC13, OUTPUT);
^
Не подскажете, почему это может быть?
Ну скорее всего у вас модификация платы какая то другая и у нее нет контакта PC13 - вам необходимо в программе изменить имя этого контакта на то, к которому подключен встроенный светодиод в вашей плате - про этот момент написано в статье (там, где описание программы идет).
Молодец..., все работает.
Спасибо что оценили мой труд
Всё понял - библиотеку добавил и всё появилось...
Мы рады что у вас получилось. Дальнейших вам успехов
А какую библиотеку?
У меня та же самая проблема. Нет директории Arduino_STM32-master
В менеджере плат установил STM32F1xx/GD32F1xx boards by stm32duino версия 2022.9.26
Если она у вас автоматом не установилась попробуйте вот эту библиотеку - https://github.com/ynkady/Arduino_STM32-master. Ну или другую аналогичную набрав в поисковике "Arduino STM32 master"
Спасибо за ответ. Скачал, запустил bat. Правда не совсем понял, установилось или нет. В окне пишет что удачно, а всплывающая говорит, что какая-то проблема. Но новый порт при подключении не появляется.
Пробовал ещё другую прошивку заливать в BluePill, hid_generic_pc13.bin и hid_maple_mini.bin тогда стартует прошивка через HID Bootloader 2. И вроде всё прошивается, но в конце выскакивает ошибка, что не может сделать сброс и устройство не работает (зашивал Блинк). И пока не перепрошью его снова через УАРТ оно никак не реагирует.
Может я конечно чего упускаю. Первый раз STM занялся, до этого на ESP8266 всё делал.
И да, забыл ещё упомянуть, что BluePill брал с али. Читаю сейчас, что с китайскими постоянно проблема.
По вашему комментарию видно что вы приобретаете ценный опыт по работе с STM32, хотелось бы вам пожелать дальнейших успехов в этом направлении. ESP8266, ESP32, STM32 BluePill - все это сравнительно недорогие и при этом весьма функциональные устройства, которые по соотношению возможности/цена намного превосходят привычные многим платы Ардуино.
Нет там нифига по C:\Program Files(x86)\Arduino\hardware.. только папка arduino и tools никакой Arduino_STM32-master и близко нет, в других местах тоже нет. Версия 1.8.13. Может ещё что то надо ставить?
STM Flash loader по указанной ссылке невозможно скачать даже после регистрации. Есть ли возможность куда-то залить данную программу?
Вы можете набрать в яндексе запрос "stm32 flash loader demonstrator скачать" и скачать по одному из показанных результатов. Вот, к примеру, на гитхаб ссылка - https://github.com/gke/STMFlashLoader/blob/master/stm32-stm8_flash_loader_demo/Flash_Loader_Demonstrator_v2.4.0_Setup.exe?ysclid=lgxkc2x7m0704458889