Как запрограммировать stm32 с помощью arduino ide
Перейти к содержимому

Как запрограммировать stm32 с помощью arduino ide

  • автор:

Начало работы с STM32 (Blue Pill) с помощью Arduino IDE

Для многих энтузиастов Arduino стала первой платой, с которой они начали свое знакомство с электроникой и микроконтроллерной техникой. Но по мере того как их навыки росли они стали замечать, что плата Arduino не очень хорошо подходит для промышленных задач и ее 8-битный центральный процессор очень медленно работает по сравнению со многими современными микроконтроллерами. Хорошей заменой плате Arduino в данном случае является плата разработки STM32 под названием STM32F103C8T6, которую также называют «синей таблеткой» (Blue Pill). Данная плата содержит в своем составе 32-битный процессор с архитектурой ARM Cortex M3, который по производительности значительно превосходит 8-битный микроконтроллер AVR в составе платы Arduino Uno.

Внешний вид проекта мигания светодиодом с помощью платы STM32F103C8T6

Также дополнительным преимуществом платы STM32F103C8T6 является то, что ее можно программировать с помощью знакомой многим среды Arduino IDE. В данной статье мы рассмотрим начало работы с платой STM32F103C8T6 (Blue Pill) и запрограммируем в ней мигание встроенного светодиода с помощью Arduino IDE.

Кроме рассматриваемой в данной статье платы STM32 Blue pill существуют и другие популярные типа плат на основе платформы STM32, например, плата STM32 Nucleo 64. В ближайшее время, надеюсь, на нашем сайте появится статья про начало работы с данной платой.

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

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

Общие принципы работы STM32 (Blue Pill)

Плата STM32 (Blue Pill) является платой разработки, основанной на микроконтроллере ARM Cortex M3. По своему внешнему виду она очень похожа на плату Arduino Nano, но по производительности она ее значительно превосходит. Внешний вид платы STM32 (Blue Pill) показан на следующем рисунке.

Внешний вид платы STM32 (Blue Pill)

Платы STM32 стоят значительно дешевле официальных плат Arduino. «Сердцем» платы STM32F103C8T6 является микроконтроллер от компании STMicroelectronics. Также плата содержит два кварцевых генератора – один на частоту 8 МГц, а другой – на частоту 32 кГц, который используется для управления внутренними часами реального времени (Real Time Clock, RTC). Микроконтроллер платы поддерживает работу в спящих режимах, что делает его эффективным для применения в устройствах, запитываемых от батареек/аккумуляторов.

Поскольку микроконтроллер платы работает от напряжения 3.3V, плата также содержит встроенный регулятор напряжения, понижающий напряжение с 5V до 3.3V для подачи питания на микроконтроллер. Хотя микроконтроллер платы работает от 3.3V, большинство контактов общего назначения (GPIO) платы хорошо переносят и напряжение 5V (но не все – будьте внимательны в данном вопросе).

Плата содержит также два встроенных светодиода: красного цвета (для индикации подачи питания) и зеленого цвета (подключен к контакту PC13). Также на плате есть два переключателя (переключаемых с помощью перемычек), которые используются для переключения платы между режимами программирования и работы – они будут рассмотрены далее в нашей статье.

Некоторых вполне резонно интересует вопрос почему плата STM32F103C8T6 называется «синей таблеткой» (Blue Pill). Точного ответа в сети на этот вопрос нет. Может быть, она называется так потому, что она окрашена в синий цвет, или потому, что она способна придать громадное «ускорение» вашим проектам.

Спецификация платы STM32F103C8T6

В данной плате используется микроконтроллер STM32F103C8, построенный на архитектуре ARM Cortex M3. Название платы STM32F103C8T6 обозначает следующее:

  • STM » обозначает производителя STMicroelectronics;
  • 32 » 32-битная архитектура ARM;
  • F103 » показывает архитектуру ARM Cortex M3;
  • C » 48-pin;
  • 8 » 64KB Flash памяти;
  • T » тип корпуса LQFP;
  • 6 » диапазон рабочих температур от -40°C до +85°C.

Технические характеристики микроконтроллера платы STM32F103C8T6:

  • архитектура: 32-bit ARM Cortex M3;
  • рабочее напряжение: от 2.7V до 3.6V;
  • рабочая частота процессора: 72 MHz;
  • число контактов GPIO: 37;
  • число контактов с поддержкой ШИМ: 12;
  • число аналоговых контактов: 10 (на них стоят 12-битные АЦП);
  • количество портов USART: 3;
  • интерфейсов I2C: 2;
  • интерфейсов SPI: 2;
  • Can 2.0: 1;
  • таймеры: 3 (16-битных), 1 (PWM, ШИМ);
  • Flash память: 64KB;
  • RAM (ОЗУ): 20kB.

Более подробно про технические характеристики микроконтроллера вы можете прочитать в даташите на него. Также по данному микроконтроллеру доступно руководство пользователя (на английском языке).

Назначение контактов (распиновка) STM32 Blue pill

Распиновка платы STM32 Blue pill приведена на рисунке ниже. Как вы можете видеть, напротив каждого контакта краской нанесено его соответствующее обозначение. Обозначение контактов похожи на те, которые используются в платах Arduino. G обозначает общий провод/землю (ground pin), 3.3V – выход стабилизированного напряжения 3.3V, контакт 5V может быть использован для подачи питания на плату, также плата может получать питание через разъем micro USB. Встроенный светодиод платы подключен к контакту PC13 микроконтроллера.

Распиновка платы STM32 Blue pill

Но, в отличие от плат Arduino, плату разработки STM32 необходимо вручную переводить в режим программирования (programming mode) используя контакты boot 1 и boot 0 на джампере. Более подробно этот вопрос мы рассмотрим в разделе про программирование платы.

Программирование платы STM32F103C8T6 (STM32 Blue Pill)

STM32 является микроконтроллером семейства STMicroelectronics, поэтому все известные способы программирования ARM чипов применимы и для него. Одна из самых известных и часто используемых для его программирования интегрированных сред разработки (IDE) – это Keil ARM MDK. Также можно использовать такие программы как IAR workbench, Atollic TrueStudio, MicroC Pro ARM, Crossworks ARM, Ride 7, PlatformIO+STM32 и т.д.

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

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

Для программирования платы STM32 Blue Pill с помощью Arduino IDE мы будем использовать плату FTDI, ее контакты Rx и Tx мы будем подключать к плате STM32 как показано на следующей схеме.

Схема подключения платы FTDI к плате STM32 Blue Pill

Контакт Vcc платы FTDI подключен к контакту 5V платы STM32, а земля платы FTDI подключена к земле (Ground) платы STM32. Контакты Rx и Tx платы FTDI подключены к контактам A9 и A10 платы STM32 соответственно.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Программирование SMT32 через разъем Micro USB

