Обучение на STM32 в массы

29.04.2019
  • Tutorial

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

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

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

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



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

Для начала, сравним основные параметры 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(алиэкспресс).
Очевидно, что отладочная плата на базе STM32 выигрывает по всём параметрам у Arduino Nano, исключением является разве что стоимость, но согласитесь 10 центов - хорошая цена за большую производительность, а про периферию, которой нафарширован STM32, так я вообще молчу, чего только стоят DMA или интегрированные в микроконтроллер часы реального времени.

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

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

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

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


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


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

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

G <-> GND;
5V <-> 5V;
PA10 <-> TXD;
PA9 <-> RXD.


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

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

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

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

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

Жмём «OK»:

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

«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

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

«dfu-util - © 2007-2008 by OpenMoko Inc.
Couldn"t find the DFU device:
This program is Free Software and has ABSOLUTELY NO WARRANTY»

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

Searching for DFU device ...

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

«Searching for DFU device …
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...»

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

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

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

Кликабельно

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


(с) www.stm32duino.com/viewtopic.php?p=11137

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

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-х долларовый кусок стеклотекстолита с чипом, а материнская плата компьютера.

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

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

Компания ST раздаёт дешёвые отладочные платы для знакомства с их микроконтроллерами. Наверняка и вы начнёте с них - поэтому я рассмотрю основные платы Discovery, чтобы вы могли выбрать себе по вкусу.

STM32VLDiscovery

Самая первая плата семейства, раньше называлась просто STM32Discovery. Именно с неё началась экспансия ST на рынок дешёвых и мощных микроконтроллеров общего назначения, этим объясняется её неприлично низкая цена - демпинг цен на эту плату принёс ST прибыль в виде множества новых адептов.

Начинка

  • Отладчик - ST-Link, SWD-коннектор наружу
  • Процессор - STM32F100RBT6 (24МГц, 128кБ флеш, 48кБ RAM)
  • 2 кнопки - юзерская и резет
  • 2 светодиода
  • сменный (!) тактовый кварц
  • часовой кварц
  • 62 контакта на гребёнке выводов, из них 51 контакт ввода-вывода
  • перемычка для определения потребляемого тока

Как видим, довольно мощная плата. Вкупе с низкой ценой (а многие, как и я, получили её бесплатно на семинарах) она произвела настоящий фурор.

К плате прилагается множество примеров использования разной периферии, и неплохой «Master project», прошитый по умолчанию.

Скачать примеры для STM32VLDiscovery .

STM32F4Discovery

Очень сильная плата, как по мощности процессора так и по количеству периферийного оборудования. Процессор класса STM32F4 имеет высокую скорость работы, множество периферии вроде контроллеров памяти/дисплеев/камеры и всевозможными USB, CAN и прочими интерфейсами, а также полноценные модули FPU и DSP. Замечательный процессор, на нём сделано довольно много из моих приборов.

Начинка

  • Процессор - STM32F407VGT6 (168МГц, 1МБ флеш, 192кБ RAM)
  • 2 кнопки - юзерская и резет
  • 4 светодиода
  • сменный тактовый кварц
  • 100 контактов на гребёнке, из них 80 контактов ввода-вывода
  • перемычка для измерения тока
  • MEMS-акселерометр LIS302DL
  • Цифровой микрофон MP45DT02
  • Аудио-АЦП CS43L22 с усилителем D-класса
  • micro-USB-коннектор

Конечно, стоит дороже - но и возможностей имеет куда больше. Прекрасная плата, удобная и мощная. В основном на ней я проводил эксперименты со звуком, с шинами CAN и USB, и акселерометром. Наличие DSP-ядра даёт возможность производить цифровую обработку аудиосигналов и навигации. Помимо перечисленной периферии, на кристалле присутствуют также модули вычисления CRC (контрольные суммы), HASH (хеш данных), CRYPT (криптография) и RNG (генератор случайных чисел).

Список прилагающихся примеров так же обширен. Из минусов - разве что не очень удобный micro-USB.

Скачать примеры для STM32F4Discovery .

STM32F3Discovery

Столь же хорошая плата, но с ещё более новым процессором серии STM32F3, и явной направленностью на навигационные применения и Sensor Fusion. Похоже, её сделали на росте популярности квадрокоптеров, которым нужен как раз такой набор датчиков положения. Также, видимо, инженеры услышали просьбы разработчиков и сделали USB в виде обычного mini-USB.

