Библиотека для адресных RGB лент STM32

Поділитися
Вставка
  • Опубліковано 22 лип 2024
  • Эффективный драйвер (библиотека) для адресных светодиодных лент для STM32.
    Рациональное использование памяти с DMA.
    Поддерживаются чипы: WS2812(b), WS2811, WS2813, SK6812 и другие.
    ________
    ТЕКСТОВОЕ ОПИСАНИЕ: crazygeeks.ru/stm32-argb-lib
    ________
    Сайт: crazygeeks.ru/
    Хабр: habr.com/ru/users/yasnolesski...
    Telegram: t.me/crazy_geeks
    VK: crazy_geeks
    Insta: / crazygeeks.ru
    Почта: sd@crazygeeks.ru
    ________
    Таймкоды:
    00:00 Вступление
    00:28 Описание протокола адресных
    01:16 Организация протокола
    02:11 Описание работы таймера в STM32
    05:21 Управление таймером
    08:00 Преобразование логики
    09:46 Режим Open Drain
    11:37 Однобитный транслятор логики
    12:27 Подключение библиотеки в CLion
    16:14 Описание функций
    18:03 Написание примера и подключение
    19:20 Демонстрация работы
    19:36 Заключение
    ________
    #STM32 #библиотека #адреска #WS2812 #ARGB
  • Наука та технологія

