Обучение на STM32 в массы. Работа с ЖК индикатором на отладочной плате STM32L-Discovery

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

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

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


Уже много лет радиолюбители применяют восьмиразрядные микроконтроллеры семейств PIC и AVR. Они популярны благодаря низкой цене, наличию подробной документации, простоте программирования и лёгкости монтажа. Однако довольно часто бывают случаи, что мощности такого микроконтроллера для решения поставленной задачи недостаточно. Самый простой пример - частотомер или генератор сигналов на микроконтроллере, где максимальная измеряемая или генерируемая частота напрямую зависит от скорости обработки или вывода информации.

Помимо скорости, восьмиразрядные микроконтроллеры имеют и другие ограничения, например, во многих моделях AVR всего один аппаратный последовательный порт, что не позволяет получать информацию от внешнего устройства и одновременно пересылать результаты её обработки потребителю. Не говоря уже о таких "банальных" вещах, как вывод информации на графический индикатор, требующий больших ресурсов как скорости, так и памяти. После анализа ряда таких ограничений у автора возникла мысль о переходе на микроконтроллеры семейства STM32.

Для примера рассмотрим два микроконтроллера одной ценовой категории - STM32F103C6 и ATmega328P.

Таблица 1

Тип микроконтроллера

Разрядность процессора

Шаг выводов, мм

Тактовая частота, МГц

Объём FLASH-памяти. Кбайт

Объём ОЗУ, Кбайт

Число USART

Число 16-разрядных таймеров

Число линий ввода-вывода

Ориентировочная цена, руб.

Их сравнительные параметры приведены в табл. 1. Результаты сравнения даже несколько удивляют. 32-разрядный микроконтроллер не только мощнее восьмиразрядного практически по всем параметрам, но при этом дешевле. Разумеется, паять микроконтроллер с шагом выводов 0,5 мм в домашних условиях не так-то просто. К счастью, в большинстве случаев этого и не требуется - на рынке имеется множество разновидностей отладочных плат с микроконтроллерами семейства STM32, достаточных для различных применений. Рассмотрим их более подробно.

STM32F4-DISCOVERY

Эта плата (она изображена на рис. 1), пожалуй, наиболее удобна для начинающих изучение микроконтроллеров STM. Во-первых, она имеет большой набор периферийных устройств. Помимо микроконтроллера, на плате установлены микроэлектромеханический акселерометр, микрофон, аудиоЦАП, два разъёма USB, кнопка и четыре светодиода.

Выводы микроконтроллера выведены на контактные площадки для монтажа штыревых разъёмов у левого и правого краёв платы, что позволяет легко подключать к ним все необходимые внешние устройства. Установленный на плате микроконтроллер STM32F407VGT6 имеет весьма неплохие параметры: 1 Мбайт FLASH-памяти, 192 Кбайт ОЗУ и тактовую частоту 168 МГц.

И наконец, плата оборудована встроенным отладчиком ST-LINK/V2, который можно использовать для отладки программ не только на имеющемся на плате микроконтроллере, но и на микроконтроллерах того же семейства, находящихся на других платах. Переключение на них выполняется с помощью съёмной перемычки и разъёма SWD.

Цена платы - около 800 руб., что можно считать вполне приемлемым.

STM32F103RBT6 Development Board

Следующим интересным вариантом является отладочная плата с микроконтроллером STM32F103RBT6 (рис. 2).

Он несколько слабее, чем установленный на предыдущей плате - тактовая частота 72 МГц, 128 Кбайт FLASH-памя-ти и 20 Кбайт ОЗУ, однако периферийные устройства весьма интересны. Имеются сенсорный TFT-экран с разрешением 320x240 пкс и диагональю 2.8", встроенный USB-порт для обмена информацией с компьютером, разъём для карты памяти SD, часовой кварц на 32768 Гц, отсек для элемента питания часов реального времени и разъём ST-LINK для отладки программ.

