Как я паял и программировал Кракена с ZeroNights 2017

22 января 2018

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

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

Отмечу, что мелкие SMD резисторы и конденсаторы легко теряются, поэтому лучше взять их с небольшим запасом. OLED-дисплей в силу понятных причин является опциональным. Также понадобится некоторое количество гнезд и штырьков с шагом 2.54 мм, но я думаю, что они у вас и так есть. Наконец, к списку стоит добавить разъем IDC-10. Далее станет понятно, зачем.

Fun fact! Внимательные читатели к этому моменту уже догадались, что плата умеет работать от Li-Ion аккумулятора, а также заряжать этот аккумулятор от USB. А вы прошли проверку на внимательность?

В собранном виде бейдж выглядит приблизительно так:

Плата-бейдж Кракен с ZeroNights 2017

Здесь в него залита простенькая прошивка, которая по очереди зажигает все светодиоды на щупальцах, а затем также по очереди гасит их:

void init() {
    /* do nothing, yet */
}

void loop() {
    static const int pins[] = {
        GPIO_PIN_4, GPIO_PIN_5, GPIO_PIN_6, GPIO_PIN_7,
        GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_11, GPIO_PIN_10
    };

    for(int i = 0; i < sizeof(pins)/sizeof(pins[0]); i++) {
        HAL_GPIO_TogglePin(GPIOC, pins[i]);
        HAL_Delay(250);
    }
}

Программирование платы осуществляется по аналогии с тем, как это делалось в заметке Готовим «взрослую» среду разработки под STM32 в Linux. Заметьте, что в приведенном коде пины используются не по порядку. Это не опечатка, а такая особенность разводки платы.

К слову об особенностях разводки. Вам, конечно же, бросился в глаза тоненький желтый проводочек, идущий через весь бейдж сквозь пару капель термоклея к куску макетки с проводами и разъемом IDC-10. Дело в том, что на плате оказался неправильно разведен SWD. Штырек на плате, который по задумке должен быть SWIO, идет к пину 55 микроконтроллера, а не пину 46, на котором на самом деле живет SWIO. Поэтому, если просто спаять плату как она есть, программатор не увидит микроконтроллер и будет ругаться очень странными ошибками.

Стоит ли говорить, что, поскольку я являюсь полным новичком в мире STM32, выяснить этот момент заняло у меня какое-то время. В итоге проблему я решил макеткой, разъемом IDC-10 и тонкими проводами, как изображено на приведенном фото. Разъем IDC-10 был выбран по той причине, что он же используется в программаторе STLink v2. Таким образом, я могу подключать программатор к плате просто с помощью соответствующего шлейфа, не вспоминая постоянно, какой провод откуда и куда нужно подключать. Удобно.

Исходники к этой заметке, а также схему платы, вы найдете в этом репозитории на GitHub. За кадром осталась работа с OLED-экранчиком, но об этом уж как-нибудь в другой раз. Несмотря на упомянутые дефекты платы, было весело. Пожалуй, даже веселее, чем было бы без них. Именно благодаря Кракену у меня возник интерес к микроконтроллерам STM32. А вы думали, откуда?

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

А есть ли у вас такой бейдж? Если да, то успели ли вы его спаять, или только собираетесь это сделать? Если нет, то хотели бы получить такой на следующей конференции?

Дополнение: Микроконтроллеры STM32: работа с OLED-экранчиками на базе SSD1306 по I2C и SPI.

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.