не Ардуино и не Discovery / Хабр
Всем, кто использует или интересуется микроконтроллерами фирмы 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 для домашнего использования можно скачать с официального сайта.
Приглашаю всех желающих присоединится к проекту.
Оценочная плата STM32F4 Discovery с STM32F407
32-разрядные микроконтроллеры выпускаются многими производителями, но наиболее широкое распространение, на текущий момент, получил продукт совместной франко-итальяно-японской фирмы STMicroelectronics (STM). Достаточно низкая стоимость, удобство программирования и наличие бесплатного ПО способствовали его продвижению.
Наиболее производительными в семействе STM32 являются микроконтроллеры линейки STM32F4:
Серия | Тактовая частота | Вычислительная мощность, DMIPS | Ядро | Описание |
STM32F0 | 48 | 38 | Cortex-M0 | Бюджетный МК начального уровня |
STM32F1 | 24/36/48/72 | 61 | Cortex-M3 | МК общего назначения |
STM32F2 | 120 | 150 | Cortex-M3 | Высокопроизводительные МК |
STM32F3 | 72 | 62 | Cortex-M4 | сигнальный процессор DSP, FPU (операции с плавающей точкой) |
STM32F4 | 84/168/180 | 210 | Cortex-M4 | Высокопроизводительные МК, DSP, FPU |
STM32L0 | 32 | 33 | Cortex-M0+ | Низкое потребление и цена |
STM32L1 | 32 | 33 | Cortex-M3 | Сверхнизкое энергопотребление |
STM32T | 72 | 90 | Cortex-M3 | Контроллер сенсорного экрана |
STM32W | 24 | 30 | Cortex-M3 | Для беспроводной связи (RF, ZigBee) |
Для начинающих разработчиков производители предлагают, так называемые, оценочные платы, на которых устанавливается тот или иной микроконтроллер со схемами обвязки и различной периферией. Обязательным атрибутом оценочных плат сегодня является большое число контактов, которые позволяют получить доступ практически ко всем портам микроконтроллера, а также интерфейсы в виде светодиодов и кнопок. Также во многие оценочные платы встраивается программатор, который позволяет программировать внешние микросхемы. В таблице ниже приведены оценочные платы начального уровня линейки STM32F4.
Плата | Микроконтроллер | Периферия |
STM32F429I Disco | STM32F429ZIT6 (180 МГц, 2 Мб Flash, 256 Кб ОЗУ, LQFP144) | Встроенный программатор/отладчик ST-LINK/V2, дисплей 2.4″ QVGA TFT, ОЗУ SDRAM 64 Мбит, гироскоп, USB–OTG, 6 светодиодов, 2 кнопки |
STM32F407 Discovery | STM32F407VGT6 (168 МГц, 1 Мб Flash, 192 Кб ОЗУ, LQFP100) | ST-LINK/V2, 3-х осевой акселерометр, цифровой микрофон, USB–OTG, 24-разрядный аудио ЦАП с усилителем класса D, 8 светодиодов, 2 кнопки |
STM32F401C Disco | STM32F401CVT6 (84 МГц, 256 Кб Flash, 64 Кб ОЗУ, LQFP100, низкое энергопотребление) | ST-LINK/V2, гороскоп, компас, цифровой микрофон, USB–OTG, 24-разрядный аудио ЦАП с усилителем класса D, 8 светодиодов, 2 кнопки |
STM32F401 Nucleo | STM32F401RET6 (84 МГц, 512 Кб Flash, 96 Кб ОЗУ, LQFP64, низкое энергопотребление) | ST-LINK/V2, разъем для подключения шилдов Arduino, 2 светодиода, 2 кнопки |
Я для своих экспериментов купил недорого здесь себе платку STM32F407 Discovery. Поставляется она в блистере с немногословным описанием.
У этой платы имеется две модификации: MB997C и MB997B. Первая пришла на смену второй и имеет на борту более современную микросхему акселерометра LIS3DSH взамен устаревшей LIS302DL.
Компоненты отладочной платы:
С обратной стороны платы находятся штырьевые выводы.
Основные характеристики этой платы:
- 32-битный микроконтроллер STM32F407VGT6 с ядром ARM Cortex-M4F с 1 Мб памяти программ и 193 Кб ОЗУ в 100-выводном корпусе LQFP100 с тактовой частотой 168 МГц. Встроенные операции с плавающей точкой (FPU).
- Встроенный программатор/отладчик ST-LINK/V2 с возможностью выбора режима работы (позвоялет программировать внешние микросхемы, используя SWD-коннектор для программирования и отладки)
- Питание платы: через шину USB или от внешнего 5В источника питания
- Питание для внешних устройств: 3В и 5В
- 3-х осевой МЭМС акселерометр на базе микросхемы LIS302DL компании ST
- Всенаправленный цифровой МЭМС микрофон на базе микросхемы MP45DT02 компании ST
- Аудио ЦАП CS43L22 со встроенным усилителем класса D
- Восемь светодиодов: LD1 (красный/зеленый) для индикации активности шины USB, LD2 (красный) для питания 3. 3В, 4 пользовательских диода: LD3 (оранжевый), LD4 (зеленый), LD5 (красный) и LD6 (синий), 2 диода USB OTG: LD7 (зеленый) для VBus и LD8 (красный) при перегрузке
- Две кнопки (Reset и User)
- USB OTG с разъемом micro-AB
- Выводные колодки для всех контактов ввода/вывода микроконтроллера для быстрого подключения к макетной плате и простого проведения измерений
Большим плюсом является наличие в микроконтроллере модуля для работы с числами с плавающей точкой, что увеличивает скорость обработки в приложениях, связанных, например со спектральным анализом (для вычисления БПФ) или же в БПЛА для алгоритмов ориентации.
К мелкому минусу можно отнести лишь отсутствие разъема JTAG для тестирования, используя внешний программатор/отладчик ST-LINK.
Скачать принципиальную схему платы STM32F407 Discovery можно по ссылке ниже.
Рассмотрим упрощенную структурную схему платы.
Из нее видно, что из-за диода Шоттки D3 напряжение +3 В не является строго стабилизированным. Ток нагрузки через контакт «+3V» не должен превышать 150 мА. Если вместо джампера J1 подключить амперметр, что можно увидеть, что, учитывая потребляемый микроконтроллером ток, реально выдается 80-130мА.
Питание 5 в подается через мини-USB разъем «CPU» с компьютера. Из-за диода D1 на микро-USB разъеме «OTG» будет чуть меньшее напряжение.
На колодке штырьевых контактов имеется вывод «+5 V» к которому можно подключить внешний источник питания. Благодаря диоду D1 есть возможность одновременно использовать внутренний и внешний источники питания.
Программатор ST-Link реализован на микроконтроллере STM32F103C8T6. Основной программируемый микроконтроллер подключается для программирования через два джампера J2 и J3. Для программирования внешних микросхем, используя разъем «SWD» эти джамперы необходимо удалить.
Для работы цифрового МЭМС-микрофона, 3-х осевого акселерометра и аудио ЦАП задействованы несколько линий портов микроконтроллера. Данные передаются по шинам SPI, I2C, I2S.
В таблице приведены задействованные и свободные порты.
Вывод | Функционал |
PA0 | Кнопка «User» |
BOOT0 | Вход бутлоудера, сигнал BOOT0 |
PB2 | Вход бутлоудера, сигнал BOOT1 |
PA1-PA3, PA8, PA15, PB0, PB1, PB4, PB5, PB7, PB8, PB11, PB13-PB15, PC1, PC2, PC4-PC6, PC8, PC9, PC11, PD0-PD3, PD6-PD11, PE2, PE4-PE15 | Свободные линии I/O, толерантные к 5 В, максимальная нагрузка ±25 мА, pull-up/down резисторы 30…50 кОм (всего 46 линий) |
PB12 | Свободная линия с pull-up/down резистором 8…15 кОм |
PC13 | Свободная линия с нагрузкой ±3 мА |
PA3-PA6, PB6, PB9, PC7, PC10, PC12, PD4 | Стереофонический аудио ЦАП CS43L22 |
PA5-PA7, PE0, PE1, PE3 | 3-х осевой акселерометр LIS3DSH |
PA9-PA12, PC0, PD5 | Разъем микро-USB (OTG) |
PA13, PA14, PB3 | Разъем программатора SWD |
PB10, PC3 | Встроенный цифровой микрофон MP45DT02 |
PC14, PC15 | Кварцевый резонатор 32 кГц (есть место) |
PD12-PD15 | Зеленый, оранжевый, красный, синий светодиоды |
PH0, Ph2 | Кварцевый резонатор 8 МГц для МК |
NRST | Внешний начальный сброс МК |
+3V, +5V, VDD, GND, NC | Цепи питания 3 В, 5 В, МК, «земля», пустой контакт |
Чтобы проверить работоспособность платы:
- Удостоверьтесь, что на плате установлены перемычки JP1 и CN3
- Подключите плату STM32F407 Discovery к компьютеру, используя USB-кабель типа A/mini-B через мини-USB разъем CN1 программатора ST-Link на плате для подачи питания. Засветится красный светодиод LD2 (PWR) и начнут мигать четыре светодиода (зеленый, оранжевый, красный, синий), находящиеся между кнопками B1 и B2
- Нажатие пользовательской клавиши B1 включает МЭМС акселерометр. Четыре цветных светодиода будут показывать направление движения платы и скорость. При подключении к компьютеру через второй USB-разъем на плате CN5, используя кабель типа A/micro-B, плата распознается как стандартный манипулятор «мышь».
- Демонстрационное ПО, различная документация на плату STM32F407 Discovery, а также примеры, позволяющие ознакомится с особенностями семейства микроконтроллеров STM32F4 доступны на официальном сайте STMicroelectronics.
Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.
STM32F4 Discovery — библиотеки и учебные пособия для микроконтроллеров серии STM32F4 от Тилена Маджерле
Блог STM32F4 Discovery
ARM Cortex-M / Учебники
Вероятно, вы уже слышали о Visual Studio Code, сокращенно vscode (или даже vsc), мощном текстовом редакторе на основе расширений. Благодаря открытому исходному коду и поддержке многих языков (посредством расширений) разработчикам это просто нравится. С другой стороны, TouchGFX — один из самых продвинутых графических стеков для встраиваемых систем. Это БЕСПЛАТНО для любого приложения STM32, будь то простой пользовательский интерфейс без сенсорного управления или более сложный графический интерфейс с разрешением 800 × 480 пикселей (или более) с дизайном пользовательского интерфейса, подобным мобильному. Графика TouchGFX…
ARM Cortex-M / STM32U5
STMicroelectronics последний выпуск STM32 был с серией STM32U5 в четвертом квартале 2021 года. Основное внимание в продукте уделяется функциям с чрезвычайно низким энергопотреблением, повышенной безопасности, интеграции, размеру и производительности.
Начиная с STM32CubeMX версии 4.27.0 ST добавила возможность управлять библиотеками встроенного программного обеспечения непосредственно в CubeMX и имеет полностью интегрированный графический инструмент для точной настройки проекта перед созданием приложения в окончательной цепочке инструментов (Keil, IAR, TrueSTUDIO, …). Библиотеки встроенного программного обеспечения — это библиотеки (также) предоставляемые STMicroelectronics. Вы заметите их по формату имени X-CUBE-library_name, например X-CUBE-MEMS1, который является полным решением для датчиков ST MEMS.
Необходимые действия Чтобы разрешить добавление встроенных библиотек в CubeMX, выполните описанные шаги…Компания STMicroelectronics недавно запустила программу пошагового обучения STM32 для обучения и ускорения процесса обучения. Он готов для начинающих и всех, кто заинтересован в изучении микроконтроллеров на базе STM32 ARM-Cortex-M вместе с его экосистемой вокруг самого микроконтроллера. От новичка до профессионала за 5 шагов Шаг 1: Предварительные условия: В этой части пользователь должен установить все необходимые программные инструменты и убедиться, что у него есть плата для дальнейшей разработки. Шаг 2: Мигание светодиода с использованием платы разработки STM32CubeMx и NUCLEO-L476RG. Шаг 3: Интерфейс UART на NUCLEO-L476RG и L475 IoT…
Я пытался создать свой собственный стиль кода C и подход к правилам кодирования, чтобы использовать их во всех моих библиотеках. С момента моего первого опыта программирования до сегодняшнего дня я много раз менял стиль, от первой библиотеки STM32F4 до последних проектов, таких как ESP_AT_Lib, onewire_uart и другие. Правила стиля кода публикуются и регулярно обновляются в моей учетной записи Github под именем репозитория c_code_style. Пожалуйста, используйте приведенный ниже URL-адрес для доступа к веб-сайту: https://github.com/MaJerle/c_code_style Первоначально он был вдохновлен стилем кодирования LwIP с некоторыми изменениями….
В этом руководстве я объясню, как управлять WS2812B с STM32, используя TIM PWM и периферийные устройства DMA наиболее эффективным способом, используя минимальный объем оперативной памяти, необходимый для обработки всех светодиодов. Есть хорошее объяснение, уже доступное в сети. Если у вас нет опыта работы со светодиодами WS2812B, я настоятельно рекомендую вам прочитать сообщение в блоге. Написано очень хорошо, но есть одна большая проблема. Он использует 24 слова ОЗУ для каждого светодиода,…
АРМ Кортекс-М
Сегодняшнее приложение в основном использует какую-то операционную систему на микроконтроллере. Поскольку эти приложения больше не работают в режиме реального времени, сохранение стандартного протокола 1-Wire, разработанного с задержками в программном обеспечении, может сделать жизнь программиста намного сложнее и раздражительнее. Протоколы UART и 1-Wire имеют две общие черты: Для сброса сети 1-Wire мы можем использовать 9600 бод по UART. Для чтения/записи битов 1-Wire мы можем использовать 115200 бод по UART. бит записи/чтения можно найти на…
Все руководства по STM32F4 — STM32F4 Discovery
Перейти к содержимому
к tilz0R · Опубликовано · Обновлено
Когда-то я сделал учебник, как работать с чем-то на устройстве STM32F4xx, потому что трудно и бессмысленно делать библиотеку для него по какой-либо причине.