Цена этой платы также около 800 руб., но следует заметить, что встроенного отладчика на ней нет. Для загрузки программ необходимо либо приобрести отдельный отладчик ST-LINK, либо использовать вместо него рассмотренную выше плату STM32F4-DISCOVERY

Maple Mini

Бросается в глаза внешнее сходство этой платы (рис. 3) с широко известными модулями Arduino. И это не случайно.

Плата Maple Mini и была разработана как замена Arduino Nano. Язык программирования и среда разработки для устанавливаемых в Arduino микроконтроллеров семейства AVR были адаптированы под семейство STM. На интернет-странице http://leaflabs.com/docs/maple-q uickstart.html можно найти подробную информацию о языке программирования и среде разработки Maple IDE.

Отладочная плата имеет микроконтроллер STM32F103CBT6, работающий на тактовой частоте 72 МГц, имеющий 128 Кбайт FLASH-памяти и 20 Кбайт ОЗУ, что, несомненно, больше, чем в любом модуле Arduino. И тем больший плюс, что среда разработки практически не изменилась.

Отдельно заметим, что несмотря на миниатюрные размеры, Maple Mini предоставляет весьма разнообразную периферию: 34 линии ввода/вывода, два интерфейсных канала SPI и два I2C, три последовательных порта. Это позволяет с успехом применять её в различных любительских разработках. Благодаря малым размерам Maple Mini может быть встроена непосредственно в разрабатываемое устройство.

Оригинальную плату Maple Mini можно приобрести за 35 долл. США на сайте её разработчиков. Ещё 5 долл. США будет стоить доставка. Копия платы, изготовленная в Китае, обойдётся вдвое дешевле.

Программное обеспечение

Существуют несколько вариантов сред разработки, которые можно использовать для подготовки программ для микроконтроллеров семейства STM32:

Коммерческие IAR Embedded Workbench, AtollicTrueSTUDIO, Keil и др. Эти полнофункциональные продукты довольно дороги, с ценой лицензии от 1000 евро, но имеются и демонстрационные бесплатные версии с ограничением на объём разрабатываемой программы, для большинства несложных проектов их вполне хватает;

Бесплатная Eclipse с компилятором ARM-GCC требует нетривиальной настройки компилятора перед использованием. Единственный плюс на сегодняшний день - возможность работы не только в Windows, но и в Linux;

Бесплатная CooCox IDE (CoIDE) на базе того же редактора Eclipse. Выполняет загрузку и отладку программ через ST-LINK. В отличие от предыдущего варианта, CoIDE не требует каких-либо специальных настроек и работает сразу же после установки. Этот вариант наиболее удобен, им и стоит воспользоваться.

Воспользуемся CooCox IDE для создания примера программы для платы STM32F4-DISCOVERY реализующей классическое для первой программы для любого микроконтроллера мигание светодиодов. На плате STM32F4-DIS-COVERY имеются четыре светодиода, подключены они к выводам PD12- PD15 микроконтроллера. Сделаем так, чтобы они мигали поочерёдно.

Шаг 1. Запускаем среду разработки CoIDE, создаём проект. Из выпадающего списка, показанного на рис. 4, выбираем микроконтроллер STM32F407VG.

Шаг 2. Как показано на рис. 5, выбираем компоненты, которые будут использованы в проекте. Основные из них - это GPIO (ввод-вывод), С Library (базовые функции языка С) и M4 Core (функции ядра процессора). При активизации того или иного компонента CoIDE автоматически копирует нужные файлы в папку проекта, что очень удобно.

Шаг 3. Ввод текста программы. Он довольно короткий и приведён в табл. 2.

Как можно видеть, всё просто и очевидно. Те, кто писал программы для микроконтроллеров AVR, наверняка увидят знакомые конструкции - инициализацию портов с указанием направления (ввод или вывод), главный цикл, в котором выполняются нужные действия. В целом же синтаксис программы полностью соответствует языку С, литературы по которому более чем достаточно. Статей по программированию для STM32 в Интернете также немало. Много примеров поставляется вместе с отладочной платой, их тоже можно использовать как образцы.