КОМЕНТАРІ • 87

  • @artvk8294
    @artvk8294 Рік тому +2

    Спасибо! Подписался. Качество изложения и представленных материалов, на мой взгляд, лучшее из просмотренных мной. Хотел сделать что-то для управления argb "на коленке", а здесь уже все есть на 99%).

  • @AlexZjustLetter-NotWar
    @AlexZjustLetter-NotWar Рік тому

    ВПН пашет, теперь можно посмотреть про работу лампочек) очень доходчиво, спасибо, буду разбираться дальше

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim Рік тому

    Ты лучший просто, мне так повезло найти кого то у кого то же f401-ый.

  • @SloRez118
    @SloRez118 2 роки тому

    Спасибо за видео! Сделай видео про виртуальные таймеры.

  • @artsiomkazlouski5127
    @artsiomkazlouski5127 3 місяці тому

    Очень интересно… но посмотрю потом)

  • @easystm6865
    @easystm6865 2 роки тому

    Интересно, подпишусь

  • @ArthurIslamRU
    @ArthurIslamRU 2 роки тому

    Красавчик

  • @edba7410
    @edba7410 10 місяців тому

    Пытался повторить по видео, для stm32f103c8t6, но у меня почему-то нет файлов проекте CMakeLists.txt, CMakeLists_template.txt и ещё нескольких. Можете подсказать, где что нужно установить, чтобы они сгенерировались?

  • @mexanik240
    @mexanik240 Рік тому

    Добрый день.
    Пробую запустить на STM32F030.
    Вроде все по инструкции сделал но генерации нету. Эту библиотеку на такой камень можно натянуть?

  • @ptaengineering5317
    @ptaengineering5317 Рік тому

    Супер! Спасибо тебе за твой труд! Подскажи, а на плате STM32F 102C8T6 на какой пин подключать ?

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      Какой выставлен в кубике, на тот и подключать, разницы то нет )

  • @smert_okupantam
    @smert_okupantam 29 днів тому

    в Ардуино ИДЕ есть такое? вы уже добавили?

  • @kostiantynhordii3244
    @kostiantynhordii3244 2 місяці тому

    День добрый.
    Решил повторить ваш проект, установил все, прошел по инструкции, но почему-то период тактов на ленту не 1,25 а 5 us.
    Можете подсказать в чем дело?
    Или хотя бы где искать проблему?)
    nucleo-l476rg

  • @user-pe4jc1oe3s
    @user-pe4jc1oe3s Рік тому

    Отлично мне интересноэ, а ты можешь более научно или подробнее обьяснить просто тяжело термины понимать которые впервый раз слышишь, не именно этот ролик а вообще, собрался учится на stm программировать понимать бы мне как новичку, Ардуино я почти прошел все курсы Алекса Гайвера, начать бы как то stm чик

  • @paulokaydan
    @paulokaydan Рік тому

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

    • @CrazyGeeks
      @CrazyGeeks  Рік тому +1

      ну можно в сторону G0 посмотреть, ядро М0 должно всё потянуть

  • @sergey705
    @sergey705 Рік тому

    Спасибо за либку. Как раз проверил на ней G030K6T6 с али. Единственный непонятный момент - линейка 8 светодиодов, дефайн NUM_PIXELS ставлю 8 - работает только 2 диода, ставлю 32 - работают все 8

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      Да, там есть некоторое количество багов, например при определённом количестве диодов цепочка зацикливается и не останавливается
      На разных камнях разные шины - поэтому автоподбор клоков не работает - не было возможности проверить это всё прям везде
      Пока просто нет времени чинить, но это обязательно случится ))
      А с количеством - может ошибка с размером ячейки у дма

    • @sergey705
      @sergey705 Рік тому +1

      @@CrazyGeeks косяк был найден. В настройках таймера (дма) сначала сделал как на сайте - длина данных: периферия - слово, память - байт. Поставил слово-слово (как в этом видео) и все заработало ) Правда с примером змейки (из видео) с задержкой в 1 мс чуть эпилепсию не словил

  • @v0lm0ntg
    @v0lm0ntg Рік тому

    Интересная ситуация. На Nucleo F446, таймер не останавливается, молотит без остановки вечность ( с любой конфигурацией DMA и разным количеством диодов ).

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      Да, там действительно косяк есть такой, ещё встречается и на других камнях
      Там на определённом количестве диодов таймер тоже не останавливается
      Я кажется пытался починить эту проблему, но ничего не вышло
      Пока ещё собираю обратную связь, пока нет времени на починку, особенно не всплывает пока никаких проектов, чтоб целенаправленно починить
      Я в основном всё на F103 и F401 тестил, так что на других сериях могут проблемы вылезать, да
      Но в какой-то момент это случится )
      Даже были потуги в многоканальную передачу, возможно оно увидит опен-сурс

  • @andrew3482
    @andrew3482 Місяць тому

    Такую либу родили еще лет 7 назад

  • @user-vr1gx2mi7w
    @user-vr1gx2mi7w 5 місяців тому

    Подписался. У меня C++ головного мозга. Оберну-ка я драйвер в класс.

  • @Scherbakov
    @Scherbakov 2 роки тому

    👍

  • @user-yt4mh2xg9r
    @user-yt4mh2xg9r Рік тому

    12:47 - это скорее всего блэкпил. Блю на f103.

  • @janedoe6182
    @janedoe6182 7 місяців тому

    Почему подтягивающий резистор, а не пуш-пулл режим? Адресная лента отлично работатет от импульсов амплитудой 3.3В

    • @CrazyGeeks
      @CrazyGeeks  7 місяців тому +1

      Обычно МК питается от дохлых ЛДО, которые дают 3.0 Вольта и ниже. А лента питается от БП 5.1 Вольта, например. Вот и выходит, что логика совершенно не согласуется

    • @janedoe6182
      @janedoe6182 7 місяців тому

      @@CrazyGeeks А что за ЛДО такие? Вот у меня NodeMCU, питается через USB от длиинного провода, на котором теряется 0.5 вольта. Потом LDO HT7333 делает из 4.5 вольт 3.3, и питает ESP, который кушает до 450мА в моменты передачи по Wi-Fi. И лента подключена без подтяжки, а просто через килоомный резистор, чтобы вывод случайно не пожечь. И все работает. Я думаю, если ты эту свою подтяжку уберешь, у тебя тоже заработает. Ну а если LDO из 5 вольт 3.3 не может сделать, то это не подтяжки надо, а LDO менять.

  • @levik91111
    @levik91111 Рік тому

    Спасибо, может душню, но ошибочка в расчете, в блоке где про частоту. 72 000 000 / 800 000 - должно быть

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      На 800, да
      Ну, что уж теперь

    • @levik91111
      @levik91111 Рік тому

      @@CrazyGeeks да так просто написал, что б кто еще только разбирается голову не ломал почему у него не сходится)

  • @drollery6399
    @drollery6399 Рік тому

    В Атмегах есть SPI, обрезаешь входной провод, и кидаешь в регистр по 8 бит. Работает на частоте 800КГц спокойно. По прерыванию, от SPI. Код основной крутится, не замечая прерывание. Не надо грязи, на эти МК лить. С этим ОМНОМ они справяться. Для этого и сделаны. STM32 нужны эхолоты делать(где экран только отнимет половину мощности), автомобильные блоки управления вполне для STM работа, медицинские приборы, и другое сложное оборудование(промышленное). Рулить лентой с помощью STM это забивать гвозди, микроскопом. В принципе можно, но так по дурацки. Хотя для начинающих самое оно, как пример. Но не надо при этом невзначай кидать какашки на Атмеги 🙂 По ходу так сказать, для красного словца.

    • @CrazyGeeks
      @CrazyGeeks  Рік тому +1

      Я долго думал, что ответить, но вот созрел
      Тут встаёт ключевой вопрос о том, как эти прерывания блокируют выполнение кода, ведь в Cortex-M есть DMA всё таки, который позволяет "вкинуть пачку данных и забыть"
      Да и занимать целый SPI в камнях с малым количеством выводов это очень расточительно
      Про автомобильные блоки и медицинские устройства тоже не согласен.
      Сравните количество и разнообразие периферии просто. В AVR её считай нет
      На что-то простое мне например проще F0 повесить, потому что AVR-GCC я не изучал, на ардуино мне писать зашкварно, на стм мне задачу решить быстрее. А по производительности F0 будет едва быстрее 328 меги
      Не говоря уже о том, что атмега сейчас местами тупо дороже, чем F0/L0
      Естественно использовать ARM исключительно для отрисовки адрески это бред.
      Но кто говорит про использование в самостоятельном виде?
      Открою секрет: та адреска, что у меня висит за спиной в новостных роликах, управляется ардуинкой. Потому что ничего другого от неё и не нужно, мне дешевле по времени перед записью накидать цвета и прошить, чем изобретать свой контроллер на стм.
      Вот у меня есть устройство, под которое эта библиотека и разрабатывалась:
      Там и 2 USB: один Host, другой Device (на UART я проприетарный протокол городить не хочу), всё это общается по SPI с ESP32, по SDIO с SD-картой, и т.д.
      Для другого коммерческого устройства готовлю многоканальный вариант (16 и более каналов адрески)
      Прошлой зимой ко мне заказчик пришёл, дал задачку на портирование arduino-прошивки на STM, с добавлением доп. функционала
      Потому что AVR это такая вещь, что по-отдельности всё работает, а всё вместе - нет.
      Я так же к STM и пришёл. У меня на 32u4 тупо не работала связка USB + USB Host Shield (MAX3421E) + Адреска + ESP32
      Вот и все доводы

    • @user-tx8om1kg1q
      @user-tx8om1kg1q 9 місяців тому

      а что делать если я уперся в динамическую память? мне нужно рулить 720-ю светодиодами при помощи arduino nano. это 5 метров ленты (144 ЛЕДа на метр).

    • @SevenNightdreemVeryPavlovny
      @SevenNightdreemVeryPavlovny 5 місяців тому

      Внезапно STM ещё и дешевле получается, а дма канал это вообще песня, повесил на него что надо и переключай контекст. Огромная разгрузка ядра

  • @olegafanasiev9959
    @olegafanasiev9959 Рік тому

    Все сделал так, как в видео. Плата stm32f102c8t6 отладочная. Сколько таймеры не менял, полная тишина(( Осцилогр молчит. использовал в тч и ножку PB10 T2ch3 (FT). Тишина. в чем может быть дело ? (файлы библиотеки кидал в core\inc и core\Src\ соответственно напрямую) дебажится без ошибок. К +5 подтягивал.

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      Что отладка программы говорит?

    • @olegafanasiev9959
      @olegafanasiev9959 Рік тому

      @@CrazyGeeks знать бы, куда там смотреть еще, в отладке) я только могу ошибки посмотреть, их нет...

  • @user-og9fp4es5h
    @user-og9fp4es5h 2 роки тому

    ситуация такая есть гироскутерный контроллер, прошивка+пароль от нее, как клонировать эту прошивку, чтобы записать на другой контроллер. Прошивка меняется при вводе пароля(думаю что защита от копирования есть

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому

      А что за контроллер? Какая микросхема стоит?

    • @user-og9fp4es5h
      @user-og9fp4es5h 2 роки тому

      @@CrazyGeeks stm32f103rct6

    • @user-og9fp4es5h
      @user-og9fp4es5h 2 роки тому

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

    • @user-og9fp4es5h
      @user-og9fp4es5h 2 роки тому

      @@CrazyGeeks есть какие нибудь мысли у вас?

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому

      Ну это пароль верхнего уровня скорее, на самой прошивке СТМ пароля быть не может
      Напишите мне в ЛС в ВК, так удобнее будет) vk.me/crazy_geeks

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim Рік тому

    Все завелось после того как я пересчитал для таймера число сброса, у меня вышло 105-1 при частоте 84 МГц. В видео я не увидел этот момент но прочитал из оригинальной статьи англоязычной. Функции заполнения ленты придумаю как нибудь уже сам.

    • @CrazyGeeks
      @CrazyGeeks  Рік тому +1

      Странно, должно само считаться

    • @tupoy_ytub_uberi_psevdonim
      @tupoy_ytub_uberi_psevdonim Рік тому

      @@CrazyGeeks главное работает и я понял как переносить библиотеку на разные микроконтроллеры STM. Вот жаль пока не очень понял принцип работы DMA и переключение между буферами. Довольно сложно осмыслить)

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim Рік тому

    PS осциллограф вообще ничего не видит на выходе ШИМ. Я использовал режим PUSH PULL для тестов.

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      А ножка точно та? Скорость ножки какая стоит?

    • @tupoy_ytub_uberi_psevdonim
      @tupoy_ytub_uberi_psevdonim Рік тому

      @@CrazyGeeks Тактирования? Максимальная стоит. А таймер настроен на 800 КГц, светодиоды исправно ловят команды. У меня осциллограф цифровой по юсб и он несколько глючный, часто тормозит так сильно, что по 5 секунд обновляется поле с осциллограммой. Я уже думаю он просто сломался.

    • @CrazyGeeks
      @CrazyGeeks  Рік тому +1

      Ну вот в осциллографе скорее всего дело
      Если как я понимаю у вас всё работает

    • @olegafanasiev9959
      @olegafanasiev9959 Рік тому

      PUSH PULL ? а Open drain не работал ?

  • @sozdatelEd
    @sozdatelEd 2 роки тому +1

    О чем будет канал? Что в будущем?

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому

      Всё так же об embedded.
      STM32 и прочая электроника
      Пока переношу статьи с сайта в видеоформат, дальше думаю и над другими форматами

    • @sozdatelEd
      @sozdatelEd 2 роки тому

      @@CrazyGeeks embedded очень разросся. Может возможно обозначить направления по которым будут материалы? Или рассказать какие устройства будут разобраны в будущих видеороликах?

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому

      @@sozdatelEd мне интересны Cortex-M. В первую очередь STM32, но и другие серии тоже: GD32, Миландр, NXP и прочее
      Пощупать хочется ПЛИС, Cortex-A, MIPS, и другое
      Пока ресурсов и компетенций таких просто нет, но всё впереди)

    • @sozdatelEd
      @sozdatelEd 2 роки тому +2

      @@CrazyGeeks ясненько. Будем посмотреть

  • @vernnms78
    @vernnms78 2 роки тому

    Несправедливо: у умных настоящих инженеров каналы с мизерными подписками.

  • @tarasbarbos9035
    @tarasbarbos9035 Рік тому +1

    Всё чудесно, но неясно чем таймеры в AVR не подходят.
    А, и ещё, что за гамма-коррекция такая? Публика жаждет подробностей :)

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      В AVR нет DMA) Вот и всё)
      А гамма-коррекция должна как-то цвета подстраивать, не я реализовывал, поэтому сказать ничего не могу

  • @USER-ruzer2000
    @USER-ruzer2000 2 роки тому

    Ребят, есть вменяемая литература на РУССКОМ ЯЗЫКЕ по описанию стм32, а именно регистров, функций, команд, описании HAL LL CMSIS ?

    • @redtex
      @redtex 2 роки тому

      Переведёшь - будет.

    • @USER-ruzer2000
      @USER-ruzer2000 2 роки тому

      @@redtex ладно, а что тогда по английски посоветуете?

    • @redtex
      @redtex 2 роки тому

      @@USER-ruzer2000 Найди канл Vladimir Medintsev, там посоветуют.

    • @USER-ruzer2000
      @USER-ruzer2000 2 роки тому

      @@redtex Я в его телеграмканале спрашивал. Не ответили.
      Ситуация как с мужем при неверной жене, все вокруг знают, но ему никто не скажет.

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому +2

      Универсальной литературы, панацеи по всем вопросам нет. Ну либо я про такое не в курсе
      Есть например Mastering STM32, которую перевели, можно с неё начать, она по HAL
      Пока твёрдой уверенности с HAL не будет - глубже будет больно лезть
      Всё остальное в AppNotes да в Programming Manual-ах прописано, все они лежат на сайте ST у каждого камня в разделе "Documentation"
      Некоторые переводят, надо по номерам искать
      Какие-то учебные материалы, подборки литературы есть у моего товарища Олега Волкова
      ua-cam.com/channels/zZKTNVpcMSALU57G1THoVw.html
      Другие каналы и ресурсы я у себя в статье указывал
      crazygeeks.ru/ardu-to-stm32/#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8
      Сам я не по литературе учился, а на реальных задачах, всю инфу порционно, по требованию изучал, либо интуитивно, методом тыка

  • @redtex
    @redtex 2 роки тому

    Откуда адреса у сдвиговых регистров?

    • @CrazyGeeks
      @CrazyGeeks  2 роки тому

      Как таковых адресов ж нет
      Адреса мнимые, потому что сигнал по цепочке последовательно передаётся
      1 диод имеет мнимый адрес 1, 2ой мнимый 2, и т.д.
      Я думал, что это слишком очевидно, чтоб пояснять в ролике)

    • @redtex
      @redtex 2 роки тому

      @@CrazyGeeks Сдвиговые регистры имеют каскадное включение. У каскада есть только номер каскада и отношение к другому как младшему или старшему.

  • @sergbo3114
    @sergbo3114 4 місяці тому

    Не знаю у меня это работает на плис. В плисине есть память и она 30 раз в секунду обновляет данные из своей памяти. А уже в плис льешь из МК когда тебе хочется. Хоть одним пикселем, хоть сразу всей матрицой. Как по мне эта задача слишком тупая для МК.

  • @gin87100
    @gin87100 Рік тому

    Не заработало. Нужно плясать с бубном. и что за функция void main(void) ? Откуда ее вызывать?

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      а какой МК у вас? на разных сериях по-разному немного всё работает, так что надо вот это для начала понять
      void main(void) это ни что иное как главный цикл
      в примере он просто для наглядности обозначен

    • @gin87100
      @gin87100 Рік тому

      @@CrazyGeeks камень c8t6. Главная функция обычно int main(void). Что значит не возвращаемая. А главный цикл while(1){}

    • @Saurelius
      @Saurelius 7 місяців тому

      @@gin87100 Обычно функция main() при выплнении программы в среде ос возвращает код завершения, который явлеятся целым числом, по этому указан тип int. В случае с МК возвращать код ни к чему - программа одна, отчитываться не кому. Потому и void, что ничего не возвращает и return не используется.

  • @ciklomat
    @ciklomat 4 місяці тому

    Очень странная реализация использовать байт для отправки одного бита. Шим с переменным заполнением может решить проблему быстрее и проще. 300 байт озу на 100 светодиодов

    • @CrazyGeeks
      @CrazyGeeks  4 місяці тому

      Это и есть шим с переменным заполнением.
      300 байт - откуда такая цифра? Протокол 24-битный, значит на каждый диод нужно 24 разных скважности.
      Для разгрузки процессорного времени используется DMA, который берёт 32-битные указатели, значит на каждый диод будет 24*4 = 96 байт
      Итого на 100 светодиодов выйдет 9.600 байт
      Применённый подход с прерываниями по половинкам DMA отправки позволяет как раз использовать 300 байт на массив цвета, плюс 48*4 = 192 байта на буфер скважностей

  • @svbHiTek
    @svbHiTek 9 місяців тому

    Почисти систему охлаждения ноута, а то у тебя проц в 100 долбится.

  • @FJHCJCJCJHCHFHFJJFJCFJ
    @FJHCJCJCJHCHFHFJJFJCFJ Рік тому

    Для ЛГБТ лент😂

  • @ptaengineering5317
    @ptaengineering5317 Рік тому

    Вот такая ошибка при дебаге, я нуб, не понимаю куда копать....
    'RCC_CFGR_PPRE2' undeclared (first use in this function); did you mean 'RCC_D1CFGR_HPRE'? ARGB.c /h750_test/Core/Src line 140 C/C++ Problem

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      это у вас проц H750? там вероятно другая система тактирования
      можно попробовать заменить на то, что он предлагает

    • @ptaengineering5317
      @ptaengineering5317 Рік тому

      @@CrazyGeeks заменил, ошибка компилятора пропала, но - сигнал вообще не формируется ни при pul&push ни при opendrain. Хотя, на stm32f103 все завелось супер. В чем может быть дело ?

    • @CrazyGeeks
      @CrazyGeeks  Рік тому

      @@ptaengineering5317 А прерывания по DMA прилетают?

    • @ptaengineering5317
      @ptaengineering5317 Рік тому

      @@CrazyGeeks Спасибо, все завелось ! Подскажи, у меня после ПИНа стоит мосфет (н- канальный), он инвертирует сигнал, в каком месте библиотеке мне нужно поравить, что бы инвертировать сигнал ?

    • @edba7410
      @edba7410 10 місяців тому

      @@ptaengineering5317 А можно для stm32f103 куда-нибудь исходники выложить. А то пытался по видео делать, но у меня почему-то не все файлы в проекте присутствуют. Нет файлов CMakeLists.txt, CMakeLists_template.txt и ещё нескольких. И не пойму, где что нужно указать, чтобы они сгенерировались.