Для многих энтузиастов Arduino стала первой платой, с которой они начали свое знакомство с электроникой и микроконтроллерной техникой. Но по мере того как их навыки росли они стали замечать, что плата Arduino не очень хорошо подходит для промышленных задач и ее 8-битный центральный процессор очень медленно работает по сравнению со многими современными микроконтроллерами. Хорошей заменой плате Arduino в данном случае является плата разработки STM32 под названием STM32F103C8T6, которую также называют "синей таблеткой" (Blue Pill). Данная плата содержит в своем составе 32-битный процессор с архитектурой ARM Cortex M3, который по производительности значительно превосходит 8-битный микроконтроллер AVR в составе платы Arduino Uno.
Также дополнительным преимуществом платы STM32F103C8T6 является то, что ее можно программировать с помощью знакомой многим среды Arduino IDE. В данной статье мы рассмотрим начало работы с платой STM32F103C8T6 (Blue Pill) и запрограммируем в ней мигание встроенного светодиода с помощью Arduino IDE.
Кроме рассматриваемой в данной статье платы STM32 Blue pill существуют и другие популярные типа плат на основе платформы STM32, например, плата STM32 Nucleo 64. В ближайшее время, надеюсь, на нашем сайте появится статья про начало работы с данной платой.
Необходимые компоненты
- Плата разработки STM32F103C8T6 (STM32 Blue Pill) (купить на AliExpress).
- Плата FTDI (3.3V) (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Общие принципы работы STM32 (Blue Pill)
Плата STM32 (Blue Pill) является платой разработки, основанной на микроконтроллере ARM Cortex M3. По своему внешнему виду она очень похожа на плату Arduino Nano, но по производительности она ее значительно превосходит. Внешний вид платы 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 микроконтроллера.
Но, в отличие от плат 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 как показано на следующей схеме.
Контакт 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.
Теперь на нашем сайте доступна статья про программирование платы STM32 Blue Pill через USB порт.
Подготовка Arduino IDE для программирования платы STM32 (Blue Pill)
Для этого выполните следующую последовательность шагов.
Шаг 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. После завершения процесса установки пакета в пункте меню Tools найдите пункт Generic STM32F103C series как показано на рисунке ниже. Убедитесь в том, что выбран вариант тип 64kFlah, скорость CPU 72MHz и измените метод загрузки (upload method) на Serial.
Шаг 6. Теперь подключите вашу плату FTDI к компьютеру и в диспетчере устройств Windows проверьте к какому COM порту произошло ее подключение. После этого выберите этот же порт в пункте меню Tools->Port в Arduino IDE.
Шаг 7. Теперь, когда все необходимые настройки сделаны, проверьте правый нижний угол Arduino IDE – в нем вы должны увидеть номер COM порта, к которому подключена ваша плата. В нашем случае это оказался порт COM7.
Теперь ваша Arduino IDE готова к программированию платы разработки STM 32 Blue Pill.
Загрузка программы мигания светодиодом в плату STM32F103C8T6
Чтобы проверить корректность работы платы STM32F103C8T6 и возможность ее программирования с помощью Arduino IDE загрузим в нее простую программу мигания светодиодом. Пример этой программы может быть найден в следующем пункте меню Arduino IDE:
В этом примере программы нам необходимо сделать небольшие изменения. В программе по умолчанию используется контакт 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 |
Как уже указывалось ранее, перед загрузкой программы в плату STM32 ее необходимо перевести в режим программирования, для этого нужно переместить джампер boot 0 в нижнее положение. Положения данного джампера для режимов работы и программирования показано на следующем рисунке.
Перед загрузкой программы удостоверьтесь в том, что данный джампер установлен для режима программирования, после этого нажмите кнопку сброса (Reset button). Как только вы нажмете данную кнопку плата перейдет в режим программирования и зеленый светодиод выключится – это будет означать что плата готова к загрузке программы. Нажмите кнопку загрузки программы (upload button) в Arduino IDE, после этого ваша программа должна скомпилироваться и записаться в плату. Если все работает так, как надо, то на экране вы должны увидеть примерно следующую картину.
Примечание: иногда Arduino IDE будет показывать сообщение Uploading даже если программе не удалось успешно загрузиться в плату. Поэтому по процентам загрузки программы (выделены оранжевым цветом в консоли) проверяйте действительно ли программа загрузилась успешно.
Тестирование работы проекта
При успешной загрузке программы в плату STM32 вы должны увидеть как светодиод зеленого цвета начнет мигать с интервалом в 1 секунду. Вы можете увеличить или уменьшить этот интервал по своему желанию.
После загрузки программы в плату необходимо джампер boot 0 снова перевести в режим работы чтобы при следующем после выключения подаче питания на плату программа начала выполняться автоматически.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
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 (ждем секунду) } |
И снова здравствуйте.
Пока успехами в освоении STM32 похвастаться не могу.
У меня уже целая коллекция микроконтроллеров: STM32, ESP8266, LGT8P32F. Жду ESP12, но 1 АЦП мало.
Пока успех только с LGT, и то не все ножки ШИМ работают как обещано (2 и 8), пришлось делать программный ШИМ, благо это пяток комманд всего. И скорость с 8 разрядов мала...
У ESP вообще смешно - программируется только синий LED, при изменении № ножки со 2-й на любую - нирвана!
STM32 не хочет глотать бинарник. Ни через USB, ни с программатором. Обращался на ардуиновский форум - бестолку. Перепробовал всё что мог.
В вашей статье не сказано про драйвера на Blupill, а при первом подключении к USB винда сама нашла нечто типа Мапл и без спроса установила драйвер. Не может он кино портить?
Через STM32CubeProgrammer удаётся впихнуть бинарник, но полная тишина даже с блинк-ом.
Надеюсь на позитивный совет. Спасибо!
Добрый вечер, это немного архаичная статья про начало работы с STM32, с помощью платы FTDI. Посмотрите более свежую статью про программирование STM32 Blue Pill через USB порт с помощью Arduino IDE, в ней написано про Maple Boot loader для этой платы.
Здравствуйте, я Вам ответил на уроке по ссылке, но пока жду контактов. В результате всех манипуляций подозреваю, что Win-10/64 душит рекомендованные драйвера. Теперь и программатор FTD232 потерялся в "устройствах". Просил помочь знакомого системщика - он заявляет, что в FTDI_Driver_2.08.14 винда вообще не находит годных драйверов. Пр крайней мере, батники вываливаются без "sucсess, press any..."
Блин, я перемычку забыл вернуть!!!
А вот что с программатором?.. - неизвестное USB-устройство
Пора снова тайм-аут брать на месяц.
Не вижу почему то вашего ответа. Может он со спамом удалился случайно
Добрый вечер!
Вы забыли в статье по настойку работы через USB указать один важный момент. Драйвера надо устанавливать ОТ АДМИНИСТРАТОРА! Может быть, опытным пользователям это очевидно, а некоторым...
Так драйвера встали, но скетч все равно не грузится, будем продолжать эксперименты. Пока успех только с 8-разрядной LGT8f...
Хорошо, спасибо за уточнение
Еще у меня есть такое мнение, что на системах с процессорами AMD эти maple com драйвера не очень то и работают. Проверялось на 3 ноутбуках, два из них на intel и там все сразу заработало, а один с amd и там при подключении новых com устройств не появляется в диспетчере. В интернетах ничего не нашел по этому поводу, хотя может плохо искал
Мне кажется что от типа процессора это не должно зависеть. Установкой драйверов ведь занимается операционная система, установленная на компьютере
Ура!
Стоит мне только Вам поплакаться - мозги прочищаются и приходят мысли!...
Итог:
Скетч использует 15816 байт (24%) памяти устройства. Всего доступно 65536 байт.
Глобальные переменные используют 1656 байт (8%) динамической памяти, оставляя 18824 байт для локальных переменных. Максимум: 20480 байт.
Спасибо!
Осталось дождаться посылки из Китая и освоить коммутацию с Большим Братом...
Я рад что у вас получилось. Надеюсь после того как соберете задуманное отпишитесь нам здесь о своих успехах
Вроде нашёл, извиняюсь за беспокойство! Но т.к. я самый начинающий ардуинщик - я Вас потревожу!
Да ничего страшного, Вячеслав. Когда сам смог разобраться в чем либо - это запомнится надолго
Спасибо за доброжелательное отношение!
Я, увидев на Али микроконтроллеры с USB, вспомнил проклятый харьковский КТС ЛИУС-2 размером с телефонную будку... и заказал оба - 8266 и 32. Пока дожидаюсь посылки, грызу с переменным успехом С++. Вот проблема:
самая первая строка: float XCurr ;
const int Mph=19 ;
далее: ...
void loop() {
Xcurr=float(analogRead(Mph)) ;
...
при компиляции:
D:\.....\MyProj\DLM\DLM.ino:50:1: error: 'Xcurr' was not declared in this scope
Xcurr=float(analogRead(Mph)) ;
И таких сообщений больше, блин, чем зубов во рту!!!
а всего сообщений больше чем строк программы.
Что я проворонил?
И еще - Ардуино нумерует строки скетча(!), а компилятор № ошибочных строк не показывает. Может, как-то это настраивается?..
Попробуйте объявить свою переменную прямо в функции void loop(). Например, сделайте аналогично следующей строчке:
float h = dht.readHumidity()
Пример можно посмотреть в этой статье.
Добрый день! Спасибо!
Я же вроде отправил сообщение, что как Вам поплакался - мозги прояснились и через полчаса компиляция прошла без ошибок. Просто С++ не понимал заглавных буквОВ. - После этого осознания процесс полетел!
Теперь осталось дождаться посылки (которую обещали в середине ноября) - и заняться практикой.
Только вот мучает вопрос - для 8266 есть команда смены f процессора (правда, для Питона = pyb.freq(Hz)). А в ардуино - не нашёл.
Ну будем надеяться что посылка дойдет до вас в целости и сохранности и вы реализуете свой задуманный проект. Про команду смены процессора, к сожалению, не знаю
Добрый день!
Шаг 3. Откроется новое диалоговое окно. В данном окне в поле additional Boards Manager URL вставьте следующую ссылку:
dan.drown.org/stm32duino/package_STM32duino_index.json
в релизе Version: 2.0.4-nightly-20221209
не нашел такой строки. Как быть, где искать?..