После ввода текста программы нажатием на экранную кнопку "Download to flash" она загружается в микроконтроллер. Светодиоды на плате начинают мигать. Отдельно стоит отметить возможности отладки - в любом месте программы может быть поставлена точка останова, можно запускать программу по шагам, просматривая значения переменных.

Разумеется, этот пример не идеален. Например, для управления миганием светодиодов можно воспользоваться прерываниями от таймера, что освободит главный цикл программы для других задач. Желающие могут разобраться с этим самостоятельно.

Заключение

В целом, после первого знакомства микроконтроллеры семейства STM32 оставили весьма приятное впечатление. Всё оказалось не так сложно, а удобство среды разработки, процесса отладки и большое число стандартных функций чем-то даже напомнили переход от Ms DOS к Windows - общие моменты вроде те же, но все гораздо удобнее и функциональнее.

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

Стоит ли переделывать всё на STM и 32-разрядную архитектуру? Конечно же, нет. Есть задачи, для решения которых и ATtiny вполне достаточно. Но, например, для анализа спектра в самодельном SDR-приёмнике или приёма- передачи больших объёмов информации по сети гораздо эффективнее сразу применить мощный микроконтроллер, чтобы не упереться в недостаток памяти или производительности при совершенствовании устройства.

На основе ядра Cortex начали активно набирать популярность, как среди профессиональных, так и среди начинающих разработчиков устройств на микроконтроллерах. Причин тому несколько:
- невысокая цена по сравнению с конкурентами;
- большое количество встроенных интерфейсов;
- простота в программировании и высокая надежность.
Но при этом есть и один важный недостаток – все микроконтроллеры STM не выпускаются в DIP корпусах, что зачастую просто отпугивает новичков, ведь изготовить плату с дорожками менее 0,3мм в домашних условиях проблематично. Такое положение дел привело к появлению на рынке огромного количества отладочных плат, как от ST Microelectronics (Discovery), так и платы, выпущенные сторонними фирмами (Olimex, Pinboard). Мой выбор пал на Discovery по трем причинам:
- относительно невысокая цена (плату можно купить от 300р.);
- хорошее качество исполнения (хотя некоторые претензии к разводке есть, но они не столь существенны);
- много исходников и примеров выложено на сайте производителя;
- наличие встроенного программатора (вам не придется покупать его отдельно).
Цель первого урока – помочь начинающему разработчику выбрать отладочную плату, а в дальнейшем - научить основам программирования.
Итак, поехали.

STM32F0DISCOVERY

Данная плата была выпущена в феврале 2012 года с целью привлечения разработчиков, ранее использовавшие 8-ми битные микроконтроллеры, тем самым заняв эту нишу. Ничего плохого, как и хорошего, о ней сказать не могу. Обычная плата, недорогая, для начала подходит отлично. Имеет следующие характеристики:
- микроконтроллер: STM32F051R8T6 (Cortex M0, 48МГц, flash 64Кб, RAM 8Кб);
- встроенный ST-link/V2, который можно использовать отдельно от платы;
- питание от USB или от внешнего источника 3/5В;
- 4 светодиода и 2 кнопки;
- интерфейсы: USART, SPI, I2C, HDMI;
- таймеры 16 и 32 бит;
- все выводы выведены на две однорядных гребенки.
Собственно такая плата уже достаточно устарела, и брать ее рекомендуется только для самого начала обучения.

STM32VLDISCOVERY

Отличается от предыдущей платы только процессором STM32F100RBT6B (Cortex M3, 24МГц, flash 128Кб, RAM 8Кб) и разводкой гребенок периферии. Так же как и выше рассмотренная подходит для начинающих разработчиков. Больше о ней сказать и нечего.

STM32LDISCOVERY

