Всем, кто использует или интересуется микроконтроллерами фирмы 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 для домашнего использования можно скачать с официального сайта.


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

Комментарии (25)


  1. Punk_Joker
    30.08.2017 14:02
    +4

    Если всеравно паят, но несложно найти подобные уже готовые платы


    И что угодно распааят на любой макетке, или даже бредборде


    1. Stanislavvv
      30.08.2017 16:12
      +1

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


    1. mkulesh Автор
      30.08.2017 18:13
      +1

      А как, простите, распаять на этой плате оба кварца с обвязкой, и потом в макетную плату ее воткнуть, не потеряв при этом 6/8 от всех выводов контроллера?


    1. mukoladerevlo
      01.09.2017 22:08
      +1

      Когда-то давно, сделал на такой макетке копию Teensy ++ 2, для считывания\заливки NOR\NAND на PS3. Так что вполне себе вариант на пару раз (проект использовался два раза, для себя и кума). Обвязку делал на ней же, там с обратной стороны, если мне не изменяет память, разводка для TQFP 100, пару резисторов, перемычек, конденсаторов, можно спокойно поставить.
      Поэтому люблю макетки для быстрых домашних проектов, но после таких статей захотелось бредборд, а то как ребенок чуть подрос и стал проявлять чересчур интерес, я стал меньше паять. А так, безопаснее, быстрее, интереснее, для не многоразовых проектов проще разобрать и использовать заново.

      Фото платы
      p.s // железо хобби а не работа, так что перфекционисты не минусуйте)
      image
      Ахтунг! Обратная сторона, не для перфекционистов)
      image


  1. 32bit_me
    30.08.2017 16:20
    +1

    1. Зачем нужны эти макетные платы с кучей проводов, воткнутых в дырки, если всё можно собрать аккуратно с помощью паяльника?
    2. Discovery содержат, кроме МК, ещё и JTAG-адаптер, и различную периферию.
    3. Если почему-то не нравится Discovery (хотя почему бы?), есть Stm32 Nucleo.
    4. Разводить, заказывать в Китае и паять плату, это сильно больше геммороя, чем любой из этих вариантов.
    Но автор молодец, конечно, выбрал свой путь. Вызывает уважение.


    1. mkulesh Автор
      30.08.2017 17:53
      +1

      Спасибо за развернутый комментарий. Я понимаю, что макетные платы с разъемами имеют ограниченное применение и большинство, действительно, предпочитает либо паять, либо вообще не касаться паяльника и работать с демо-платами. Я же всего лишь люблю много экспериментировать, в том числе и с электрической схемой, а не только с кодом. Поэтому связка макетная плата + адаптеры с необходимой обвязкой — это всего лишь набор юного экспериментатора. У меня есть и Discovery, и Nucleo, и пара плат от Olimex. Проблема у них одна — платы со старшими контроллерами делают со сдвоенными гребенками, и в макетку они не влазят. Я часто заказываю печать плат в Китае, и кроме двухнедельного срока ожидания, и поезки на таможню, если почтальен не застал меня дома, отличий от покупки демо-платы в интернет-магазине нет. А разводить и паять — это же удовольствие!


      1. 32bit_me
        30.08.2017 18:15

        А разводить и паять — это же удовольствие!

        На любителя.


        1. mkulesh Автор
          30.08.2017 18:21
          +1

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


  1. QwertyOFF
    30.08.2017 16:49
    -2

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


    1. mkulesh Автор
      30.08.2017 18:06
      +1

      А почему Вы напрочь отрицаете третий вариант — разработка прототипа в домашних условиях и, когда все заработает, перенос этого прототипа на свою плату (то есть ее проектирование, печать и пайка)? И что делать, если вдруг в середине прототипирования резко захотелось поменять контроллер? Покупать и ставить другую плату с несовместимыми выводами и, тем самым, перелопачивать весь макет? К сожалению, я не настолько гуру в электронике, чтобы за одну или две итерации сделать полностью рабочую печатку, не прибегая к прототипированию на макетке.


      1. QwertyOFF
        30.08.2017 18:21
        +4

        Потому что это сложно, неудобно, ненадежно. Когда в таком бредборде количество проводов переваливает за второй десяток, пользоваться им уже невозможно. Я всецело за лапшу, когда надо взять условную ардуину, датчик и посмотреть как им пользоваться. В чуть большем проекте желательно делать печатку. Надо найти конкретную дорогу — открываешь схематик в САПРе, находишь там нужную, переходишь к плате, там дорога подсвечивается, а дальше найти ее на реальном устройстве дело двух секунд. Потом можно резать, паять МГТФ и делать все что вздумается.


        Ваши чудо-платы тоже между собой не совместимы, поэтому когда захочется вместо маленького контроллера взять большой придется все перелопачивать, и еще и в CubeMX миграцию проводить. Отсюда вывод, что с контроллером лучше не ошибаться и здраво оценивать потребности, а если что — взять побольше, благо эти STM32 стоят замечательных денег.


        1. mkulesh Автор
          30.08.2017 20:09
          +1

          Так основная цель проекта в том и заключается, чтобы улучшить совместимость. Если мы берем разные серии в LQFP64 корпусе, то у них неплохая пин-совместимость. Мои платы имеют совместимость не хуже, чем у самих контроллеров. На уровне кода я использую промежуточный слой, который обладает стабильным API и вызывает методы из HAL уровня. Посмотрите на примеры для разных контроллеров (файлы src/main.cpp) — они отличаются очень незначительно.


          1. QwertyOFF
            30.08.2017 22:12
            +1

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


            1. mkulesh Автор
              30.08.2017 22:37
              +1

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


  1. hardegor
    30.08.2017 16:57
    +1

    А зачем делать такие платки, если на алиэкспрессе их массово продают?
    Зачем ограничивать себя — использовать для макетирования микроконтроллеры в урезанных корпусах? Чтобы красивее смотрелось? Лучше в макет ставить в корпусе LQFP-100, а в реальном устройстве использовать LQFP32/48/64/100.


    1. mkulesh Автор
      30.08.2017 18:10

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


      1. rstepanov
        30.08.2017 23:13
        +2

        Расскажите лучше зачем постоянно менять контроллеры. Какие задачи вы решаете, которые требуют постоянно перескакивать с одного семейства на другое. Мой небольшой опыт подсказывает, что проще взять несколько отладочных плат с самыми толстыми контроллерами из каждого семейства и проверять работоспособность на них, а downsize до минимально достаточного контроллера делать вместе с разводкой конечной платы (один фиг ошибки будут и вторую версию делать все равно придется).


      1. hardegor
        31.08.2017 03:28
        +2

        Не представляю зачем такая комбинация кому-то понадобилась, только если в каком-то кружке для детей, чтобы всё выглядело красиво и ровно — в этом смысле да, у вас всё красиво получилось.
        Любой макет собирается из discovery, проводков и плат расширения, проверяется реализуемость идеи и сразу начинается изготовление полноценной платы.
        А все эти breadboard интересны только детям и тем кто гонится за эстетикой, но для реальной разработки смысла не имеют — раньше паял макет на монтажке, теперь за час-другой плату любую плату ЛУТом делаю.


        1. rstepanov
          31.08.2017 10:47

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


  1. aiologs
    30.08.2017 20:48

    Объясните, пожалуйста, почему всякие такие платы с микроконтроллерами по больше части не имеет монтажных отверстий.


    1. mkulesh Автор
      30.08.2017 20:53

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


  1. Sanchogus
    31.08.2017 09:26

    Чет паять микрухи с шагом 0,5 уже нифига не удовольствие, ИМХО :)

    Хотя если надо было на плату от сожженой 103C8T6 повесил 303ю. Хорошо, что ST думают о pin-to-pin совместимости.

    Кстати, чем жтаг так лучше свд? SWD программатор за 100р удобнее же, пара проводов всего… ну или хотя бы дешевле! :D
    Хотя в принципе пины от жтага можно и для SWD использовать. Лишним не будет, наверное.


  1. pavel_1406
    31.08.2017 09:26
    +2

    Идея интересная, но заточена она ИМХО только под одно — изучить и поработать как можно большим количеством процев из линейки STM32. Никакие другие задачи она не решает.

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

    Для того чтобы новичку получить первый опыт — более подойдут отладочные комплекты, в которых не придется иметь дела со схемотехникой, в которой он скорее всего будет плавать.

    А тут — ни рыба ни мясо. С большим количеством чем 10-15 проводов на бредборде работать — самоубийство (по горькому опыту знаю), держать в голове схему уже сложно, надежность соединений страдает от каждого чиха.
    Новичку придется вникать в каждый схемотехнический нюанс, и скорее всего забросит это все, после пары непонятных для него багов.
    А человек, который умеет уже работать с контроллерами и решает конкретные задачи — легче сделать уже плату с необходимой периферией.


  1. pt200
    03.09.2017 10:20

    <off а что за круглая кнопка используется( в библиотеке/схеме нашел FSM14JRT, но это не она)? </off


    1. mkulesh Автор
      03.09.2017 10:33

      Сложный вопрос. Какая-то безымянная, с растоянием между ножками 5 мм. Как-то.выписал.большой пекет на Ebay. FSM14JRT, впрочем, тоже подойдет, у нее просто форма другая.