Вы, наверное, удивлены почему в данной статье мы рассматриваем программирование платы SMT32 через последовательный порт с помощью платы FTDI, а не через разъем Micro USB, присутствующий на плате. Здесь все просто. Программирование SMT32 через разъем Micro USB будет рассмотрено в одной из последующих статей на нашем сайте, а здесь мы рассмотрим немного «архаичный», но, тем не менее, рабочий, а в некоторых случаях и более удобный способ программирования платы STM32 Blue Pill с помощью платы FTDI.

Подготовка Arduino IDE для программирования платы STM32 (Blue Pill)

Для этого выполните следующую последовательность шагов.

Шаг 1. Если у вас еще не установлена Arduino IDE, то скачайте и установите ее по этой ссылке. Убедитесь, что в процессе ее установки вы выбрали правильную операционную систему.

Шаг 2. После установки Arduino IDE нам необходимо скачать и установить в нее пакеты для работы с платой STM32. Для этого в Arduino IDE откройте пункт меню File -> Preferences.

Шаг 3. Откроется новое диалоговое окно. В данном окне в поле additional Boards Manager URL вставьте следующую ссылку:

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

Затем нажмите OK.

Шаг 4. После этого откройте пункт меню Tool -> Boards -> Board Manager. Откройте окно менеджера плат, в нем выполните поиск “STM32F1” и установите найденный пакет.

Шаг 5. После завершения процесса установки пакета в пункте меню Tools найдите пункт Generic STM32F103C series как показано на рисунке ниже. Убедитесь в том, что выбран вариант тип 64kFlah, скорость CPU 72MHz и измените метод загрузки (upload method) на Serial.

Выбор типа платы Generic STM32F103C series в Arduino IDE

Шаг 6. Теперь подключите вашу плату FTDI к компьютеру и в диспетчере устройств Windows проверьте к какому COM порту произошло ее подключение. После этого выберите этот же порт в пункте меню Tools->Port в Arduino IDE.

Шаг 7. Теперь, когда все необходимые настройки сделаны, проверьте правый нижний угол Arduino IDE – в нем вы должны увидеть номер COM порта, к которому подключена ваша плата. В нашем случае это оказался порт COM7.

Проверка сделанных настроек в правом нижнем углу Arduino IDE

Теперь ваша Arduino IDE готова к программированию платы разработки STM 32 Blue Pill.

Загрузка программы мигания светодиодом в плату STM32F103C8T6

Чтобы проверить корректность работы платы STM32F103C8T6 и возможность ее программирования с помощью Arduino IDE загрузим в нее простую программу мигания светодиодом. Пример этой программы может быть найден в следующем пункте меню Arduino IDE:

Пример программы мигания светодиодом для плат STM32 в Arduino IDE

В этом примере программы нам необходимо сделать небольшие изменения. В программе по умолчанию используется контакт PB1 для управления встроенным светодиодом, в нашей же плате встроенный светодиод подключен к контакту PC13 – этот момент необходимо изменить в программе. Полный исправленный код программы приведен в конце данной статьи.

Светодиод в представленном примере будет мигать с интервалом в 1 секунду.

Дешевая STM32 плата + Arduino IDE UPD 17.08.2017

image

Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.

Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».

Хорошие люди это понимают, и потихоньку начинают приобщать STM32 к ардуино теме, ибо восьмибитные AVR микроконтроллеры, на которых основано немало ардуино плат, не всегда могут справиться с поставленными задачами.

Краткое изложение данной статьи в видео формате:

Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:

image

Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:

  • Рабочая частота 72 МГц, против 16 у ардуино;
  • Объем Flash памяти 64 Кбайта, против 32;
  • Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
  • Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
  • 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;
  • Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
  • Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7. 5В у ардуино плат;
  • Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).

image

Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говорится, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.

Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:

image

Для чего нужны BOOT0 и BOOT1 джамперы

Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.

image

Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:

image

* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.

Плату подключил к USB to UART переходнику следующим образом:

image

* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART’ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.

Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.

Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):

image

Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:

image

Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:

image

image

Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.

Дальше кликаем «Next»:

image

Опять «Next», и видим следующее окно:

image

Выбираем «Download to device» и жмём на «. «:

image

Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.

Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:

image

Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.

Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:

image

В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»

Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:

image

После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:

image

Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:

image

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

Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:

image

Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:

image

Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:

image

Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:

image

Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:

image

* К стати, загорается он по низкому уровню на ножке PC13.

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

image

«Done!
Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».

Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.

Couldn’t find the DFU device

Когда видите, сообщение типа:

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn’t find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

Это означает, что плату прошить не удалось.

Searching for DFU device [1EAF:0003].

Когда среда разработки выдаёт:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming. »

И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.

А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату. В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно. А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.

По поводу распиновки:

Кликабельно

Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):

К порту нужно обращаться по полному имени, например:

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);

Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.

Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

  • ШИМ, то есть функция analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа;
  • АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.

Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.

Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

Схема отладочной платы:

Кликабельно

Ну и на последок:

image

Привет geektimes.ru

//https://github.com/mk90/LiquidCrystalRus //STM32 в массы! #include LiquidCrystalRus lcd(PB9, PB8, PB7, PB6, PB5, PB4); void setup() < lcd.begin(16, 2); lcd.print("Привет"); lcd.setCursor(0, 1); lcd.print("geektimes.ru"); >void loop() < lcd.setCursor(14, 1); lcd.print(millis() / 1000); >

UPD 15.07.2016
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9:
geektimes.ru/post/277928/#comment_9532576

Что ещё забыл

Забыл добавить фото платы с обратной стороны:

image

Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.

Так же не рассказал, что дополнительно пропаивал microUSB разъем:

image

Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.

Как запрограммировать stm32 с помощью arduino ide

Тема программирования микроконтроллеров ранее многократно поднималась в этом блоге, но исключительно в контексте микроконтроллеров AVR и, соответственно, Arduino. Сегодня же речь пойдет о микроконтроллере STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Вы наверняка слышали об архитектуре ARM — она используется в большинстве современных телефонов и планшетов, а также Raspberry Pi, полетных контроллерах для квадрокоптеров, и много где еще.

Список покупок

Для повторения шагов из сей заметки вам понадобится следующие железки:

К моменту, когда вы будете читать эти строки, ссылки могут устареть. Однако необходимые товары легко находятся по запросам «STM32F103C8T6 Development Board» и «ST-Link v2 Programmer» как на AliExpress, так и на eBay. Плата также известна под названием «STM32 Blue Pill».

Важно! Заметьте, что USB-разъем на этих платах часто не слишком надежно припаян и может быстро оторваться. Первым делом после покупки рекомендуется его подпаять.

О плате Blue Pill

Ниже приведены некоторые характеристики платы и используемой в ней микроконтроллера:

  • Микроконтроллер 32-х битный;
  • Рабочая частота 72 МГц;
  • 64 Кб flash-памяти;
  • 20 Кб оперативной памяти;
  • Мне удалось насчитать 32 GPIO;
  • 12-и битный АЦП, 10 аналоговых пинов;
  • 16-и битный ШИМ, 15 ШИМ-пинов;
  • 3 UART канала, 2 I2C шины, 2 SPI шины;
  • Возможность отладки по SWD;
  • Плата питается от 3.3 В;

Расположение пинов (кликабельно — GIF, 1082 x 759, 143 Кб):

Расположение пинов на плате Blue Pill

Для сравнения, Arduino Nano стоит столько же и имеет похожий форм-фактор, но работает на 8-и битном микроконтроллере, имеет частоту 16 МГц, меньше пинов, лишь 32 КБ flash-памяти, 2 Кб оперативной памяти, 10-битный АЦП, 8-и битный ШИМ, по одному каналу UART, I2C и SPI, а про отладку он и вовсе слыхом не слыхивал. То есть, за те же деньги мы получаем куда более мощную железку.

Настройка Arduino IDE

Интересная особенность платы заключается в том, что под нее можно писать из Arduino IDE, используя знакомый набор процедур и классов, а также многие библиотеки, изначально написанные под Arduino. Это делает плату весьма привлекательной для начинающих.

Для программирования под данную плату нам понадобится кросс-компилятор для ARM, отладчик, стандартная библиотека C и клиент к программатору. В Arch Linux соответствующие пакеты ставятся так:

Далее учим Arduino IDE работать с нашей платой:

/ opt / arduino / hardware
git clone https: // github.com / rogerclarkmelbourne / Arduino_STM32.git

Мне дополнительно пришлось поправить Arduino_STM32/STM32F1/platform.txt:

… ибо сыпались ошибки про то, что Arduino IDE не может найти исполняемый файл arm-none-eabi-g++ .

После этого если открыть Arduino IDE, то в меню Tools → Board вы обнаружите большой выбор плат на базе микроконтроллеров STM32. Выбираем Generic STM32F103C. В Tools → Upload Method выбираем STLink. Четыре пина на плате с подписями 3.3V, IO, CLK и GND подключаем к пинам 3.3V, SWDIO, SWCLK и GND программатора соответственно. Проверяем джамперы на плате. Оба джампера (так называемые boot0 и boot1) должны стоять в положении 0.

Fun fact! Чтобы постоянно не возиться с проводами при подключении программатора, выясняя, провод какого цвета к какому пину платы нужно подключить в этот раз, можно взять кусок макетки и спаять адаптер на базе разъема IDC-10. Адаптер подключается к плате через четыре угловых гнезда с шагом 2.54 мм, а затем адаптер подключается к программатору через соответствующий шлейф. Больше никакой путаницы!

Пробуем скомпилировать и залить такой скетч:

void loop ( ) {
digitalWrite ( PC13, HIGH ) ;
delay ( 100 ) ;
digitalWrite ( PC13, LOW ) ;
delay ( 100 ) ;
}

Fun fact! В плате Blue Pill светодиод стоит между ногой PC13 и VCC (схема [PDF]), а не между ногой и землей, как можно было бы ожидать. Поэтому, подавая HIGH на PC13, мы гасим светодиод, а подавая LOW — зажигаем.

Если при прошивке возникает ошибка:

… проверьте, не перепутали ли вы пины CLK и IO, а также попробуйте зажать кнопку Reset на плате.

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

Поздравляю, среда разработки настроена!

Более сложный пример

Ниже приведен код посложнее, демонстрирующий использование ШИМ, аналоговых пинов, а также отладочный вывод по UART:

const int LED1 = PB8 ;
const int LED2 = PB9 ;
const int PTNT = PA0 ;
const int BTN = PB7 ;

int selected_led = LED1 ;
bool btn_was_high = false ;

void setup ( ) {
pinMode ( LED1, PWM ) ;
pinMode ( LED2, PWM ) ;
pwmWrite ( LED1, 0 ) ;
pwmWrite ( LED2, 0 ) ;
pinMode ( BTN, INPUT ) ;
pinMode ( PTNT, INPUT_ANALOG ) ;

if ( digitalRead ( BTN ) == HIGH ) {
btn_was_high = true ;
} else if ( btn_was_high ) {
btn_was_high = false ;
if ( selected_led == LED1 ) {
selected_led = LED2 ;
pwmWrite ( LED1, 0 ) ;
} else {
selected_led = LED1 ;
pwmWrite ( LED2, 0 ) ;
}
}

int ptnt = analogRead ( PTNT ) ;
int ptnt_mapped = map ( ptnt, 0 , 4095 , 0 , 65535 ) ;

Serial. println ( String ( «ptnt = » ) + ptnt + «, ptnt_mapped = » +
ptnt_mapped ) ;

pwmWrite ( selected_led, ptnt_mapped ) ;
}

Соответствующая цепь, собранная на макетной плате:

Моя первая цепь с микроконтроллером STM32

При нажатии на кнопку один светодиод гаснет, а второй загорается. Яркость свечения светодиода регулируется потенциометром. Как видите, код очень мало отличается от обычного кода для Arduino. Отличаются только названия пинов, а также диапазоны значений, с которыми работают процедуры analogRead и pwmWrite.

Еще больше примеров можно найти в File → Examples → A_STM32_Examples.

Сторонние библиотеки

Многие библиотеки уже портированы под STM32 — Wire, Servo, LiquidCrystal, и другие. А что, если попытаться использовать стороннюю библиотеку с GitHub? Для эксперимента я решил попытаться воспользоваться библиотекой LiquidCrystal_I2C, уже знакомой нам по заметке Об использовании экранчиков 1602 с I2C-адаптером.

Добавляем библиотеку в Arduino IDE:

/ Arduino / libraries
git clone \
https: // github.com / fdebrabander / Arduino-LiquidCrystal-I2C-library.git\
. / LiquidCrystal_I2C

LiquidCrystal_I2C lcd ( 0x3F , PB6, PB7 ) ;

lcd. setCursor ( 0 , 1 ) ;
unsigned long tstamp = millis ( ) ;
int h = tstamp / 1000 / 60 / 60 ;
int m = ( tstamp / 1000 / 60 ) % 60 ;
int s = ( tstamp / 1000 ) % 60 ;

Использование библиотеки LiquidCrystal_I2C на STM32

Стоит помнить, что экранчику нужно 5 В, а плата питается от 3.3 В. Поэтому, чтобы все заработало, плату нужно запитать от USB, а экранчик подключить к пину 5V. Экранчик оказался совместим с 3.3-вольтовой логикой, но в более общем случае может потребоваться преобразователь логических уровней.

Само собой разумеется, не всякая библиотека, написанная под Arduino, так просто возьмет и заработает под STM32. Но, по всей видимости, для многих библиотек это действительно так.

Заключение