STM32LDISCOVERY достойный результат эволюции предыдущей платы. Вот что в ней есть интересного:
- микроконтроллер STM32L152RBT6 (Cortex M3, 32МГц, flash 128Кб, RAM 8Кб, EEPROM 4Кб)
- интерфейсы: USB, USART, SPI, I2C;
- 8 таймеров;
- 24-канальный 12-битный АЦП;
-12-битный ЦАП;
- часы реального времени;
- контроллер LCD 8х40
- встроенный ST-link/V2.
На плате установлены:
- LCD дисплей 24х8;
- 4 светодиода;
- 2 кнопки;
- сенсорная клавиатура;
- 2 однорядные гребенки со свободными выводами.
О USB хочется сказать отдельно: контроллер поддерживает USB 2.0 full speed, режимы host и device, что нечасто встретишь у МК такого класса.
По сути плата оптимальный вариант для работы с ядром Cortex-M3, так что можно смело брать, благо цена невысокая.

STM32F3DISCOVERY

STM32F3DISCOVERY относится к следующему поколению отладочных плат от STM и обладает следующими характеристиками:
- микроконтроллер STM32F303VCT6 (Cortex M4, 72МГц, flash 256Кб, RAM 48Кб)
- часы реального времени;
- встроенный ST-link/V2;
- 13 таймеров;
- 12 канальный DMA контроллер;
- 4 АЦП;
- 4 операционных усилителя;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 линий GPIO.

- пользовательский USB-порт;
- 3-х осевой акселерометр и 3-х осевой геомагнитный сенсор в одном корпусе;
- 3-х осевой гироскоп;
- 10 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки.
Очень интересная плата, много возможностей для опытов. В целом мнение о ней осталось хорошее, но ее заточенность под отслеживание физического состояния и положения сильно сокращают простор для экспериментов, хотя легко можно самому сделать плату расширения.

STM32F4DISCOVERY

С этой платой мне довелось работать больше всего, да и понравилась она мне больше остальных – сказалась ее всесторонняя направленность.
Вот что она из себя представляет:
- микроконтроллер STM32F407VGT6 (Cortex M4, 168МГц, flash 1Мб, RAM 192Кб)
- встроенный ST-link/V2;
- таймеры;
- DMA контроллер;
- АЦП/ЦАП;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
На плате размещена следующая периферия:
- пользовательский USB-порт;
- 3-х осевой акселерометр;
- 8 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки;
- аудио ЦАП с усилителем класса D;
- всенаправленный цифровой микрофон.

Как я писал выше, эта плата стала для меня основной, порадовала способность работы со звуком, акселерометр.

Дальнейшие уроки будут основываться именно на этой плате.

Резюме.
Если вы решили начать работать с отладочными платами STM, то советую брать именно STM32F4DISCOVERY, на мой взгляд, у нее наибольший функционал. Дальнейшие статьи будут основываться именно на работе с ней. В ближайшее время будут написаны статьи на следующие темы:
- работа с GPIO, таймерами, прерываниями и т.п.;
- работа с интерфейсами UART, SPI, I2C и 1-wire на примерах реальных устройств, таких как дисплеи, GPS и GSM модули, датчики температуры, связь с компьютером по RS-232 и многое другое.
Конечная цель этого цикла – создание платы расширения для STM32F4. Все прошивки и схемы будут общедоступны.

Я очередной выпускник некоего московского вуза (не буду уточнять какого, но средненького). Полгода назад нам сообщили, что пора писать диплом. На тот момент я только-только начал осваивать микроконтроллеры и давалось мне это не то, чтобы нелегко, но со скрипом, который производит холодильник, когда ты, в одиночку, пытаешься аккуратно сдвинуть его, не повредив драгоценный ламинат (в моем случае линолеум).

