Рубрики
Проекты на STM32

Программирование STM32 Blue Pill через USB порт с помощью Arduino IDE

Плата разработки 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.

Необходимые компоненты

  1. Плата разработки STM32F103C8T6 (STM32 Blue Pill) (купить на AliExpress).
  2. Плата FTDI (3.3V) (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Схема проекта

Для программирования платы 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 секунду.

Нажмите кнопку upload в Arduino IDE и ваша программа должна скомпилироваться и начать загружаться в плату. Если все идет так, как надо, то вы должны увидеть примерно следующий экран:

Если программа успешно загружена в плату STM32, то светодиод зеленого цвета на ней начнет мигать с интервалом в 1 секунду. Вы можете самостоятельно увеличить или уменьшить эту задержку мигания. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Теперь вы можете программировать плату STM32 (Blue Pill) также, как и обычные платы Arduino и у вас больше нет необходимости изменять позицию джампера или использовать внешний FTDI программатор для загрузки кода программы в плату.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

40 ответов к “Программирование STM32 Blue Pill через USB порт с помощью Arduino IDE”

если кто еще живой читает эту статью подскажите…
stm32 если программировать в cube mx(ide) можно и нужно настраивать частоты контроллера для быстрой его работы, включения внешних кварцевых резонаторов для более стабильной работы… а вот о такой возможности в arduino ide ни в одной статье не говорится. как быть?

Ну так мы здесь программируем не отдельно микроконтроллер stm32, а плату STM32F103C8. Если вы Arduino IDE настраиваете для работы с данной платой, то все эти параметры настраиваются автоматически для данной платы

Что-то с STM бутлоадером — при попытке записать, он резетит плату и пропадает порт, соответственно «не могу найти порт» и не может записать. зеленый светодиод моргает, как бешеный. Что может быть? Внешнее 5В подключал — не помогло.

Можно попробовать с другого компьютера проделать все это если у вас есть такая возможность. А вы смотрели, может быть в сети есть уже новые более стабильные версии этого загрузчика? Просто на сайте уже очень много статей, я просто физически не успеваю обновлять их все если что то новое по их тематике появляется

Приносим извинения за доставленные неудобства, но в соответствии с Экспортным регламентом Европейского союза 2021/821, Правилами экспортной администрации США (EAR) и другими соответствующими правилами и подзаконными актами ST не уполномочен разрешать загрузку данного программного обеспечения из вашей страны.

Ну что поделать, всем сейчас тяжело. Но многие из этих ограничений в большинстве случаев можно же обойти: использование proxy, vpn и т.д. Вы пока первый кто так категорично отписался об этой статье

Такой вопрос — после такой прошивки будет ли работать отправка данных контроллером в сериал? Как с обычной ардуиной?

Доброго времени суток, огромное спасибо за мануал, но к сожалению он не работает. Все делал по инструкции, проблема такая же как у пользователя REKORD

Подскажите пожалуйста в чем может быть проблема
@Lim_frol — тг.

Добрый вечер. К сожалению я уже не знаю что нового подсказать по этой проблеме. У этой статьи уже очень много просмотров, а о том, что решения из нее не работают, пишете только вы двое. Конечно, я допускаю, что статья могла устареть и поэтому сейчас не работает, но на данный момент времени пока ничего не могу с этим сделать.

На самом первом этапе при выборе COM порта выдает ошибку:
«Не удается открыть com-порт, порт может
использоваться другим приложением»

Был бы премного благодарен за помощь

Причины могут быть разные. Попробуйте сменить USB порт подключения, с помощью диспетчера задач завершить работу всех программ которые могут каким то образом взаимодействовать с COM портами, сменить компьютер, к которому подключаете плату.

Делал абсолютно все вышеперечисленное, но не помогло.
Пришел в решению заказать Arduino pro micro.
Но спасибо за советы.
Хотя был бы благодарен, если бы завершить начатое, незвирая на то, что купил новый контроллер

Ну смена компьютера должна была почти 100% помочь. Нет возможности у знакомых попробовать? Посмотрите как много просмотров у данной статьи и никто больше не отписался о проблеме как у вас. Поэтому тут проблема либо в компьютере, либо контроллер вам попался бракованный

Можем перейти в соц.сеть.
Было бы приятно пообщаться с Вами для решения этой проблемы.
Расскажу так же что у меня за кастом, может интересно будет/
VK — vk.com/cheats_skill
Telegram — @rekord228

Хорошо, завтра попытаюсь написать вам в телеграме

Подскажите почему у меня Maple DFU есть в диспетчере, а COM порта нет. Драйвер порта установил.

А когда какие либо другие устройства подключаете по USB у них видно в диспетчере к какому COM порту они подключены? Попробуйте выбрать Maple DFU в диспетчере и посмотреть информацию по нему. Может там будет номер порта прописан

Порт Ардуины виден,порт FTDI программатора виден, в свойствах MapleDFU написано Port_#0001.Hub_#0004

Ну так вы ее через хаб (концентратор) подключаете?

Если перезагрузить компьютер и заново подключить плату проблема не исчезает? Есть возможность попробовать подключить ее к другому компьютеру?

Компилятор в ардуино ругается на 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

Спасибо за ответ. Скачал, запустил bat. Правда не совсем понял, установилось или нет. В окне пишет что удачно, а всплывающая говорит, что какая-то проблема. Но новый порт при подключении не появляется.
Пробовал ещё другую прошивку заливать в BluePill, hid_generic_pc13.bin и hid_maple_mini.bin тогда стартует прошивка через HID Bootloader 2. И вроде всё прошивается, но в конце выскакивает ошибка, что не может сделать сброс и устройство не работает (зашивал Блинк). И пока не перепрошью его снова через УАРТ оно никак не реагирует.
Может я конечно чего упускаю. Первый раз STM занялся, до этого на ESP8266 всё делал.
И да, забыл ещё упомянуть, что BluePill брал с али. Читаю сейчас, что с китайскими постоянно проблема.

По вашему комментарию видно что вы приобретаете ценный опыт по работе с STM32, хотелось бы вам пожелать дальнейших успехов в этом направлении. ESP8266, ESP32, STM32 BluePill — все это сравнительно недорогие и при этом весьма функциональные устройства, которые по соотношению возможности/цена намного превосходят привычные многим платы Ардуино.

А у меня ESP — это просто песня. Да, с ардуиной дружит, но кроме как моргать СИНИМ глазом… ничего кроме грубых слов! Стоит в скетче поменять № пина — полная нирвана. Заказал другую плату — то же самое. Просто чудеса. А еще сдуру отладочную купил — теперь полкоробки с моей коллекции китайской кибернетики занимают, а выбросить жалко…
Скоро год, как пытаюсь подружить СТМ32 с ардуиной.

От админа: ну, как говорится, дорогу осилит идущий. Я думаю рано или поздно у вас все получится ))

Нет там нифига по 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

я …STM32-master в /hardware ручками закидывал, затем переименовал в arduino_STM32 и всё завелось.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *