Как стать автором
Обновить

Нестандартный способ подружиться с STM32: не Ардуино и не Discovery

Время на прочтение 4 мин
Количество просмотров 25K

Всем, кто использует или интересуется микроконтроллерами фирмы STMicroelectronics, хочу представить свой небольшой хобби-проект.


И на Хабре, и на geektimes уже достаточно много статей, посвящённых микроконтроллерам серии STM32F, например: Дешевая STM32 плата + Arduino IDE, Попытка подружиться с STM32 и ответ на неё Как надо дружиться с STM32 и многие другие. В совокупности они очень хорошо освещают эту тему, но есть одно но… Во всех этих статьях рассматриваются готовые платы и один конкретный контроллер, что на этой плате. А что делать тем, кто хочет поиграться с разными контроллерами, да ещё и на макетной плате? Например, многие известные мне платы с контроллером STM32F4 (та же STM32F4-Discovery) в макетную плату не воткнуть. Но мне лично хочется что-то типа такого (внимание, все картинки кликабельны):



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


Введение (навеяно комментариями к статье, поэтому просьба пропустить до прочтения оных)

Использовать или нет макетные платы с разъемами — это вопрос достаточно спорный. Конечно, начиная с какого-то количества компонент, они становятся неудобными. Но пока компонент не очень много, а количество экпериментов на начальной стадии прототипирования еще велико, макетные платы, на мой взгляд, удобны. И вот тут, если хочется использовать STM32, нас поджидает засада — их просто нет в DIP корпусах, в отличиет от той же Atmega. Можно покупать готовые демо-платы, но тут опять засада — большинство таких плат со старшими контроллерами нельзя воткнуть в макетку из-за сдвоенных гребенок. То есть, используя готовые демо-платы, мы вынуждены работать с младшими контроллерами серии (см. то же Nucleo в DIP-варианте или Blue Pill). Второй путь — делать специализированние адаптеры. В данной статье этот второй путь и рассматривается.


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



Один набор (справа) — это просто незамысловатые адаптеры для макетной платы для корпусов LQFP32/48/64, а вот второй набор (слева) — тоже адаптеры, но уже с JTAG-разъёмом, питанием, низкочастотным и высокочастотным кварцами и кнопкой перезагрузки. Все остальные выводы контроллера — на гребёнке. В общем, самый минимум. К сожалению, JTAG-разъём не стандартный, поэтому в комплекте есть также плата переходника с JTAG-20 на этот самый JTAG-10.


Эти платы достаточно легко паяются феном в домашних условиях, так что, имея в наличии несколько контроллеров, несколько плат и пассивные компоненты размера 0805, можно за разумное время получить что-то типа такого:



А это, как мне кажется, даёт неплохую свободу творчества. Если кому-то тема на этом кажется исчерпанной, то вот ссылка на github-репозиторий.


Я же хочу дальше пошагово рассказать, как дойти до жизни такой. Картинка для привлечения внимания (графическая постановка задачи):



Есть россыпь контроллеров (серии L0, F3, F4), питание, USART-USB конвертор, макетная плата. Хочу поморгать светодиодами. Этот шаг делается очень легко. Берём любой контроллер, плату адаптера из первого набора, паяем феном. Далее нужна документация по подключению питания, программатора, кварцев. Тут у ST полный порядок, все есть на странице с документацией выбранного контроллера. Например, для STM32F303K8 нам понадобится только один документ: AN4206: Getting started with STM32F3 series hardware development, где есть схемы подключения питания, осциллятора и программатора, на основе чего можно собрать такую модель:



У этого контроллера нет внешнего низкочастотного кварца, поэтому я подключил только высокочастотный на 16МГц. Для программирования используется стандартный разъём JTAG-20, которым оснащён стандартный программатор от ST ST-LINK/V2.


Если вы используете Linux

Драйвера уже есть в ядре, но необходимо вручную добавить несколько правил в файл /etc/udev/rules.d, см. Например, тут


Так как статья посвящена в большей степени аппаратной части, то я лишь кратко упомяну про программную часть. Операционная система: Fedora 25. Среда разработки: System Workbench for STM32 — это полностью бесплатная система на основе Eclipse от OpenSTM32 Community. Единственный момент — для скачивания необходимо зарегистрироваться на сайте http://www.openstm32.org. Для моделирования, документирования и генерирования примеров удобно использовать графическую утилиту STM32CubeMX. Например, конфигурация контроллера на фотографии выше выглядит так:



Файлы с этими схемами также есть в репозитории. Например, для STM32F303K8 см. тут


System Workbench for STM32 имеет встроенный, достаточно продвинутый мастер проектов, который генерирует начальную структуру проекта, а также по желанию может включить в проект: низкоуровневые драйвера контроллера (CMSIS), библиотеку HAL (Hardware Abstraction Layer), FatFS, FreeRTOS. Я же сам использую свою объектно-ориентированную библиотеку драйверов, которая работает поверх HAL. Кому интересно, см. тут.


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


А вот пример использования достаточно мощного контроллера STM32F410RB:



Аналогично, основным документом является AN4488: Getting started with STM32F4xxxx MCU hardware development, где есть все необходимые схемы подключения. Второй важный документ — AN2867: Oscillator design guide for STM8AF/AL/S and STM32 microcontrollers, где подробно рассмотрена схема подключения высокочастотного осциллятора.


Естественно, постоянно городить подобные схемы достаточно затратно по времени, поэтому я и решил следующим шагом сделать по возможности универсальные платки, которые и реализуют эти схемы. Универсальность достигается за счёт того, что контроллеры разных серий, но в одинаковом корпусе (например, STM32F303RB и STM32F410RB, оба в корпусе LQFP64) имеют одинаковые выводы (за исключением небольших отличий в схеме питания). Эти отличия приводят вот к чему:



Все элементы с подписанными номиналами общие для разных контроллеров, а вот элементы типа P30, P31, P47, где цифра означает номер вывода, нужно подбирать в зависимости от конкретной модели. В результате, макетная плата будет выглядеть так:



Вот такое небольшое усовершенствование.


Проект на github
Лицензия: GNU General Public License, Version 3


Схема и платы подготовлены в Eagle Cad. У безмерно уважаемого мной DiHalt есть замечательный цикл статей по этой системе. Бесплатную версию Eagle Cad для домашнего использования можно скачать с официального сайта.


Приглашаю всех желающих присоединится к проекту.

Теги:
Хабы:
+22
Комментарии 25
Комментарии Комментарии 25

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн