Возможно, многие сталкивались с проблемой, что плате от Arduino не хватает вычислительной мощности или оперативной памяти. В этой статье мы разберём безболезненный переход с Arduino (в моём случае Nano) на "Синюю таблетку" от STM32.
Важно. Этот способ работает не только для оригинальных STM32, но и для их китайских клонов.
Преимущества программирования STM32 в Arduino IDE:
- Простота программирования платы STM32 на Arduino C++, как и любой другой платы Arduino.
- Вы можете ознакомиться с аппаратными возможностями STM32, используя встроенные библиотеки Arduino C++, для создания простых тестовых демонстрационных проектов.
Недостатки программирования STM32 в Arduino IDE:
- Меньший контроль над аппаратными периферийными устройствами и их конфигурациями.
- Не все аппаратные периферийные устройства STM32 поддерживаются в ядре STM32DUINO.
- При использовании 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
Вторая версия
Также нам будет нужен STM32CubeProgrammer. Его можно скачать по ссылке
Для начала нужно разархивировать файл и начать установку. В процессе скачивания он может попытаться установить драйвер на ST-LINK V2. Это нормально так как именно через программатор ST LINK V2 мы и будем записывать программу в микроконтроллер, поэтому нужно обязательно его установить.
Настройка Arduino IDE
Прежде всего в Arduino IDE нам нужно добавить поддержку плат STM32.
Для этого переходим File - Preferences, и в Additional boards manager URL вставляем эту ссылку:
Дальше нам нужно выбрать и установить поддержку плат через Менеджер плат.
Для этого переходим Tools - Board - Boards manager, и в поиске набираем STM. Выбираем тот пункт, где написано STM32, нажимаем INSTALL, и ждем установку.
Теперь нам нужно выбрать нашу плату. В моем случае это STM32F103C8T6 с 128 кБайт Flash - памяти.
Для этого переходим Tools - Board - STM32 boards groups - Generic STM32F1 series. После выполненных манипуляций ваша менюшка в Tools должна расшириться.
Теперь переходим Tools - Board part number, и выбираем ваш вариант платы
Поздравляю, ваша Arduino IDE настроена. Теперь можно перейти к различиям в программировании и загрузке с последующей настройкой STM32CubeProgrammer.
Программирование и загрузка.
Программирование
При подключении и программировании обратите внимание, что светодиод подключен к ножке PC13, и к ней ничего более нельзя подключать, иначе можно испортить плату.
Рассмотрим основные различия в стандартном Blink. Различие состоит в том, что в программировании в функциях типа pinMode(), analogRead(), digitalWrite() #define и т. п. на месте pin, мы пишем номер ножки на распиновке, то есть в мигании светодиодом вместо LED_BUILTIN мы пишем PC13.
Загрузка
С загрузкой всё сложнее, так как она идет не через Arduino IDE.
1. Сначала нам нужно сохранить скетч в новой папке. После этого, нам нужно зайти Sketch - Export Compiled Binary, и дождаться окончания компиляции (она намного дольше, чем с Arduino).
2. Теперь подключаем нашу STM32 через ST-LINK V2 (его можно по дешёвле заказать на Озон или Алиэкспресс)
Обратите внимание на маркировку!
Контакты с одинаковыми названиями должны быть подключены друг к другу.
3. Переключите перемычку BOOT0 в соседнее положение (осторожнее, ее нужно именно достать, и вставить в соседние контакты).
4. Вставьте ST-LINK в USB порт компьютера и откройте STM32CubeProgrammer
5. В синей плашечке выберите ST-LINK, в Serial number должен появиться серийный номер вашего ST-LINK, и нажмите Connect.
6. Перейдите в загрузку (вторая кнопка в левой панельке)
В File path введите или укажите путь к бинарному файлу ( он появился в новой папке проекта)
Выберите HEX или BIN, нажмите Verify Programming, и Full chip erase.
Нажмите Start Programming, и дождитесь окончания.
Теперь можно вернуть перемычку BOOT0 в начальное положение, и нажать на кнопку RESET (на плате).
Плата должна замигать встроенным светодиодом.
Поздравляю, вы только что увеличили вычислительную мощность своего проекта в несколько раз! Да, пришлось повозиться с программатором, но теперь у вас в руках платформа для действительно сложных задач. В следующей статье я покажу, как использовать эту мощь на практике — реализовать FFT-анализатор для моего детектора выстрела прямо на STM32.