Начинка

  • Отладчик - ST-Link/V2 с расширенным SWD-коннектором
  • Процессор - STM32F303VCT6 (72МГц, 256кБ флеш, 48кБ RAM)
  • 2 кнопки - юзерская и резет
  • 8 светодиодов
  • 100 контактов на гребёнке, из них 86 контактов ввода-вывода
  • перемычка для измерения тока
  • MEMS-акселерометр/магнитометр LSM303DLHC
  • MEMS-гироскоп L3GD20
  • mini-USB-коннектор

По умолчанию прошит довольно интересный пример - магнитный компас, отображающий направление на север на светодиодном круге.

К возможностям процессора стоит добавить умножение за 1 такт и железное деление, модули вычисления CRC (контрольные суммы), HASH (хеш данных), CRYPT (криптография) и RNG (генератор случайных чисел), а также расширенные аналоговые возможности - 4 ОУ с изменяемым коэффициентом усиления, увеличенное количество (4 штуки) 12-бит АЦП и 7 компараторов. Это делает STM32F3 настоящим DSP, с отличным аналоговым интерфейсом.

На этой плате я также сделал довольно много приборов.

Скачать примеры для STM32F3Discovery .

STM32F0Discovery

Самая свежая отладочная плата - на младшем процессоре серии STM32F0.

Начинка

  • Отладчик - ST-Link/V2 с расширенным SWD-коннектором
  • Процессор - STM32F051R8T6 (48МГц, 64кБ флеш, 8кб RAM)
  • 2 кнопки - юзерская и резет
  • 2 светодиода
  • 66 контактов на гребёнке, из них 55 контактов ввода-вывода
  • перемычка для измерения тока

Эта плата интересна в первую очередь своей дешевизной и применением процессора из младшего семейства. Ведь даже самый слабый процессор ST/ARM всё равно во много раз мощнее привычных AVR и PIC, а стоит даже дешевле. Более того, здесь есть модули CRC, аналоговые компараторы и контроллер сенсорных кнопок.

Скачать примеры для STM32F0Discovery .

STM- Discovery: Через тернии - к звёздам.

Огромная номенклатура активных электронных компонентов, выпускаемых мировыми производителями, требует сегодня наличия широкого спектра оценочных и отладочных средств, необходимых для быстрого принятия решений о возможности применения в проекте того или иного компонента. Из-за высокой конкуренции на рынке современной электроники любая задержка с таким выбором может привести к потере временных и материальных ресурсов. Особое положение в этом вопросе занимают такие компоненты, как микроконтроллеры (МК). Быстро разобраться с многочисленными семействами, их возможностями и, главное, на практике убедиться в оптимальности сделанного выбора сегодня практически невозможно без применения оценочных и отладочных плат.

В этом обзоре будут рассмотрены отладочные средства одного из самых ярких разработчиков и производителей микроконтроллеров - компании ST Microelectronics (STM). Компания выпускает широкую номенклатуру 8-битных и 32-разрядных микроконтроллеров, в которые заложен передовой опыт STM в области архитектуры МК, технологии, производства и много др. В портфолио продукции компании можно найти широкий спектр микроконтроллеров от надежных бюджетных 8-битных до производительных 32-битных МК с ARM ядрами: Cortex®-M0, Cortex®-M0+, Cortex®-M3, Cortex®-M4 и Cortex®-M7 с большим выбором периферии. В линейке имеются также и сверхмалопотребляющие микроконтроллеры. На рис. 1 показан весь спектр микроконтроллерной продукции компании ST Microelectronics.

Рис. 1. Микроконтроллерная продукция ST Microelectronics

Вначале рассмотрим отладочные платы семейства discovery для 8-битных микроконтроллеров.

Микроконтроллеры STM8 до сих пор востребованы на рынке современной электроники. Они широко применяются там, где необходимы простые бюджетные, и вместе с тем, гибкие и эффективные решения. Отладочные платы семейства Discovery (см. Таблицу 1) на основе STM8 предназначены для быстрой оценки возможностей 8-битных МК, среди которых сверхмалопотребляющий STM8L, МК общего назначения из основной линейки (Mainstream) STM8S, а также МК семейства Value Line STM8SVL.

