Найти в Дзене
Твёрдая логика

Arduino не тянет? Переходим на STM32 Blue Pill не выходя из Arduino IDE. Подробный гайд.

Возможно, многие сталкивались с проблемой, что плате от Arduino не хватает вычислительной мощности или оперативной памяти. В этой статье мы разберём безболезненный переход с Arduino (в моём случае Nano) на "Синюю таблетку" от STM32. Важно. Этот способ работает не только для оригинальных STM32, но и для их китайских клонов. Преимущества программирования STM32 в Arduino IDE: Недостатки программирования STM32 в Arduino IDE: Используйте Arduino IDE только, если вы такой же новичок, который не умеет нормально кодить на C Сравним характеристики плат Arduino Nano (UNO) и STM32 Blue Pill. Работает на базе 8-битного микроконтроллера ATmega328P семейства AVR. Некоторые характеристики:  Особенности: Построена на базе микроконтроллера STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Некоторые характеристики:  Особенности: Важно: пины имеют логический уровень 3,3 В, но некоторые совместимы с 5-вольтовыми уровнями, загрузка через порт micro usb или type c не предусмотрена производителем Прежде всего, ко
Оглавление
Arduino Nano vs STM32 Blue Pill
Arduino Nano vs STM32 Blue Pill

Возможно, многие сталкивались с проблемой, что плате от Arduino не хватает вычислительной мощности или оперативной памяти. В этой статье мы разберём безболезненный переход с Arduino (в моём случае Nano) на "Синюю таблетку" от STM32.

Важно. Этот способ работает не только для оригинальных STM32, но и для их китайских клонов.

Преимущества программирования STM32 в Arduino IDE:

  1. Простота программирования платы STM32 на Arduino C++, как и любой другой платы Arduino.
  2. Вы можете ознакомиться с аппаратными возможностями STM32, используя встроенные библиотеки Arduino C++, для создания простых тестовых демонстрационных проектов.

Недостатки программирования STM32 в Arduino IDE:

  1. Меньший контроль над аппаратными периферийными устройствами и их конфигурациями.
  2. Не все аппаратные периферийные устройства STM32 поддерживаются в ядре STM32DUINO.
  3. При использовании Arduino IDE, вам может быть сложнее проводить полноценные сеансы отладки в реальном времени по сравнению с использованием STM32Cube IDE, что может затруднить выявление и устранение ошибок в процессе выполнения программы.

Используйте Arduino IDE только, если вы такой же новичок, который не умеет нормально кодить на C

Сравним характеристики

Сравним характеристики плат Arduino Nano (UNO) и STM32 Blue Pill.

Arduino Nano

Работает на базе 8-битного микроконтроллера ATmega328P семейства AVR. Некоторые характеристики: 

  • Тактовая частота: 16 МГц. 
  • Память: флеш-память — 32 КБ (2 КБ используется для загрузчика), ОЗУ — 2 КБ, EEPROM — 1 КБ. 
  • Цифровые входы/выходы: 14 (6 из них — ШИМ). 
  • Аналоговые входы: 8. 
  • Рабочее напряжение: 5 В. 
  • Входное напряжение: рекомендуемое — 7–12 В, предельное — 6–20 В. 
  • Постоянный ток через вход/выход: 40 мА. 
  • Размеры: 185×43 мм.

Особенности:

  • Загрузка прошивки через бортовой USB-порт.
  • Аппаратная поддержка интерфейсов: UART, I2C, SPI.
  • Бортовой стабилизатор напряжения для внешнего питания 7–15 В.

STM32 Blue Pill

Построена на базе микроконтроллера STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Некоторые характеристики: 

  • Рабочая частота: 72 МГц.
  • Память: 64 КБ flash-памяти, 20 КБ оперативной памяти. 
  • Интерфейсы: SPI, USART, I2C, CAN, USB 2.0. 
  • АЦП контроллера: 12 бит. 
  • Количество контактов ввода-вывода: 37. 
  • Напряжение питания: 3,3 В.
  • Потребляемый ток: до 16 мА. 
  • Габариты: 53×22×12 мм.

Особенности:

  • Поддержка программирования в Arduino IDE.
  • Удобные джамперы для выбора режима загрузки — из Flash, из ОЗУ или режим загрузчика.
  • Встроенный регулятор напряжения — плату можно питать от USB.

Важно: пины имеют логический уровень 3,3 В, но некоторые совместимы с 5-вольтовыми уровнями, загрузка через порт micro usb или type c не предусмотрена производителем

Какие программы потребуются?