Итак, что же мы выяснили? Плата стоит как Arduino Nano, имеет похожий форм-фактор, но является при этом куда более мощной. Писать под нее можно точно так же, как под Arduino. При этом нам доступны если и не все те же библиотеки, что под Arduino, то по крайней мере очень многие из них.

А программируете ли вы под STM32 и если да, то что для этого используете?

Начало работы с STM32 (Blue Pill) с помощью Arduino IDE

Для многих энтузиастов Arduino стала первой платой, с которой они начали свое знакомство с электроникой и микроконтроллерной техникой. Но по мере того как их навыки росли они стали замечать, что плата Arduino не очень хорошо подходит для промышленных задач и ее 8-битный центральный процессор очень медленно работает по сравнению со многими современными микроконтроллерами. Хорошей заменой плате Arduino в данном случае является плата разработки STM32 под названием STM32F103C8T6, которую также называют «синей таблеткой» (Blue Pill). Данная плата содержит в своем составе 32-битный процессор с архитектурой ARM Cortex M3, который по производительности значительно превосходит 8-битный микроконтроллер AVR в составе платы Arduino Uno.

Внешний вид проекта мигания светодиодом с помощью платы STM32F103C8T6

Также дополнительным преимуществом платы STM32F103C8T6 является то, что ее можно программировать с помощью знакомой многим среды Arduino IDE. В данной статье мы рассмотрим начало работы с платой STM32F103C8T6 (Blue Pill) и запрограммируем в ней мигание встроенного светодиода с помощью Arduino IDE.

Кроме рассматриваемой в данной статье платы STM32 Blue pill существуют и другие популярные типа плат на основе платформы STM32, например, плата STM32 Nucleo 64. В ближайшее время, надеюсь, на нашем сайте появится статья про начало работы с данной платой.

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

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

Общие принципы работы STM32 (Blue Pill)

Плата STM32 (Blue Pill) является платой разработки, основанной на микроконтроллере ARM Cortex M3. По своему внешнему виду она очень похожа на плату Arduino Nano, но по производительности она ее значительно превосходит. Внешний вид платы STM32 (Blue Pill) показан на следующем рисунке.

Внешний вид платы STM32 (Blue Pill)

Платы STM32 стоят значительно дешевле официальных плат Arduino. «Сердцем» платы STM32F103C8T6 является микроконтроллер от компании STMicroelectronics. Также плата содержит два кварцевых генератора – один на частоту 8 МГц, а другой – на частоту 32 кГц, который используется для управления внутренними часами реального времени (Real Time Clock, RTC). Микроконтроллер платы поддерживает работу в спящих режимах, что делает его эффективным для применения в устройствах, запитываемых от батареек/аккумуляторов.

Поскольку микроконтроллер платы работает от напряжения 3.3V, плата также содержит встроенный регулятор напряжения, понижающий напряжение с 5V до 3.3V для подачи питания на микроконтроллер. Хотя микроконтроллер платы работает от 3.3V, большинство контактов общего назначения (GPIO) платы хорошо переносят и напряжение 5V (но не все – будьте внимательны в данном вопросе).

Плата содержит также два встроенных светодиода: красного цвета (для индикации подачи питания) и зеленого цвета (подключен к контакту PC13). Также на плате есть два переключателя (переключаемых с помощью перемычек), которые используются для переключения платы между режимами программирования и работы – они будут рассмотрены далее в нашей статье.

Некоторых вполне резонно интересует вопрос почему плата STM32F103C8T6 называется «синей таблеткой» (Blue Pill). Точного ответа в сети на этот вопрос нет. Может быть, она называется так потому, что она окрашена в синий цвет, или потому, что она способна придать громадное «ускорение» вашим проектам.

Спецификация платы STM32F103C8T6

В данной плате используется микроконтроллер STM32F103C8, построенный на архитектуре ARM Cortex M3. Название платы STM32F103C8T6 обозначает следующее:

  • STM » обозначает производителя STMicroelectronics;
  • 32 » 32-битная архитектура ARM;
  • F103 » показывает архитектуру ARM Cortex M3;
  • C » 48-pin;
  • 8 » 64KB Flash памяти;
  • T » тип корпуса LQFP;
  • 6 » диапазон рабочих температур от -40°C до +85°C.

Технические характеристики микроконтроллера платы STM32F103C8T6:

  • архитектура: 32-bit ARM Cortex M3;
  • рабочее напряжение: от 2.7V до 3.6V;
  • рабочая частота процессора: 72 MHz;
  • число контактов GPIO: 37;
  • число контактов с поддержкой ШИМ: 12;
  • число аналоговых контактов: 10 (на них стоят 12-битные АЦП);
  • количество портов USART: 3;
  • интерфейсов I2C: 2;
  • интерфейсов SPI: 2;
  • Can 2.0: 1;
  • таймеры: 3 (16-битных), 1 (PWM, ШИМ);
  • Flash память: 64KB;
  • RAM (ОЗУ): 20kB.

Более подробно про технические характеристики микроконтроллера вы можете прочитать в даташите на него. Также по данному микроконтроллеру доступно руководство пользователя (на английском языке).

Назначение контактов (распиновка) STM32 Blue pill

Распиновка платы STM32 Blue pill приведена на рисунке ниже. Как вы можете видеть, напротив каждого контакта краской нанесено его соответствующее обозначение. Обозначение контактов похожи на те, которые используются в платах Arduino. G обозначает общий провод/землю (ground pin), 3.3V – выход стабилизированного напряжения 3.3V, контакт 5V может быть использован для подачи питания на плату, также плата может получать питание через разъем micro USB. Встроенный светодиод платы подключен к контакту PC13 микроконтроллера.

Распиновка платы STM32 Blue pill

Но, в отличие от плат Arduino, плату разработки STM32 необходимо вручную переводить в режим программирования (programming mode) используя контакты boot 1 и boot 0 на джампере. Более подробно этот вопрос мы рассмотрим в разделе про программирование платы.

Программирование платы STM32F103C8T6 (STM32 Blue Pill)

STM32 является микроконтроллером семейства STMicroelectronics, поэтому все известные способы программирования ARM чипов применимы и для него. Одна из самых известных и часто используемых для его программирования интегрированных сред разработки (IDE) – это Keil ARM MDK. Также можно использовать такие программы как IAR workbench, Atollic TrueStudio, MicroC Pro ARM, Crossworks ARM, Ride 7, PlatformIO+STM32 и т.д.

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

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

Для программирования платы STM32 Blue Pill с помощью Arduino IDE мы будем использовать плату FTDI, ее контакты Rx и Tx мы будем подключать к плате STM32 как показано на следующей схеме.

Схема подключения платы FTDI к плате STM32 Blue Pill

