Разбираясь, какие сейчас существуют отладочные платы на базе ICE40, я обратил особое внимание на BlackIce II. Дело в том, что мне стало надоедать постоянно возиться с проводами при подключении сторонних модулей к iCEstick. Для решения этой проблемы BlackIce II имеет множество Pmod-разъемов, является совместимой с Arduino-шилдами, а также имеет распаянные 4 Мбит SRAM и разъем для подключения SD-карты. Интересно, что на плате есть не только FPGA ICE40HX4K, но и микроконтроллер STM32L433. Так получилось, что микроконтроллеры STM32 меня тоже интересуют. Было бы удобно иметь устройство «два в одном». Наконец, плата является полностью открытым проектом, и самое главное — она черная! В общем, я решил обзавестись такой.

Ранее в заметке Микроконтроллеры STM32: работа с экранчиком 1602 по I2C мы научились выводить текст на HD44780-совместимый ЖК-индикатор с I2C-адаптером на базе чипа PCF8574. Эти индикаторы хороши тем, что они не дороги, имеют подсветку и позволяют выводить крупный текст. Но при этом они не могут похвастаться большой скоростью перерисовки, широким углом обзора, или возможностью выводить графическую информацию. Плюс к этому, они довольно громоздки, что в определенных задачах может быть неудобно. Поэтому сегодня мы поговорим о популярных OLED-дисплеях на базе чипа SSD1306, лишенных названных недостатков.

Текстовые ЖК-дисплеи с I2C-адапетором являются крайне популярными устройствами среди любителей электроники. Да и в массово производимой технике, от кофе-машин до 3D-принтеров, такие дисплеи встречаются нередко. На AliExpress устройство можно купить за 100 рублей (1.75$) — дешевле вы найдете разве что этот же экранчик без I2C или семисегментные индикаторы. Давайте же разберемся, как подружить такой дисплей с микроконтроллером STM32.

Благодаря заметке Микроконтроллеры STM32: работа с внешним EEPROM мы научились работать с внешней EEPROM-памятью с I2C-интерфейсом. Сегодня же мы научимся использовать флеш-память с SPI-интерфейсом на примере популярных чипов AT45DBxx. Существуют разные модификации этих чипов, отличающиеся в основном объемом памяти. При написании этой заметки я использовал AT45DB161E объемом 16 Мбит (2 Мб). Но, по идее, все описанное ниже справедливо и для других чипов этой серии.

Одна из проблем с микроконтроллерами STM32 заключается в том, что большинство из них не имеют встроенного EEPROM. Исключением являются только микроконтроллеры серий STM32L0 и STM32L1 с ультра низким энергопотреблением. Это довольно странно после работы с AVR, где EEPROM есть у всех микроконтроллеров. Существует несколько решений, но в рамках этой заметки мы рассмотрим самое очевидное — использование внешнего EEPROM на примере чипа с I2C-интерфейсом 24LC64.

Ранее мы познакомились с несколькими отладочными платами на базе микроконтроллеров STM32 — это Blue Pill, платами серии Nucleo, и даже такой экзотикой, как Кракен. Все это здорово, но что, если нам захочется использовать микроконтроллер не в прототипе, а в полноценном готовом устройстве? Не вкорячивать же в него плату Nucleo! Поэтому сегодня мы разберемся, как работать с STM32 напрямую, то есть, прямо на макетной плате, на примере микроконтроллера STM32F103C8T6. Казалось бы, тема эта несложная, однако есть пара подводных граблей, про которые стоит знать.

В прошлом посте, посвященном STM32, мы познакомились с платами Nucleo, программой STM32CubeMX, узнали, как программировать под STM32 в Linux, а также осилили базовые операции с GPIO. Сегодня же мы поговорим об использовании аппаратной реализации UART. В рамках данного поста мы будем использовать UART исключительно для обмена данными с компьютером. Однако с тем же успехом его можно применять и для взаимодействия с внешними модулями.

Год назад я писал о бейдже в форме матрешки, который можно было получить на конференции ZeroNights 2016. В этом, или точнее, уже прошлом, 2017 году, на ZeroNights у организаторов одного из железных стендов также можно было получить плату-бейдж. На сей раз плата называлась Кракен и имела форму осьминога (или ананаса, смотря какой стороной повернуть :D). Кракен представляет собой отладочную плату на базе STM32F405RGT6. Насколько я смог выяснить, плату разработали Арсений Жгилев и Антон Канышев.

Ранее мы выяснили, как разрабатывать под микроконтроллеры STM32 с использованием знакомой и понятной многим Arduino IDE. Этот подход, впрочем, не лишен недостатков. В частности, он (1) вводит лишние слои абстракции, что не позволяет писать максимально эффективный и компактный код, (2) работает с весьма ограниченным множеством микроконтроллеров и плат, а также (3) привязан к конкретной среде разработки, и не самой лучшей. Поэтому сегодня мы научимся разрабатывать под STM32 по-взрослому.

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