Прежде всего, конечно же, нам потребуется наш любимый Arduino IDE

Скачивать первую или вторую версию рекомендую с Microsoft Store

Вторая версия

Arduino IDE 2 - Download and install on Windows | Microsoft Store

Также нам будет нужен STM32CubeProgrammer. Его можно скачать по ссылке

en.stm32cubeprg-win64-v2-18-0.zip — Яндекс Диск

Для начала нужно разархивировать файл и начать установку. В процессе скачивания он может попытаться установить драйвер на ST-LINK V2. Это нормально так как именно через программатор ST LINK V2 мы и будем записывать программу в микроконтроллер, поэтому нужно обязательно его установить.

Вот как выглядит STM32CubeProgrammer после установки
Вот как выглядит STM32CubeProgrammer после установки

ST-LINK V2
ST-LINK V2

Настройка Arduino IDE

Прежде всего в Arduino IDE нам нужно добавить поддержку плат STM32.

Для этого переходим File - Preferences, и в Additional boards manager URL вставляем эту ссылку:

github.com
Вот как это выглядит
Вот как это выглядит

Дальше нам нужно выбрать и установить поддержку плат через Менеджер плат.

Для этого переходим Tools - Board - Boards manager, и в поиске набираем STM. Выбираем тот пункт, где написано STM32, нажимаем INSTALL, и ждем установку.

Добавление поддержки STM32
Добавление поддержки STM32

Теперь нам нужно выбрать нашу плату. В моем случае это STM32F103C8T6 с 128 кБайт Flash - памяти.

Для этого переходим Tools - Board - STM32 boards groups - Generic STM32F1 series. После выполненных манипуляций ваша менюшка в Tools должна расшириться.

Выбор платы
Выбор платы

Теперь переходим Tools - Board part number, и выбираем ваш вариант платы

Выбор варианта платы
Выбор варианта платы

Поздравляю, ваша Arduino IDE настроена. Теперь можно перейти к различиям в программировании и загрузке с последующей настройкой STM32CubeProgrammer.

Программирование и загрузка.

Программирование

При подключении и программировании обратите внимание, что светодиод подключен к ножке PC13, и к ней ничего более нельзя подключать, иначе можно испортить плату.

Распиновка STM32 Blue Pill
Распиновка STM32 Blue Pill

Рассмотрим основные различия в стандартном Blink. Различие состоит в том, что в программировании в функциях типа pinMode(), analogRead(), digitalWrite() #define и т. п. на месте pin, мы пишем номер ножки на распиновке, то есть в мигании светодиодом вместо LED_BUILTIN мы пишем PC13.

Исправленный Blink
Исправленный Blink

Загрузка

С загрузкой всё сложнее, так как она идет не через Arduino IDE.

1. Сначала нам нужно сохранить скетч в новой папке. После этого, нам нужно зайти Sketch - Export Compiled Binary, и дождаться окончания компиляции (она намного дольше, чем с Arduino).

Экспорт Бинарного файла
Экспорт Бинарного файла

2. Теперь подключаем нашу STM32 через ST-LINK V2 (его можно по дешёвле заказать на Озон или Алиэкспресс)

Обратите внимание на маркировку!

Пины должны быть подключены к таким же на ST-LINK
Пины должны быть подключены к таким же на ST-LINK
-12

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

-13

3. Переключите перемычку BOOT0 в соседнее положение (осторожнее, ее нужно именно достать, и вставить в соседние контакты).

Переключённая перемычка BOOT0
Переключённая перемычка BOOT0

4. Вставьте ST-LINK в USB порт компьютера и откройте STM32CubeProgrammer

-15

5. В синей плашечке выберите ST-LINK, в Serial number должен появиться серийный номер вашего ST-LINK, и нажмите Connect.

6. Перейдите в загрузку (вторая кнопка в левой панельке)

-16

В File path введите или укажите путь к бинарному файлу ( он появился в новой папке проекта)

-17

Выберите HEX или BIN, нажмите Verify Programming, и Full chip erase.

Нажмите Start Programming, и дождитесь окончания.

-18

Теперь можно вернуть перемычку BOOT0 в начальное положение, и нажать на кнопку RESET (на плате).

-19

Плата должна замигать встроенным светодиодом.

Поздравляю, вы только что увеличили вычислительную мощность своего проекта в несколько раз! Да, пришлось повозиться с программатором, но теперь у вас в руках платформа для действительно сложных задач. В следующей статье я покажу, как использовать эту мощь на практике — реализовать FFT-анализатор для моего детектора выстрела прямо на STM32.