Контакт Vcc платы FTDI подключен к контакту 5V платы STM32, а земля платы FTDI подключена к земле (Ground) платы STM32. Контакты Rx и Tx платы FTDI подключены к контактам A9 и A10 платы STM32 соответственно.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Программирование SMT32 через разъем Micro USB

Вы, наверное, удивлены почему в данной статье мы рассматриваем программирование платы SMT32 через последовательный порт с помощью платы FTDI, а не через разъем Micro USB, присутствующий на плате. Здесь все просто. Программирование SMT32 через разъем Micro USB будет рассмотрено в одной из последующих статей на нашем сайте, а здесь мы рассмотрим немного «архаичный», но, тем не менее, рабочий, а в некоторых случаях и более удобный способ программирования платы STM32 Blue Pill с помощью платы FTDI.

Подготовка Arduino IDE для программирования платы STM32 (Blue Pill)

Для этого выполните следующую последовательность шагов.

Шаг 1. Если у вас еще не установлена Arduino IDE, то скачайте и установите ее по этой ссылке. Убедитесь, что в процессе ее установки вы выбрали правильную операционную систему.

Шаг 2. После установки Arduino IDE нам необходимо скачать и установить в нее пакеты для работы с платой STM32. Для этого в Arduino IDE откройте пункт меню File -> Preferences.

Шаг 3. Откроется новое диалоговое окно. В данном окне в поле additional Boards Manager URL вставьте следующую ссылку:

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

Затем нажмите OK.

Шаг 4. После этого откройте пункт меню Tool -> Boards -> Board Manager. Откройте окно менеджера плат, в нем выполните поиск “STM32F1” и установите найденный пакет.

Шаг 5. После завершения процесса установки пакета в пункте меню Tools найдите пункт Generic STM32F103C series как показано на рисунке ниже. Убедитесь в том, что выбран вариант тип 64kFlah, скорость CPU 72MHz и измените метод загрузки (upload method) на Serial.

Выбор типа платы Generic STM32F103C series в Arduino IDE

Шаг 6. Теперь подключите вашу плату FTDI к компьютеру и в диспетчере устройств Windows проверьте к какому COM порту произошло ее подключение. После этого выберите этот же порт в пункте меню Tools->Port в Arduino IDE.

Шаг 7. Теперь, когда все необходимые настройки сделаны, проверьте правый нижний угол Arduino IDE – в нем вы должны увидеть номер COM порта, к которому подключена ваша плата. В нашем случае это оказался порт COM7.

Проверка сделанных настроек в правом нижнем углу Arduino IDE

Теперь ваша Arduino IDE готова к программированию платы разработки STM 32 Blue Pill.

Загрузка программы мигания светодиодом в плату STM32F103C8T6

Чтобы проверить корректность работы платы STM32F103C8T6 и возможность ее программирования с помощью Arduino IDE загрузим в нее простую программу мигания светодиодом. Пример этой программы может быть найден в следующем пункте меню Arduino IDE:

Пример программы мигания светодиодом для плат STM32 в Arduino IDE

В этом примере программы нам необходимо сделать небольшие изменения. В программе по умолчанию используется контакт PB1 для управления встроенным светодиодом, в нашей же плате встроенный светодиод подключен к контакту PC13 – этот момент необходимо изменить в программе. Полный исправленный код программы приведен в конце данной статьи.

Светодиод в представленном примере будет мигать с интервалом в 1 секунду.

Дешевая STM32 плата + Arduino IDE UPD 17.08.2017

image

Хотите прокачать ваши Arduino проекты? Заставить их работать быстрее, измерения и регулировку сделать точнее, ну и добавить баги(с новыми девайсами они неизбежны). Тогда эта статья для Вас.

Arduino тема всё больше захватывает умы человечества, но рано или поздно мы встречаемся с тем, что нам чего-то не хватает, например бюджета/размеров/пиновпортов/разрядности/производительности… Как говорил один мудрый человек — «Кто хочет, тот ищет возможности, кто не хочет — ищет причины».

Хорошие люди это понимают, и потихоньку начинают приобщать STM32 к ардуино теме, ибо восьмибитные AVR микроконтроллеры, на которых основано немало ардуино плат, не всегда могут справиться с поставленными задачами.

Краткое изложение данной статьи в видео формате:

Ладно, меньше лирики и ближе к теме. В этой статье, я буду рассматривать дешёвую отладочную плату, которая основана на базе микроконтроллера STM32F103C8T6:

image

Для начала, сравним основные параметры STM32 платы, и её аналога по цене — Arduino Nano V3.0:

  • Рабочая частота 72 МГц, против 16 у ардуино;
  • Объем Flash памяти 64 Кбайта, против 32;
  • Оперативной памяти, она же RAM(где хранятся переменные), у STM32 целых 20 Кбайт, у ардуинки всего лишь 2;
  • Быстрый 12-ти битный АЦП, в то время как у Arduino плат, что на базе AVR микроконтроллеров(это как правило большинство) используется 10-ти битный. Это означает, что в случае STM32, функция analogRead(*); будет возвращать 0..4095 против 0..1023, что в первом случае ведёт к более точным измерениям;
  • 16-ти битный аппаратный ШИМ, против 8-ми у Arduino плат, то есть, функция analogWrite(*);pwmWrite(*); может принимать значение 0..65535, против убогих 0..255. Это позволит ещё точнее управлять нашими двигателями, сервами и прочими девайсами, которые рулятся при помощи ШИМ;
  • Аппаратная работа с USB, чем не может похвастаться не одна Arduino плата стоимостью менее 2 долларов;
  • Напряжение питания — от 2 до 3.6В(прямо таки заточено под 2 AA батарейки), против 2.7. 5В у ардуино плат;
  • Цены на момент написания статьи — 1.9 доллара против 1.8(алиэкспресс).

image

Всё это в сумме делает данную плату крайне привлекательной во всём, кроме одного — новичку, как например мне, тема STM32 кажется слишком затратной по времени, есть целые сайты посвящённые программированию этих микроконтроллеров. А вот если подружить STM32 с Arduino IDE, то порог вхождения опускается до крайне низкого уровня. Хотя, как говорится, «В каждой бочке мёда, есть ложка дёгтя», но об этом чуть ниже.

Приступим к подготовке платы, для работы с Arduino IDE. Первое что необходимо сделать — залить в микроконтроллер специальный загрузчик, который позволит прошивать плату через аппаратный USB, причём прямо из среды разработки. Для этого необходимо перевести верхний джампер(он же «BOOT0»), в положение «1»:

image

Дело в том, что в STM32 с завода прошит, в так называемую системную память(system memory), специальный загрузчик, который позволяет прошивать плату через самый обычный USB to UART переходник, не прибегая к специфическим программаторам типа ST-Link V2.

image