Отладочные платы STM8X(XX)-Discovery имеют ряд общих особенностей. Все выводы микроконтроллеров доступны на специально установленных разъемах. Сами микроконтроллеры имеют корпуса LQFP48 (STM8S и STM8L) и LQFP32 (STM8SVL). На каждой плате установлены 1-2 пользовательских светодиода и кнопки, а также в каждое изделие встроен программатор/отладчик ST-Link с поддержкой интерфейса SWIM. ST-Link можно использовать для работы с внешними микроконтроллерами.

Платы подключаются к PC через интерфейс USB. Необходимое питание 5 В или 3.3 В. На плате STM8L-Discovery установлен 7-сегментый LCD в корпусе DIP28, а в отладках с STM8S и SM8SVL имеется монтажное поле, которое пользователь может применить для собственных приложений. Кроме того, на STM8S-Discovery установлена пользовательская сенсорная кнопка. В Таблице 1 приведены некоторые параметры МК, а по ссылке можно перейти к более подробному описанию отладочных плат и МК.

Таблица 1.

Наименование

Микроконтроллер

Частота, MHz

Для оценки возможностей 8-битных микроконтроллеров STM8AF и STM8AL для автомобильных приложений компания ST Microelectronics выпускает комплект STM8A-Discovery, полное описание которого можно найти на сайте производителя .

Отладочные платы семейства discovery для 32-битных микроконтроллеров

STM32 Discovery - это недорогое комплексное решение для оценки выдающихся возможностей 32-разрядных микроконтроллеров с ARM Cortex-Mx STM32. Все отладочные платы имеют необходимую инфраструктуру, позволяющую демонстрировать специфические характеристики устройств, а HAL библиотека и комплекс программных примеров позволяют воспользоваться всеми преимуществами изделий. Разъемы расширения, установленные на платах, открывают доступ к большинству выводов I/O микроконтроллера и делают возможным функциональное расширение за счет подключения дополнительных плат.

Рис. 2. Отладочные платы семейства discovery

В Таблице 2 приведены основные параметры микроконтроллеров, на основе которых выпускаются соответствующие отладочные платы семейства STM32 Discovery, а также особенности некоторых плат этого семейства. По ссылкам можно легко перейти как к описанию самой отладочной платы, так и к подробному описанию установленного на ней микроконтроллера.

Таблица 2.

Наименование отладочной платы

Особенности

3-осевой гироскоп L3GD20

2.04” E-paper дисплей 172x72 пикселя

ЖКИ 24х4 сегмента

3-осевой гироскоп L3GD20, 3-осевой акселерометр и магнитометр LSM303DLHC, всенаправленный микрофон MP45DT02 и аудио ЦАП с усилителем D-класса CS43L22

2.4" QVGA TFT ЖКИ, 64 Мбит SDRAM, 3-осевой гироскоп L3GD20

4.3" 480x272 цветной TFT ЖКИ, 128 Мбит Flash, 128 Мбит SDRAM, Ethernet, USB OTG HS, USB OTG FS, 2 цифровых микрофона MP34DT01TR

Заметим, что на каждой плате STM32 Discovery установлен программатор/отладчик ST-Link/V2 или ST-Link/V2-1, который также можно использовать в качестве отдельного программатора для внешних устройств. Все выводы микроконтроллера доступны на разъемах платы. Питание осуществляется через шину USB или от внешнего источника. На платах установлены: светодиоды - статусные (т.е. индицирующие состояние питания, обмена данными и т.д.) и пользовательские, кнопки сброса МК и для задач пользователя. Кроме того, на ряде плат имеются MЭMC датчики - акселерометры, гироскопы, микрофоны и др., а также средства визуализации, такие как TFT и E-Ink дисплеи, сегментные ЖКИ.

Используя многофункциональные выводы микроконтроллера, различное программное обеспечение, включая бесплатное, например, STM32Cube, HAL библиотеки и др., можно быстро оценить возможности того или иного микроконтроллера и эффективно провести разработку целевого приложения. Семейство плат поддерживается многими широко известными интегрированными средами разработки - IAR Embedded Workbench, MDK-ARM (Keil), TrueStudio (Atollic) и др.

Обзор составил и подготовил
Шрага Александр,
a.

Похожие статьи