Мое обучение началось, когда я два года назад заинтересовался темой микроконтроллеров и инженер, у которого поинтересовался насчет них, выдал мне плату 300х200мм и сказал, что в ней стоит контроллер STM32F217ZGT6 и на этой плате есть все необходимое для обучения. «В общем, освоишь ее - все остальное покажется фигней» (он, правда, не сказал, что для моргания светодиодом надо настроить SPI, о котором на тот момент я даже не слышал). Спустя три не очень напряженных месяца бесплотных попыток, осознания слабости навыков программирования и огромного количества прочитанных статей пришлось все же раскошелится на STM32VLDISCOVERY и способом копирования программ и экспериментов с ними дело наконец-то пошло, но все равно медленно.

За полтора года успел поработать разработчиком, искал вакансии, где работают с STM32 (так как считаю, что сейчас это наиболее перспективные микроконтроллеры своего класса), нахватался опыта и когда дело дошло до диплома, вспомнил о своих наболевших мозолях. Идея с темой пришла мгновенно: «Отладочная плата на STM32 и (полноценный) обучающий курс (для самых маленьких) к ней».

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

Жизнь показала, что времени у меня было отнюдь не полгода, но все же все время, отведенное на диплом, почти закончилось, совсем скоро защита, но как не удивительно все не только готово, но и почти на 100% протестировано (на живых людях в том числе).

На выходе получилось следующее:

1. Сам курс (методическое пособие по-научному)

Вкратце о нем можно сказать, что на мой взгляд и по отзывам тестировщиков он полноценный, но немного суровый и не доработанный. Так как я решил, что не буду писать учебник по программированию на СИ, следовательно, и в курсе отсутствуют объяснения операторов, оттого и сказали, что местами курс суров. По поводу недоработанности честно скажу, я не все успел отладить к сдаче, чтобы об этом писать не только здесь, но и в методическом пособии к сдаче. Так же считаю, что можно лучше, но об этом чуть позже.

2. Отладочная плата на контроллере STM32F103RET6

Здесь все немного лучше, чем в первом пункте, плата разработана, заказана (из-за обстоятельств заказывать пришлось срочно) в Резоните, компоненты заказаны, спаяна ручками (честно скажу, никакое видео не передаст ощущения первой пайки LQFP64) и протестирована (большее ее часть заработала сразу же). Но это макет и, конечно, не обошлось без накладок: проводков, переходников и других различных «костылей», но заказать вторую ревизию я, к несчастью, не успею, да наверно и не стал бы, для защиты диплома, уверен и этого хватит. Так что ниже я расскажу более подробно об этой отладочной плате.

Придя на первую работу в качестве разработчика электроники, я столкнулся с одним интересным мнением и, как оказалось, оно весьма распространено. Это мнение звучало примерно так: «Вот я программист и программирую микроконтроллеры, схемотехнику не знаю и знать не хочу, паять, кстати, тоже не умею». Пообщавшись с группой программистов вне фирмы, понял, что человек с моей работы далеко не одинок в своем мнении и хоть я его и не поддерживаю, понять и уважать мнение окружающих стоит, тем более это отлично вписывалось в тогдашнюю концепцию отладочной платы «все на борту». В связи с этим плата получилось достаточно «жирненькая», получила название STM32SB (SB-StudyBoard) V1.0b. Ниже разберем, что в нее вошло.

1. Микроконтроллер
Исходя из того, что я работал с микроконтроллером STM32F103RET6, он и был выбран для проекта.

2. Схема питания и аппаратный USB контроллера
В этом микроконтроллере есть встроенный USB, который было решено вывести на отдельный разъем.

3. Спикер
Было решено ввести для освоения ШИМ модуляции и обучению написанию мелодий.

4. Цифровой индикатор и сдвиговый резистор
Для одновременного освоения динамической индикацией и сдвиговым регистром было решено их совместить.

5. Светодиоды
Светодиоды, что может быть лучше? Только трехцветные светодиоды, на которых можно освоить плавную смену цветов.