Дальше нам понадобиться переходник с USB на UART. Стоит помнить, что STM32, это 3.3 В логика, совместимость с 5-ти вольтовой не гарантируется, поэтому рекомендовано использовать USB to UART, у которого есть возможность выбора режимов работы с 3.3/5В логикой. Я использовал дешёвый переходник на базе CH340G:

image

* как видно, производитель не стал заворачиваться со смывкой флюса, на работу, конечно, никак не влияет.

Плату подключил к USB to UART переходнику следующим образом:

image

* PA10/PA9 на плате подписаны просто как A10/A9 — эти порты являются первым аппаратным USART’ом, всего их на плате 3, так же тут 2 аппаратных I2C и 2 SPI.

Ради удобства запитал плату от 5 В, для питания от 3.3 В на плате есть пин «3.3». Внимание, 5 В может запросто вывести микроконтроллер из строя, так что уделите должное внимание подключению.

Качаем, устанавливаем и запускаем Flash Loader Demonstrator(есть в архиве к статье):

image

Выбираем номер COM-порта нашего переходника, в моём случае это COM43, потом нажимаем «Next»:

image

Так как у меня микроконтроллер новый, ещё муха не сидела на него никто ничего не записывал(разумеется кроме самого производителя), то тут по умолчанию стоит защита от чтения, программа нас предупреждает, что если нажать кнопку «Remove protection», Flash память будет очищена, то есть если бы там была какая-то прошивка — она удалится. В моём случае там ничего полезного нет, так что смело жму. Далее вижу следующее:

image

image

Так как моя отладочная плата основана на микроконтроллере STM32F103C8 — здесь 64 Кбайт Flash памяти, есть ещё STM32F103CB микроконтроллер, где в два раза больше Flash.

Дальше кликаем «Next»:

image

Опять «Next», и видим следующее окно:

image

Выбираем «Download to device» и жмём на «. «:

image

Меняем тип файлов на *.bin и открываем файл «generic_boot20_pc13.bin»(тоже присутствует в архиве) который можно взять из проекта STM32duino-bootloader.

Дальше кликаем на кнопку «Next», после прошивки загрузчика мы увидим зелёный свет:

image

Потом надо скачать, для среды разработки Arduino IDE, специальное STM32 ядро(так же есть в архиве к статье). Тут есть один нюанс, на момент написания статьи, ядро не работает на версиях среды разработки свыше 1.6.5, у меня стоит 1.6.5-r5 которую скачал тут.
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9.

Дальше разархивируем содержимое по адресу Мои Документы\Arduino\hardware:

image

В моём случае полный путь выглядит вот так — «C:\Users\RSK\Documents\Arduino\hardware»

Разумеется, что система устройство определить не сумеет, поэтому надо ещё установить драйвера на плату. Заходим в папку «Мои Документы\Arduino\hardware\Arduino_STM32\drivers\win»(или «drivers\win», в случае архива к статье), и запускаем от имени администратора файл «install_drivers.bat»:

image

После этого верхний джампер(тот что «BOOT0»), переводим в положение «0» и подключаем плату к компьютеру через microUSB кабель:

image

Она должна в диспетчере устройств определиться или как «Maple DFU» или «Maple Serial (COM*)»:

image

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

Запускаем среду разработки, дальше Инструменты -> Плата -> Boards Manager:

image

Здесь нужно установить ядро для платы Arduino Due. Выбираем последнюю версию и нажимаем «Install»:

image

Потом Инструменты -> Плата -> «Generic STM32F103C», дальше Variant: «STM32F103C8 (20k RAM. 64k Flash)», Upload Method: «STM32duino bootloader», Порт — номер COM-порта платы, вообщем всё как на скрине:

image

Всё, плата готова к прошивке и программированию в среде разработки Arduino IDE. Давайте прошьём какой-то скетч из примеров, которые «вшиты» в ядро, заходим Файл -> Папка со скетчами -> hardware -> Arduino_STM32 -> STM32F1 -> libraries -> A_STM32_Examples -> Digital -> Blink:

image

Классический «Hello World» в мире микроконтроллеров. Изменяем PB1 на PC13, так как светодиод, что на плате, подключен к этому порту:

image

* К стати, загорается он по низкому уровню на ножке PC13.

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

image

«Done!
Resetting USB to switch back to runtime mode
error resetting after download: usb_reset: could not reset device, win error: Не удается найти указанный файл.».

Но прошивка то загрузилась успешно, хотя не всегда так, иногда Arduino IDE выдаёт другие сообщения.

Когда видите, сообщение типа:

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn’t find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

Это означает, что плату прошить не удалось.

Когда среда разработки выдаёт:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming. »

И больше ничего не происходит, попробуйте в этот момент перезагрузить плату клацнув кнопку ресет. По аналогии это как с Arduino Pro Mini.

А теперь про «ложку дёгтя», о которой я писал вначале статьи, почему-то не всегда получается прошить плату в среде разработки, даже больше, она не всегда определяется компьютером. Я для себя это решил следующим образом, перед тем как загрузить прошивку(перед нажатием кнопки «Вгрузить»), клацаю «Reset» на плате, и после прошивки, ещё раз перезагружаю плату. В этом случае процент вероятности, что плата прошьется, равен 99%. Непонятно почему работает именно так, но факт. Думаю, что рано или поздно этот косяк поправят, и всё будет автоматом перезагружаться как нужно. А чтобы это быстрее поправили, надо чтобы комьюнити этой замечательной STM32 отладочной платы росла, поэтому делитесь этой статьей с друзьями, особенно с друзьями программистами.

По поводу распиновки:

Лучшее что мне удалось найти, это распиновка самого микроконтроллера(открывайте в новой вкладке):

К порту нужно обращаться по полному имени, например:

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);

Ещё рекомендую зайти на сайт docs.leaflabs.com/docs.leaflabs.com/index.html там есть много чего интересного по теме программирования в Arduino IDE, правда на английском языке.

Я порылся в файлах ядра, и нашёл один интересный файл:
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

  • ШИМ, то есть функция analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, а это далеко не все, которые размечены на распиновке чипа;
  • АЦП, аля analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.

Так что имейте это ввиду. Хотя этого более чем достаточно от платы, стоимостью в 1.9 доллара.

Ещё заметил, что пины PA12/PA11 подключены к D+/D- USB, их лишний раз лучше вообще не трогать, ибо чуть что, на кону не 2-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

Схема отладочной платы:

Ну и на последок:

image

UPD 15.07.2016
Проверенна работоспособность ядра на Arduino IDE версии 1.6.9:
geektimes.ru/post/277928/#comment_9532576

Забыл добавить фото платы с обратной стороны:

image

Тут почти ничего нет, стабилизатор и немного резисторов с конденсаторами.

Так же не рассказал, что дополнительно пропаивал microUSB разъем:

image

Потому что не особо внушала доверие пайка, точнее, её полное отсутствие.

Как запрограммировать stm32 с помощью arduino ide

В этом руководстве (перевод [1]) рассматривается, как программировать платку на микроконтроллере STM32F103C8T6, так называемую «Blue Pill» [2] (часто эту плату называют Arduino STM32) с помощью Arduino IDE. Платки Blue Pill в изобилии продаются на AliExpress и Taobao, для поиска вбейте STM32 stm32f103c8t6.

Примечание: если Вы любите паять, то можно также самому заказать печатную плату Blue Pill онлайн-среде EasyEDA благодаря проекту [3]. Это модифицированный в сторону упрощения проект — заменен регулятор LDO на более удобный. Также изменены номинал резистора подтяжки USB и светодиоды индикации. Десяток плат обойдутся примерно $5, плюс доставка порядка $6.

[Что понадобится]

Платка STM32 «Blue Pill» или аналогичная:

STM32F103C8T6 Blue Pill

STM32F103C8T6 Blue Pill top

STM32F103C8T6 Blue Pill bottom

Отладчик ST-LINK/V2 для микроконтроллеров семейств STM8 и STM32:

STM32F1 Arduino STLink v2 SWD debugger programmer

Примечание: этот отладчик можно купить на AliExpress и Taobao по цене порядка $2. Подойдет и более старый отладчик ST-LINK или ST-LINK/v1, однако будьте внимательны к подключению отладчика через выводы SWDCLK, SWDIO, GND и +3.3V, цоколевки у разъема отладки могут различаться (см. врезку ниже).

На цоколевках синим цветом выделены 4 провода, которыми адаптер подключается к микроконтроллеру STM32.

[STLink/STLink-V1]

STLink V1

Вид на штырьки разъема снаружи:

+—-+
T_JRST |1 2| 3V3
5V |3 4| T_JTCK/ T_SWCLK
SWIM |5 6| T_JTMS/ T_SWDIO
GND |7 8| T_JTDO
SWIM RST |9 10| T_JTDI
+—-+

[STLink-V2]

STLink V2

Вид на штырьки разъема снаружи:

+—-+
RST |1 2| SWCLK
SWIM |3 4| SWDIO
GND |5 6| GND
3.3V |7 8| 3.3V
5V |9 10| 5V
+—-+

Еще один возможный вариант цоколевки:

+—-+
RST |1 2| SWDIO
GND |3 4| GND
SWIM |5 6| SWCLK
3.3V |7 8| 3.3V
5V |9 10| 5V
+—-+

[Конфигурирование Arduino IDE]

Автор оригинальной статьи [1] использовал Arduino 1.8.1. Я экспериментировал в среде Arduino версии 1.8.13, и все описанное относится к ней. Так что вероятно, что в другой более-менее новой версии Arduino все также будет работать. Процесс по шагам:

1. Зайдите в меню Файл -> Настройки (File -> Preferences) и кликните на кнопку справа от поля ввода «Дополнительные ссылки для Менеджера плат:» (Additional Boards Manager URLs).

STM32F1 Arduino Setup01

2. В окно ввода URL вставьте ссылку

STM32F1 Arduino Setup02

Закройте окна настроек кликами на OK.

3. Зайдите в меню Инструменты -> плата -> Менеджер плат. (Tools -> Board -> Board Manager). Для ускорения поиска нужного дополнения в выпадающем списке Тип (Type) выберите Внесены (Contributed). Прокрутите до STM32 Cores by STMicroelectronics и нажмите на кнопку Установка (Install).

STM32F1 Arduino Setup03

Установка пакета поддержки STM32 займет несколько минут. Загрузятся утилиты компилирования и отладки ARM (ARM debugging/compiling toolchain).

4. Необходимо добавить поддержку ST-Link. Загрузите Arduino_STM32-master.zip по ссылке [4]. Создайте папку Arduino_STM32 в каталоге arduino-1.8.13\hardware\ (здесь arduino-1.8.13 это корневой каталог установки Arduino IDE, где находится исполняемый файл arduino.exe). Распакуйте содержимое архива Arduino_STM32-master.zip в папку arduino-1.8.13\hardware\Arduino_STM32.

STM32F1 Arduino Setup04

Перезапустите Arduino IDE.

5. Теперь надо сделать выбор используемой платы и программатора. Зайдите в меню Инструменты (Tools) -> Плата: (Board) -> STM32F1 Boards (Arduino_STM32) -> Generic STM32F103C series. Выбор может быть сделан на основе используемого на плате микроконтроллера.

Плата: (Board) -> STM32 Boards (selected from submenu) -> Generic STM32F1 Series. После этого меню Инструменты изменится, в нем появятся новые пункты. Выберите пункт Board part number: «Blue Pill F103C6 (32K)». Выбор может быть сделан на основе используемого на плате микроконтроллера. Поэтому, если на плате стоит STM32F103C8T6, то выберите Black Pill F103C8 или Generic F103C8. —>Пример возможного выбора:

Плата: «Generic STM32F103C series»
Variant: «STM32F103C8 (20k RAM. 64k Flash)»
Upload method: «STLink»
CPU Speed(MHz): «72 MHz (Normal)»
Optimize: «Smallest (default)»

[Загрузка скетча]

Чтобы убедиться, что все работает, запишем в память STM32103 простейшую программу мигания светодиодом — традиционный «Hello World» в мире микроконтроллеров. Для этого зайдите в меню Файл -> Примеры -> 01.Basics -> Blink (File -> Examples -> 01.Basics -> Blink).

STM32F1 Arduino Blink01

Загрузится скетч Blink.

Соедините STLink с платой Blue Pill четырьмя проводами (см. выше врезку «Цоколевки разъема SWD адаптеров ST-Link»):

Blue Pill STLink
3V3 3.3V
SWO SWDIO
SWCLK SWCLK
GND GND

Перемычки BOOT0 и BOOT1 установите в положение 00, что соответствует запуску кода из памяти Flash.

STM32F1 Blue Pill BOOT0 BOOT1

BOOT1 BOOT0 Откуда запустится программа
0 0 Внутренняя память программ FLASH
1 0
0 1 Системная память (встроенный в ROM загрузчик [6])
1 1 Внутренняя память RAM

Нажмите на круглую кнопку со стрелкой вправо (эквивалентно выбору в меню Скетч -> Загрузка Ctrl+U). Программа скомпилируется и загрузится, светодиод PC13 начнет медленно мигать.

[Что дальше?]

Микроконтроллер серии STM32F1 (Arm® Cortex™-M) обладает широким набором аппаратных интерфейсов и возможностей использования.

STM32F103 Blue Pill Pinout Diagram

Поэкспериментируйте с другими примерами кода и проектами из меню Файл -> Примеры. Будьте осторожны с использованием выводов USB- и USB+ (ножки портов PA11 и PA12) — они соединены с выводами коннектора microUSB. Также имейте в виду, что к выводам OSC32IN и OSC32OUT (ножки портов PC14 и PC15) подключен часовой кварцевый резонатор на 32.768 кГц.