6. ЖК-дисплей
Стандартный ЖК-дисплей на 2 строки по 16 символов для освоения параллельного интерфейса.

7. Клавиатура
Матричная клавиатура, это нужно знать и уметь.

8. Расширитель портов ввода-вывода
Много портов ввода-вывода не бывает, а тут еще и I2C освоить можно.

9. Электронный термометр
Датчик температуры по 1-Wire, полезная вещь и ценный опыт работы с ним может пригодиться.

10. Электронный потенциометр
На этой вещице можно освоить полноценный SPI и попробовать сделать замеры изменения напряжения через АЦП.

11. Реле
Хоть это и на уровне поморгать светодиодом, но все же приятно услышать знакомый щелчок, правда?

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

13. Дублирование свободных пинов на внешних выводах
Ну это естественная конструкция для любой отладочной платы, вдруг все, что в ней есть никому не пригодилось, а подключить, что то свое все же нужно.

14. Преобразователь WIFI-UART(esp8266)
В схеме преобразователь участвует как разъем, также он указан и здесь. Используется уже довольно нашумевший модуль esp8266.

15. Преобразователь USB-UART
USB это всегда круто, сдесь используется чип CP2102.

16. JTAG и SWD
Ну куда же без этих вещей.

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

Конечно, не обошлось без накладок, но, как говорит один знакомый инженер, «мастерство инженера измеряется в количестве перерезанных дорожек на первой итерации платы».

Вот список моих «косяков», того, чего я не заметил, забыл или даже не знал при разработке этой платы:

1. Понял, что пины SWD расположены с странном порядке и хоть работе платы это не мешает. Услышал, на мой взгляд, правильное мнение, что их стоит располагать так, как они расположены на STM32VLDISCOVERY, чтобы избежать недоразумений у нового пользователя.

2. Так подключать одноцветные светодиоды, как на данной плате, не стоит, по причине того, что для моргания ими необходимо отремапить JTAG, но получился неожиданный для меня эффект индикации процесса загрузки прошивки.

3. Я разработал свой логотип для этой платы, который хотел перевести в PCB и разместить на плате, но забыл.

4. Для экономии места во второй ревизии платы я бы разместил некоторые не используемые пользователем SMD компоненты на нижней стороне платы.

5. Понял, что для более удобной разводки цепей с кварцевыми резонаторами было бы удобно заменить их на SMD.

6. Забыл подписать, где JTAG и SWD, так же у них не показано, как их подключать и если для JTAG и его разъемом BH-20 все не так сложно, то с SWD ситуация несколько опасней.

7. При разработке футпринта ЖК-дисплея вышел казус и отверстия оказались слишком малы для болтов М3.

8. У преобразователя CP2102 перепутаны выводы RX и TX. Так как я привык, что в документации приводится пример подключения относительно микроконтроллера, а не внешнего устройства, пришлось перерезать таки 2 дорожки.

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

10. Вышла накладка с резисторами ограничения тока в цепи индикации включения реле, номинал оказался слишком большой для того, чтобы реле могло коммутироваться.

11. Ну и, как водится, «хорошая мысля приходит опосля». Так, уже после получения платы я понял, что стоило сделать размер ее подходящий хоть под какой-нибудь корпус - видимо придется доработать во второй ревизии.

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

Напоследок покажу вам 3D модель этой платы:

И для сравнения фотографии ее же, как она получилась «в живую», вид с верху:

И вид с боку, чтоб было видно побольше «костылей»:

Извините, но весь проект до сдачи диплома выкладывать мне бы не хотелось, но после этой работы у меня встал вопрос, а стоит ли данный проект развивать? Меня посетила идея написать цикл статей, посвященных обучению, где был бы представлен такой вот полноценный курс по этой отладочной плате, где все написано простыми словами и объяснено на пальцах. Хотелось бы услышать от вас в комментариях насколько это было бы полезно и необходимо на настоящее время.

Спасибо за внимание!

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.