Похожие публикации:

  1. Как блок поставить по центру css
  2. Как в css изменить размер текста
  3. Как сделать стрелки в css
  4. Как сделать текст вертикальным css

Программирование ESP32 на MicroPython с помощью Thonny IDE

MicroPython – это облегченная версия языка программирования Python, специально разработанная для программирования микроконтроллеров, систем-на-чипе (SOCs) и других встраиваемых систем. MicroPython – это, по сути, упрощенный вариант Python 3, и он совместим с ним по синтаксису.

В настоящее время Python является одним из самых популярных языков программирования, изучаемых в школах и других учебных заведениях. Поэтому для тех, кто знаком с программированием в Python, переход на MicroPython для программирования микроконтроллеров будет представляться значительно более легким делом, чем изучение такого достаточно сложного языка как C++.

Внешний вид проекта программирования ESP32 на MicroPython с помощью Thonny IDE

Хотя MicroPython пока еще отстает по популярности от C и C++ при программировании микроконтроллеров и встраиваемых систем, его популярность растет с каждым годом и все большее число платформ заявляю о его поддержке.

В данной статье мы рассмотрим основы программирования модуля ESP32 на языке MicroPython с помощью программного обеспечения Thonny IDE. Мы рассмотрим почему MicroPython перспективен для программирования модулей ESP32 и загрузим в него программу для мигания светодиодом, написанную на MicroPython.

MicroPython против Arduino C – что лучше

Как мы ранее уже выяснили, использование Arduino IDE является достаточно простым способом программирования модуля ESP32. В данном случае мы используем Arduino версию языков C или C++. Эти два языка в предыдущие два десятилетия были самыми популярными инструментами для программирования микроконтроллеров и встраиваемых систем, а использование Arduino позволило упростить их изучение для многих пользователей. Вдобавок к этому Arduino сейчас является одним из самых больших сообществ в мире в данной тематике со множеством библиотек, регулярно выпускаемыми обновлениями, постоянным добавлением поддержки новых плат и т.д. Все это делает ее чрезвычайно удобной для программирования микроконтроллеров и встраиваемых систем. Пожалуй, недостатком данной системы является лишь то, что Arduino C работает только с Arduino IDE. Поскольку любая IDE (интегрированная среда разработки) имеет определенные ограничения, то Arduino IDE не является оптимальным решением для определенных случаев разработки программного кода.

MicroPython против Arduino C – что лучше

MicroPython, с другой стороны, является достаточно новым языком программирования. Конечно, сейчас его популярность значительно уступает Arduino, но она растет быстрыми темпами с каждым годом. К тому же MicroPython является упрощенной версией языка Python, который в настоящее время является одним из самых популярных языков программирования, поэтому если вам какие то проблемы не удается решить в сообществе MicroPython, то их можно попробовать решить в сообществе Python, которое уже сравнимо по величине с сообществом Arduino.

Также MicroPython имеет ряд свойств, которыми не обладает Arduino. Одним из таких свойств является REPL (Read-Evaluate-Print). Данное свойство позволяет вам подключаться к плате и исполнять код (часть кода) на ней быстро, без необходимости его компиляции. Таким образом вы можете протестировать работу в плате отдельных частей кода.

По мнению многих экспертов MicroPython является более простым в изучении и работе чем язык Arduino C, но должно пройти некоторое время прежде чем он раскроет свой потенциал, а пока что программирование встраиваемых систем на C и C++ более распространено. Но учитывая современные тренды развития информационных технологий, такие как машинное обучение, компьютерное зрение и т.д., вполне ожидаемо, что MicroPython может стать будущим разработки для микроконтроллеров и встраиваемых систем.

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

  1. Модуль ESP32 (купить на AliExpress).
  2. Резистор 100 Ом (купить на AliExpress).
  3. Светодиод (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Внешний вид модуля ESP32

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

Схема проекта мигания светодиодом на ESP32 с помощью MicroPython представлена на следующем рисунке.

Схема проекта мигания светодиодом на ESP32 с помощью MicroPython

Вместо внешнего светодиода вы также можете использовать встроенный в модуль ESP32 светодиод.

Загрузка прошивки MicroPython в модуль ESP32

Выполните следующую последовательность шагов.

Шаг 1. Скачайте бинарный файл (bin file) последней версии прошивки (firmware) MicroPython с его официальной страницы скачиваний. На этом этапе вам необходимо будет выбрать одну из 3-х опций в зависимости от того, с чем вы хотите в дальнейшем работать:

  • стабильная версия прошивки (Stable firmware);
  • ежедневная версия прошивки (Daily firmware);
  • ежедневная версия прошивки с поддержкой SPIRAM.

Если вы только начинаете работу с MicroPython, то вам лучше всего выбрать стабильную версию прошивки (Stable firmware). Если вы уже продвинутый пользователь в использовании MicroPython ESP32, вы можете выбрать ежедневную версию прошивки. Если ваша плата (модуль) поддерживает SPIRAM, то вы можете выбрать версию прошивки с поддержкой этой опции – это позволит вам адресовать больший объем оперативной памяти (RAM).

Со страницы закачек прошивки MicroPython выберите прошивку для имеющейся у вас платы (модуля) ESP32.

Выбор прошивки MicroPython для скачивания

Шаг 2. Далее вам необходимо загрузить скачанную прошивку в модуль ESP32. Для этого вам необходимо перевести вашу плату (модуль) в режим загрузки (bootloader mode) и затем с помощью специального программного обеспечения скопировать прошивку с вашего компьютера в плату (модуль).

Способ перевода вашей платы (модуля) в режим загрузки во многом зависит от того какая у вас плата (модуль) ESP32. Необходимо смотреть даташит на ваш модуль (плату) чтобы выяснить это. Но, к счастью, большинство плат ESP32 содержат USB коннектор, преобразователь USB в последовательный порт и контакты DTR и RTS – все это позволяет достаточно просто загружать прошивку в модуль (плату).

К примеру, для платы DOIT DevKit и многих типов плат (модулей) ESP32 для их перевода в режим загрузки достаточно всего лишь нажать кнопку загрузки (boot button), находящуюся на них.

Для загрузки прошивки MicroPython в модуль ESP32 мы будем использовать инструмент (программу) под названием esptool.py.

Для работы esptool.py необходимо чтобы на вашем компьютер был установлен Python 2.7, Python 3.4 или более новая версия Python. Мы рекомендуем версию Python 3.7.X, которую можно загрузить с ее официального сайта.

Когда Python 3 будет установлен на ваш компьютер, с официального репозитория ESP скачайте последнюю стабильную версию esptool.py или откройте окно термина чтобы установить ее с помощью установщика pip.

При ее установке с помощью pip в окне терминала выполните команду:

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

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