А еще скорость можно поднять, если оптимизировать работу графической библиотеки в сторону сокращения количества транзакций по SPI, задействовать DMA и функции оконного заполнения в контроллере дисплея. То есть, сначала рисуем кусок графического примитива в некоторый буфер в ОЗУ, за тем одной транзакцией задаем окно заполнения и второй транзакцией сливаем буфер в это окно. Если примитив огромный, то можно рисовать его по частям. Это все равно будет быстрее, чем слать координаты каждого пикселя, а потом его цвет. Так и ядро камня будет меньше загружено, так как передачей данных занимается DMA, и картинка будет быстрее рисоваться на дисплее, так как координаты задаются только один раз, когда задается окно и потом уже непрерывно сливается блок цветов пикселей. В качестве примера возьмем функцию вывода текста: Выделяем буфер, размером в одно знакоместо (под один символ). Формируем в нем растр символа. Отсылаем дисплею команды формирования окна: Начальные координаты, конечные координаты, направление заполнения. Заливаем содержимое буфера в дисплей в режиме данных. Выполняем что-нибудь другое, пока DMA шлет буфер в дисплей. Например, готовим второй буфер, если ОЗУ хватит. Символ напечатан, приступаем к следующему. На видео видно, что листбокс перерисовывается полностью, когда перемещается курсор выбора. В качестве ввода у нас только кнопки, потому мы не можем прыгнуть через элемент, а только с текущего на соседний. Вот и перерисовать можно только их. Сначала перересовываем текущий, а потом тот, на который переходим. Все это можно рисовать оконным заполнением и с использованием DMA. А если библиотека переносится на камень, который не имеет DMA, то его можно заменить на прерывание от SPI. Производительность не сильно пострадает. А еще можно поделить экран на условные квадраты и перед отрисовкой сначала читать содержимое нужного окна, производить модификацию и за тем отправлять обратно. Сие сократит скорость обновления картинки, однако если использовать DMA, то разгрузит процессор. Ну а плюс в модификации - можно рисовать более красивый интерфейс, с полупрозрачными элементами. Да и скорость можно поднять, если модифицировать только те зоны (квадраты), которые подвергаются изменениям.
@alexroman62464 жыл бұрын
да, только вот зачастую целевые контроллеры не имеют достаточно оперативки чтобы хранить видеобуффер. Я по крайней мере с этим столкнулся. И тут выход либо оперативку внешнюю ставить, либо рисовать медленно(насколько возможно быстро со всеми оптимизациями).
@diverom60464 жыл бұрын
@@alexroman6246 Не обязательно буффер должен быть чтобы закрасить весь дисплей. Достаточно накапливать 1/10 часть и выводить. За 10 раз можно заполнить весь экран. Это намного быстрее чем обычным способом. На разрешении 320х240 я получал 15 FPS по SPI при однотонной заливке. А на дисплее что в видео будет намного больше.
@alekseyzaretskiy57574 жыл бұрын
Ваши видео вдохновляют. Спасибо!
@oleholeynikov86594 жыл бұрын
каждый раз, когда смотрю ваши видео, ловлю себя на мысли, что вы сэкономили мне часы времени!!! спасибо!!!
@VladimirMedintsev4 жыл бұрын
А и вам спасибо на добром слове. И во вторник выйдет новое видео про дисплейчик.
@zona24519 ай бұрын
Большое вам спасибо. Мне как начинающему очень пригодится.
@ДимаДима-к1н4 жыл бұрын
Библиотека более не доступна ф. не могли бы вы выложить файл новой 030 и старой 103 биб-ки! за ранее СПАСИБО!
@pavelboboshkin38985 жыл бұрын
Недавно подключал к контроллеру дисплей (на базе ST75256) через параллельный интерфейс. Управление сигналами CS, RW, DI, E сделал через ногодрыг. Но захотелось использовать какой-то аппаратный параллельный интерфейс. Изучение вопроса показало, что требуемый интерфейс - это FSMS, и есть он только на некоторых контроллерах с кол-вом ног 100 или больше. Возникла такая идея - реализовать аппаратный параллельный интерфейс на базе стандартной периферии микроконтроллеров ARM. Понадобится: два таймера и один канал DMA. Передача данных в дисплей осуществляется так: выдаётся команда "передача данных" (DI=0), после которой идёт непрерывный поток данных (DI=1). Признак завершения потока - новая команда (DI=0). Идея такая: команда передаётся как и раньше, через ногодрыг. При передаче данных сигналы CS, RW, DI остаются неизменны. Нужно выставлять данные на GPIO c помощью DMA и защёлкивать сигналом E (ШИМ выход таймера). DMA запускается по событию от переднего фронта выхода ШИМ таймера, выставляет данные на GPIO, а задний фронт ШИМ стробирует данные. Второй таймер отсчитывает передаваемые данные и останавливает первый таймер после завершения передачи. Сомнение вызывает одно: скорость срабатывания DMA относительно события, активирующего его. Ведь DMA конкурирует с процессором за доступ к устройствам контроллера. Если усыпить контроллер после запуска передачи и не использовать другие каналы DMA, то задержки работы DMA сведутся к минимуму. Однако останутся прерывания. Известны ли данные о том, какая максимальная задержка в тактах между событием, вызывающим работу канала DMA и пересылкой данных по этому каналу?
@VladimirMedintsev5 жыл бұрын
Как-то сложно вы пытаетесь это все реализовать. А проще не модно? Во первых у DMA есть прерывания которые он генерирует по окончании передачи. Его можно использовать для переключения состояния вывода DI. В целом я не вижу здесь каких-либо проблем. С другой стороны если подцепить на 64х ногий процессор 16ти битный дисплей то что там от ног свободных останется. Надо же и остальные задачи решать. Так что если уж выбирать такой дисплей, то и процессор соответствующий.
@pavelboboshkin38985 жыл бұрын
@@VladimirMedintsev У меня дисплей с 8-битной шиной, и с минимальным циклом записи 400 наносекунд. Через ногодрыг у меня цикл записи получился 2.3 микросекунды, или 55 тактов контроллера (при 24MHz). Через DMA я ещё не пытался это программировать. Пока это только идея. Прерывание от DMA для остановки передачи, конечно, использовать можно, но если прерывание произойдёт с задержкой, большей периода ШИМ таймера (в идеале 400 ns), то в память дисплея будет записан лишний байт данных. А ещё прерывание может произойти в момент, когда прерывания запрещены. Аппаратная реализация остановки передачи лучше. (Выключение ШИМ (E) или деактивация сигнала CS).
@pavelboboshkin38985 жыл бұрын
Второй не выясненный момент - скорость срабатывания DMA относительно события (фронта сигнала ШИМ). Конечно, это можно проверить осциллографом. Но, может, кто то уже это проверял, и знает ответ?
@pavelboboshkin38985 жыл бұрын
Оказывается, на эту тему есть аппнот от ST. AN4666 "Parallel synchronous transmission using GPIO and DMA". Но тема для меня больше не актуальна. При оптимизации цикла записи данных в LCD получается достичь почти максимальной возможной скорости для этого LCD и без использования DMA. При частоте контроллера 72MHz.
@bul20125 жыл бұрын
Оооооо, а вот это вовремя, мне как раз месяц назад ст7735 и ст7789. Ща диплом сдам и примусь за работу с дисплейчиком.
@ShelbyCobraGH5 жыл бұрын
Поздравляю со сдачей. Тоже только сегодня отстрелялся) железа дома - хоть свой магазин открывай. Надо тоже садиться за проекты)
@kogram5 жыл бұрын
Хорошее видео, спасибо!
@avi-crakhome25245 жыл бұрын
Есть очень старый анекдот про палача и острый топор: проговорённый - и это всё? палач - а ты кивни... Смена мк, подключение на другой spi или ногодрыг, смена экрана, смена алгоритма вывода графики для этого или иного дисплея... Всё это должно быть прозрачно. Автор библиотеки залез на нижний железный уровень, и на верхний символьный. В результате библиотека стала уникальной, и кстати осталась таковой даже после доработок. Дисплеев великое множество, и все они отличаются способом запуска и управления. То-есть по идее библиотека должна уметь работать через примитивы железного уровня, и поставлять на верх собственные примитивы - стандартные для экранов с внутренней памятью. К сожалению подобного коммунизма не существует в природе. По этому переписывать чужие библиотеки нужно под собственный стандарт, выкидывая из неё всё лишнее. Потом легче будет, особенно через пару месяцев - когда придётся вспоминать, как всё это работает.
@СергейСеменов-г7д5 жыл бұрын
В целом, с автором согласен. HAL нормальная абстракция. Позволяет сосредоточится на алгоритмах, не тратя время на ковыряние в документации. Хотя я и на CMSIS голом писал, и на SPL и, возможно, это дает мне уверенность в том, что если уж реально нужно будет опустится до ковыряния регистров, я смогу это сделать. Новечка, конечно же, HAL расслабит очень серьезно. В общем, HAL рулит, но не всегда. Зависит от задачи. Сам недавно портировал библиотеку, написанную на SPL под хал. Не скажу что это заняло много времни. Как правило, что бы сделать первый рабочий старт библиотеки надо переписать низкоуровневые функции (дергание ногами контроллера, запись/чтение данных по интерфейсам и т.п.). До конца пока не досмотрел, но напишу, пока не забыл. Тут есть баг в либе (на сегодняшнее число он есть, может в будущем исправят). Если по SPI передавать больше одного байта, то контроллер сваливается в хардфаулт. Это именно на 030 контроллере. Тот же код на 103 работает идеально (где я передаю нужное мне количество байт фунецией SPI Transmit). Потому, если надо передать, на 030 контроллере больше одного байта, нужно сделать это по байте в for цикле.
@ВладимирВасильев-с1е5 жыл бұрын
Поддерживаю автора. Необходимо внедрять в разработку программ современных библиотек и генераторов кода для сокращения сроков разработки.
@ukrfoil4 жыл бұрын
Экран маленький . все таки экраны 3.5" TFT 9486 больше и разрешение лучше и помещается больше системной информации, а стоят также .. работаю. с ними по шине I2C .. (связке c mcp23018 (17))
@danilgaijin83665 жыл бұрын
По поводу организации кода, многие знают, но было бы здорово показать выбор рабочей секции кода с помощью препроцессора #IFDEF. Пример естественно у вас демонстративный, но было бы намного приятнее видеть такое) По поводу HAL, его преимущество в скорости разработки небольших проектах, что вы и продемонстрировали. Когда проект разрастается там уже чёрт ногу сломит. Хотя честно, эта простота определённо приятна.
@miptkol3 жыл бұрын
Как насчет того, чтобы вместо вырезания кода вручную включать -O3 в компилляторе? Он сделает примерно то-же (местами меньше, местами больше), но это не будет ручное вырезание кусков кода.
@ArthurIslamRU5 жыл бұрын
*Спасибо большое*
@awwsum5 жыл бұрын
структура батончика
@VladimirMedintsev5 жыл бұрын
Большие кнопки - батоны.
@andrewdronsson90285 жыл бұрын
Тогда надо края кнопок закруглять под батон.
@maksympavlenko53053 жыл бұрын
Не знаете есть ли библиотека для st7735 , в которой есть функция построения графиков? Или нужно самому создавать из функций типа зарисовать пиксель, построить линию от точки к точке?
@VladimirMedintsev3 жыл бұрын
Ну это же 10 строк кода... Чего там делать этот график.
@maksympavlenko53053 жыл бұрын
@@VladimirMedintsev у меня Y значения колеблются в диапазоне от 0 до 100000 (ЭКГ данные). Ко мне туго доходит, чтобы сообразить как масштабировать этот график и держать его в рамках дисплея
@VladimirMedintsev3 жыл бұрын
@@maksympavlenko5305 Скользящее среднее для вычисления среднего уровня сигнала. Из этого вычисляем масштаб. Соответственно исходные данные масштабируем и отображаем. Ничего сложного в этом нету.
@maksympavlenko53053 жыл бұрын
@@VladimirMedintsev спасибо большое. Буду продолжать париться. 😅 для вас легко конечно, а я только с Ардуины выбежал и то только лизнул слегка. Хотя тут больше даже не это играет роль. Такое наверное просто сообразить нужно, а на каком языке писать уже все равно. Спасибо за быстрый ответ
@ИнженерыИнформ Жыл бұрын
Меня что удивило, не оказалось ни одного полного примера использования платы аналоговых входов на микросхеме ADS1256 под STM32. Есть примеры под ардуино, а под стм нет.
@Frutktt4 жыл бұрын
Почему производитель чипов ST7735 делает чехарду с именами выводов? Интерфейс SPI, а названы как I2C. Я имею в виду SDA и SCL. Когда хотел подключить экран к ардуине чуть с ума не сошёл, это нигде не указано.
@VladimirMedintsev4 жыл бұрын
Это общемировая проблема которая уже не первый год приводит к различным казусам и проблемам. Каждый именует ноги интерфейсов как хочет. CLK - SPC, SDO, SDI и прочие и прочие. Приходится каждый раз очень внимательно читать datasheet
@sergeyrink30034 жыл бұрын
А не пробовали OLED отключать чтобы не выгорал. И включать только при необходимости, при открытии щитка или в аварийном режиме оповещения.
@VladimirMedintsev4 жыл бұрын
Пробовали. Не помогает.
@ruslankalchev4721 Жыл бұрын
Здравствуйте. А почему вы про LL не упоминаете, ведь там тоже кое-что есть и она отягощает код лишними проверками!? Я в некоторых проектах использую и HAL, и LL одновременно.
@arzamas19884 жыл бұрын
Тоже постоянно заимствую либы на гитхабе. Нет времени разбираться со всем и писать свою либу. Аналогично перекапывал код, адаптировал под HAL.
@igorgoblin11235 жыл бұрын
Ага, круто! HAL это клёво дя бвстрой разработки и проверки. Дальше писать ручками без библиотек или хотя бы минимум cmsis. Могу утверждать со 100% уверенностью на примере ST7789 и дисплея 240х240- без HAL работает в 4 раза быстрее. А использовать или нет библиотеку решать конечно вам. Видео даже писал заливки экрана одним цветом с использованием HAL и без
@kardanium5 жыл бұрын
Я когда делал цифровую обработку звука на STM32F407, я сначала тоже слепил все на HAL в Кубе, чтобы тупо прогнать звук с одного интерфейса I2S в другой с целью проверки правильности сборки соплей на макетке. И как только я удостоверился, что все ОК, выкинул этот проект и начал уже чистый, где все настраивал на регистрах. Ибо нужен был каждый такт, так как цифровых фильтров нужно целую кучу. В ход пошли даже специальные DSP инструкции этого камня и некоторые банальные вещи, как перестановка двух полуслов местами в 32-битном слове - пришлось лепить ассемблером, ибо есть инструкции, которые сделают это за такт. А компилятор упорно не хотел их применять. Даже тактирование настраивал вручную, так как мне нужно было корректно реагировать на отвалы кварца (сначала дергать линию аварийного останова, потом уже все остальное), ибо это не просто обработчик звука, а целый усилитель на полкиловатта, класса D.
@pistoletov19744 жыл бұрын
Графические библиотеки быстрые там где framebuffer используется. Правда не знаю есть ли такая для этого дисплейчика. Хотелось бы такую
@VladimirMedintsev4 жыл бұрын
Напишите, делов на вечер. Тем более на карантине....
@alexanderurezchenko64465 жыл бұрын
Владимир, а сколько примерно памяти у Вас занял сей проект на F030? На сколько с Вашей точки зрения можно использовать данный МК для решения "боевых" задач? Или все же это больше устройство для тестов?
@VladimirMedintsev5 жыл бұрын
Я вечером замерю и отвечу подробнее по размеру кода. Но что касается самого МК это вполне себе устройство. Я его использовал в датчике пульсоксиметра и вполне доволен. На нем был ввод-вывод данных, фильтрация сигнала и автоподстройка. Так что вполне себе рабочий контроллер.
@VladimirMedintsev5 жыл бұрын
Program Size: Code=6600 RO-data=3056 RW-data=8 ZI-data=1192 Собственно у вас доступно 16 килобайт flash памяти а занято 6,6 нет повода для какого-либо беспокойства. Тем более, что этот MCU он же не создан для работы с экраном. У него свои задачи и он им вполне соответствует. Но даже при таком использовании вполне себе такой рабочий малыш.
@80cahek5 жыл бұрын
У меня влезло управление усилителем с экраном 16×2, флеш памятью внешней для хранения настроек, фм на rda5807 с rds. И я не сильно парился с экономией памяти.
@toshibamaster22102 ай бұрын
подскажите какое напряжение на подсветку , CS можно на землю а reset на + ? spi на какой скорости ?
@VladimirMedintsev2 ай бұрын
@@toshibamaster2210 3,3 вольта. Можно
@smartrobot93834 жыл бұрын
Здравствуйте! С днем радио и связи! подскажите, как добавить библиотеку в проект?
@Insideus27865 жыл бұрын
Спасибо за интересное видео! Интересно было бы узнать, какие средства разработки GUI вы используете в своих рабочих проектах? К сожалению, те стандартные библиотечные функции отрисовки списков, кнопок и прогресс баров, которые показаны в данной видео, подходят больше для обучающих целей, ибо выглядят очень уж по колхозному.
@VladimirMedintsev5 жыл бұрын
Нет ну для эстетов есть TouchGFX. ST даже недавно вэбинар по ней проводили. А вообще если часик позаниматься и показанное в видео можно модифицировать. Иными словами ничего заслуживающего внимания я не использую.
@ПетрГуберт5 жыл бұрын
Владимир, добрый день! Не сталкивались с такой проблемой? Подключаю экран на таком же контроллере к китайской плате с f407zgt. Если подключить к spi1, то текст и изображения искажаются, если к spi2, то все в порядке. Все бы ничего, но у spi1 скорость в 2 раза выше.
@aemarkov4 жыл бұрын
Вы расписали не преимущества библиотеки HAL, а преимущества Hardware Abstraction Layer как концепции. Если заменить в этом видео HAL на SPL или даже opencm3 - ничего не измениться. Да, HAL - это самая популярная и официально поддерживаемая библиотека. Но все равно она мне не нравится. Мне вообще не нравится ни одна ST-шная библиотека. Дисклеймер: я не являюсь профессиональным разработчиком STM32, поэтому вопросы эффективности и прочих бизнес-штук у меня не стоят, а все сказанное - ИМХО. Итак: 1. Библиотека HAL чрезвычайно раздута. Вы сами показали это в примере с SPI. 2. Хранение всех этих управляющих структур в ОЗУ 3. Настройка периферии с кучей коллбеков. Для инициализации производительность не так важна, но все же. И это усложняет понимание библиотеки. 4. Обработка прерываний с кучей коллбеков. А вот тут уже страдает производительность. 5. Она банально некрасивая. Да, я понимаю, что "красота" кода - это понятие сугубо субъективное, но я предупреждал. 6. (Про куб, а не про HAL). Я понимаю, что куб так работает, но все эти комментарии вида USER CODE BEGIN меня раздражают, нарушают читаемость, красоту кода и вообще идут в разрез с моим чувством прекрасного. Напоминаю - ИМХО. Быстрый говнокод, потому что нужно вчера, а вчера никто не знал, я могу и на работе писать. Дома писать я хочу красиво. Очень перспективным я считаю подход использования C++ и zero-cost абстракций. С помощью магии шаблонного метапрограммирования в современном C++ можно делать абстракцию над железом, которая не будет компилироваться в тот же машинный код, что и написанный руками на CMSIS. Проинициализировать UART, чтобы библиотека сама проинициализировала соответствуюищие пины и RCC? Код со сложностью "ардуины" и эффективностью CMSIS? В теории, возможно. Подробнее ознаокмиться с темой можно на хабре, там полгода назад были популярны статьи на эту тему. Но на практике нет ни одной библиотеки такого рода, которая действительно получила хоть какую-то популярность. C++ template HAL'ов на гитхабе немало, но все они остаются сугубо личными проектами, либо имеют очень маленькую аудиторию. Поэтому я не могу их рекомендовать даже для домашнего применения, не говоря уже о каком-то продакшене. Что есть еще? Есть Rust Embedded. github.com/rust-embedded/awesome-embedded-rust. Это выглядит очень, очень круто. Люди пытаются в экосистему, которая обладает высоким уровнем абстракции и переносимостью (даже между разными фирмами МК), с сохранением эффективности. Но пока сыро, много чего нет, а серьезный эмбеддед хочет не диодом моргать и в юарт писать с максимальной эффективностью, а USB, FatFS, RTOS, экраны и еще черт знает что. А это как раз то, где ST'шный HAL хорош. Напоследок. Абстракции текут, а в этой области текут очень сильно. Попытки сделать универсальный чудесный HAL приводят к появлению ардуин, которые подводят все МК к общему знаменателю, самому хилому. Ведь в разных МК есть разные заморочки, позволяющие решить ту или иную задачу чуть эффективнее.
@VladimirMedintsev4 жыл бұрын
Вот тут я специально делал обзор библиотек - kzbin.info/www/bejne/q4WVf6imnqh-ma8 И да, обратные вызовы это просто сказочное решение если их правильно использовать.
@aemarkov4 жыл бұрын
@@VladimirMedintsev Благодарю, видимо, я не очень разобрался, надо будет лучше покурить их документацию.
@alexroman62465 жыл бұрын
hal это как java-ценою скорости можно запускать на разных устройствах. для каждой задачи надо иметь подходящий мк.
@alexglushenko67545 жыл бұрын
Добрый день. Почему не используете dma?
@VladimirMedintsev5 жыл бұрын
DMA подразумевает обмен данными между памятью и периферией. Чтобы сделать видео-память для этого экрана потребуется 40 килобайт. Короче смысла нету.
@sergeyterentiev47205 жыл бұрын
@@VladimirMedintsev Имеет смысл использовать для заливки экрана одним цветом или заливки каких-то областей. Памяти, как вы понимаете, для этого не надо, т.к. шлется одно и тоже значение.
@liftoman_777 Жыл бұрын
Не подскажите, а Вы победили зависание МК при обрыве (подыхании) OLED экрана? Спасибо!
@VladimirMedintsev Жыл бұрын
У меня не бывает зависаний МК
@olegk2005 Жыл бұрын
Вписываете в конце кода вочдог и он будет перегружать контроллер при зависании.
@denial38743 жыл бұрын
Пусть те кто рассказывают что HAL плохой пусть хоть один урок снимут про свою любимую библиотеку
@isakneuman99952 жыл бұрын
им не до этого. они обычно работают и получают реальные заказы за реальные деньги
@denial38742 жыл бұрын
@@isakneuman9995 А на хейтинг время есть
@isakneuman99952 жыл бұрын
@@denial3874 обычно кто хейтит это начинающие и те кто не далеко ушли. Я учусь у реальных разработчиков. Все юзают цмсис и свои локальные либры которых сами писали. Хал у них чисто на подхвате когда бухают и спорят друг с другом чтоб быстро посмотреть.
@isakneuman99952 жыл бұрын
@@denial3874 просто понимаешь то на чем халловцы боятся для настоящих разработчиков ничего. Они всю эту инициализацию с закрытыми глазами как только проект открывают печатают. А для халловцев это что то сверх сильное. Вот и сидят как макаки зависимые
@isakneuman99952 жыл бұрын
@@denial3874 "Добрый день. :) Оставьте этого товарища писать на своем Ардуино. :) А сами продолжайте изучать, как контроллер работает изнутри. :) Это особенно актуально сейчас, когда начались проблемы с поставками. Любители Cube прочно подсажены на STM32, такой код сложно портировать на другой контроллер. Потому им остается платить ST столько, сколько они скажут, и ждать столько, сколько придется. С другой стороны, если человек разбирается в работе контроллера в принципе, и может писать код без всяких кубов, ему не составит труда разобраться с любой другой архитектурой и портировать решение под нее. Так что в некотором смысле да, работники ST не зря получают свою зарплату - существенное количество людей прочно подсажено на STM32 и не в состоянии слезть с этих контроллеров без большой головной боли. Для ST это, конечно, плюс. :)"
@ДмитроПерший5 жыл бұрын
Спасибо за интересный материал. Я использовал функцию HAL по передаче по протоколу SPI, но на высокой скорости. Поэтому, прорисовка экрана была нормальной. Но теперь вижу, что и её можно существенно ускорить. Можно Вас попросить сделать видео о том, каким образом организовать чтение графического файла с cd-card с последующим выводом на экран без использования большого буфера (равного размеру области, которая будет окрашиваться). Т.е. алгоритм будет не таким: "Читаем данные в буфер" -> "Передаём данные из буфера на экран", а сразу с флешки на экран. В переписке Вы упомянули, что такое возможно. Заранее спасибо.
@VladimirMedintsev5 жыл бұрын
Чтобы вам долго не ждать с тем пока я видео сделаю и все такое, пока раскачаюсь... Тут совсем недавно было вот такое - kzbin.info/www/bejne/oJSYYX6Lr8-miKs и к видео даже код есть. Очень полезное видео хоть и рассказано мало, но есть за что зацепиться. И там как раз нечто похожее реализовано.
@ДмитроПерший5 жыл бұрын
@@VladimirMedintsev Использовать внешнюю память в моём случае не получится. Учитывая, что у меня обновляется не весь экран, а отдельные области, буду под каждый тип иконок создавать буфер в виде массива. После передачи - освобождать память. В моём случае это приемлемо. Ну а если работать со всем экраном целиком и не просто заливая его одним цветом, а выводить полноценные картинки, не хватит места под такой буфер в памяти контроллера. Придётся частями отображать картинку. Я сейчас пытаюсь сделать информационный дисплей на приборную панель в своё авто. Пока залил всё в память контролера. Но места в нём катастрофически не хватает. Вот и хочу все изображения разместить на cd-card и выводить пофайлово на экран пиктограммы.
@aemarkov4 жыл бұрын
Внимание вопрос: насколько HAL распространен среди тех, кто занимается разработкой под STM32 на коммерческой основе? Какие там подходы?
@VladimirMedintsev4 жыл бұрын
В России не сильно распространена. На западе достаточно широко используется. В силовой электронике НЕ используется нигде. Реальный плюс этой библиотеки уменьшение порога вхождения, крайняя простота освоения и использования. Легкость оптимизации.
@Веб-разработка-л3р Жыл бұрын
@@VladimirMedintsev А почему HAL не используют в силовой электронике? Насколько я понмю, вы сделали электронную нагрузку, прошивка которой написана с использованием HAL.
@MrEksol4 ай бұрын
Силовая электроника не терпит ошибок в формировании сигналов. Чем выше уровень языка, тем менее точнее отрабатываются задержки. И тем выше вероятность бабаха. @@Веб-разработка-л3р
@ibrag20125 жыл бұрын
Зробив теж саме але конфігуратор видав 24Мб/с.
@edmelectronics4110 Жыл бұрын
Ссылка на библиотека не работает. Откуда можно взять?
@VladimirMedintsev Жыл бұрын
Не работает. Автор ее удалил.
@raal8438 Жыл бұрын
@@VladimirMedintsev тогда свой файл выложи! ученик твой просит! или ты много много деньгов хатишь низашто! )))
@VladimirMedintsev Жыл бұрын
@@raal8438 Продолжишь хамить - заблокирую.
@MTechnologies68 Жыл бұрын
@@raal8438?! Ты идиот? Человек вообще про деньги молчит, нахрен писать дичь?
подойдет ли микросхема f030 для задачи: реализация двух интерфейсов 1-wire и i2c, логика простая, прочитать данные с i2c и передать по 1-wire и наоборот, 1-wire в режиме slave ?
@VladimirMedintsev5 жыл бұрын
Ну разумеется подойдет.
@CanchezAK3 жыл бұрын
Блин, нигде не могу найти информацию по работе с этим дисплеем в параллельном режиме, в даташите нашел информацию о передаче цвета на каждый пиксель, ок, RGB565 16-bit понятно, но даже там нашелся вопрос на тему: А какой стартовый адрес пикселей-то? Проще говоря, с какого угла считать? Автор, можешь сделать видео по работе с этим дисплеем в параллельном режиме (или с похожим, но на том же контроллере)?
@alexaleynikov89784 жыл бұрын
Добрый день, ссылка на библиотеку не работает. Есть возможность выложить ее?
@VladimirMedintsev4 жыл бұрын
Видать автор библиотеки хостинг не продлил...
@alexey-art-studio4 жыл бұрын
@@VladimirMedintsev а у вас копия не сохранилась?
@VladimirMedintsev4 жыл бұрын
@@alexey-art-studio Так себе идея чужие библиотеки раздавать. yadi.sk/d/Le-NLpX8Ri42JQ
@alexey-art-studio4 жыл бұрын
если не трудно закиньте демо проект куда нибудь...
@Avrora7072 жыл бұрын
Из опытов знаю что М0 спокойно раскручивается до 72 МГц и продолжает работать без глюков. Хотя маленько греется. А если вообще без стыда и совести, то до 94 Мгц его разгонял. Но там уже подвисания начинаются. Но это явно не для любителей строго даташитного включения)
@alexanderurezchenko64462 жыл бұрын
К сожалению, ссылка с кдом библиотеки не работает...
@ЭльМеф6 ай бұрын
А где можно найти библиотеку на st7735? И можно ли с HAL на cmsis переписать?
@VladimirMedintsev6 ай бұрын
Библиотеку о которой я рассказывал автор удалил. Но подобных очень много. Переписать можно
@ЭльМеф6 ай бұрын
@@VladimirMedintsev Ну дайте хоть ссылку.Ещё один вопрос st7735 и iii9341 библиотеки похожи или нужно другую библиотеку?
@VladimirMedintsev6 ай бұрын
@user-nj4vm4sh2l нужно другую библиотеку
@ivanrusev22705 ай бұрын
@@VladimirMedintsev А как можно кирилицу выаодить.?
@VladimirMedintsev5 ай бұрын
@ivanrusev2270 Подключить кирилический шрифт и выводить. Ну уж это вообще не проблема. Есть куча генераторов шрифта.
@gintarasbaranauskas20355 жыл бұрын
Для управления GPIO ножек лучше использовать библиотеку LL а не HAL. Она работает гораздо быстрее и генерирует более компактный код.
@vladimirvt39304 жыл бұрын
Ссылка "Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2..." не рабочая!
@VladimirMedintsev4 жыл бұрын
Да, ссылка не рабочая. Этот контент больше не существует на сайте автора. Я ничего с этим поделать не могу.
@ivank.r.89455 жыл бұрын
Что в библиотеке SPI? Вы подключили вручную библиотеку SPI.h, а что в ней находится? у меня почти один в один, как у вас, но при этом ругается на HAL_SPI_Transmit( &hspi1, &data, 0x01, 10); Программа не понимает, откуда растут ноги у этой структуры( или функция) hspi1, пишет, что не декларирована, но если нажать go to definition он находит эту строчку там в мейне.Вопрос, как исправить эту ситуацию?
@VladimirMedintsev5 жыл бұрын
Все зависит от того, как у вас сгенерирован проект в кубе. Если вы включили расширенные настройки то у вас вся инициализация SPI находится в отдельном файле. И соответственно объявлять надо его. Если стандартные то в main.c и тогда надо в библиотеку прописать main.h Это показывает что у вас проблемы не с микроконтроллером а с пониманием языка C.
@ivank.r.89455 жыл бұрын
@@VladimirMedintsev Инициализация идет в мейне (static void MX_SPI1_Init(void)), подключил библиотеки в файле st7735 #include "main.h" #include "st7735.h" #include "stm32f0xx_hal_spi.h"
@ivank.r.89455 жыл бұрын
Даже добавление чисто библиотеки устройства не дает эффекта(оно и не может, я просто в отчаянии)
@VladimirMedintsev5 жыл бұрын
@@ivank.r.8945 Вы можете показать какую ошибку дает компилятор?
@ivank.r.89455 жыл бұрын
@@VladimirMedintsev она пишет, что функция hspi1 не определена, undefined
@samatsamatov55655 жыл бұрын
И всё же, было бы очень хорошо выложить свои исходники. В целях обучения, конечно.
@VladimirMedintsev5 жыл бұрын
Все достаточно просто. Я не против чем-то делиться с коллегами по цеху если это можно так назвать. Буквально пару недель назад и я у одного из подписчиков просил библиотеку т.к. сам застопорился в разработке. И взглянув на написанное у него удивился насколько все было просто. В данном случае я дал ссылку на библиотеку. Пользуйтесь пожалуйста. А вот подход ардуино-франкенштейнов когда проект лепится из убогого кода бездумно скомпилированных мыслей других людей я не поддерживаю.
@СтасСомов-н4ъ4 жыл бұрын
Здрасьте, что за зверь процессор f303 ?
@VladimirMedintsev4 жыл бұрын
STM32F303
@AndreyChigisheff5 жыл бұрын
Приятель подарил несколько дисплеев от телефонов. К сожалению гугл и яндекс не помогли их опознать. Нет какой нибудь тайной нычки?
@VladimirMedintsev5 жыл бұрын
Мне такая неизвестна, может кто из общественности подскажет.
@МихаилАаа-д3ю5 жыл бұрын
Есть русскоязычный ресурс, в котором тусуются любители подключения неизвестных дисплеев к микропроцессорам. В основном они там Ардуину мучают. К сожалению, адрес не сохранился.
@ugene40635 жыл бұрын
Hal хороша для жирных чипов. Но сие не всегда возможно ессно по соображениям финансовым🙂
@alexorlovecky80154 жыл бұрын
Никогда не понимал, почему все доступные библиотеки всяких дисплейчиков сделанны на прерываниях и ногодрыгах… Прям заговор какой то. Ведь есть же ДМА... Всегда беру только логику инициализации и настройки (бо лень разбирать все регистры в мануале дисплея) и переписываю под ДМА. Да, с ДМА удобно работать с буффером всего экрана, что не возможно на младших линейках МК. Но выдумал велосипед, который динамически выделят буфер, конкретно нужного участка. При этом вся работа осуществляется по средством "контроллера задач". То бишь есть массив абстрактных задач(текс, всякие кнопки, геометрические фигуры). Каждая задача, это структурка с общими атрибутами. В этот массив добавляем/изменяем/удаляем задачу. Вуаля! У нас не тратится ресурс ядра, нам не нужен целый буффер дисплея. Работает всё в разы быстрее, и не нужно обновлять весь экран (что так же визуально выглядит в разы приятней)Кстате, автору. Чисто для себя, сравните выигрыш после Вашей оптимизацией, и с стандартной функцией хала с включённой оптимизацией "фаст" во вкладке компилятора.. Разница если и будет, то сильно не значительна. Сильно вумные сегодня компиляторы, после которых в ассемблер вообще лезть не хочится.
@VladimirMedintsev4 жыл бұрын
Сложность тут у всех одна. По какой-то причине ни у кого нет времени ждать и делать вдумчивое программирование как для себя. Вот взять хоть последний год. Заказчиков, кто готов был бы делать проект хоть 2 месяца можно пересчитать по пальцам. В основной массе все прибегают как кипятком облитые. 3 недели и проект должен быть готов. Это жуть какая-то. Разумеется при таком цейтноте ни о каком вдумчивом программировании и DMA вообще не идет речи. Тут только ногодрыг в самом худшем его проявлении и с дикими лагами. И заказчика я тоже в большинстве случаев могу понять. Ему эту плату вставить в изделие у которого сроки горят и вперед... При этом ладно бы использовались одни и те же экраны. Нет, как на подбор все разные у одного любовь к "жутким чернилам", другому OLED подавай, третий где-то прочитал что все это ерунда и хочет кучу светодиодиков и не думать о выгорании экрана. Так что если это не долговременный проект, а текучка, работы с DMA и хорошего программирования не ждите.
@bigga9515 жыл бұрын
Спасибо, доходчиво, понял. А вот если мне придется подцепить 3 дисплея сразу? Это для C вообще реализуемо? Или только ООП и С++?
@VladimirMedintsev5 жыл бұрын
Пожалуйста, нужно 3 дисплея подключайте 3 дисплея. С точки зрения контроллера ему нет разницы сколько дисплеев в вашей конструкции. А вопроса про то, реализуемо ли это на языке С или надо использовать ООП я честно говоря не понял. А что-то есть реализуемое на С++ чего нельзя реализовать на С?
@bigga9515 жыл бұрын
@@VladimirMedintsev проинициализировать дисплей 3 раза, каждый со своим CS, на С++ я это могу представить более-менее четко. Как это реализовать на C, пока не догоняю
@VladimirMedintsev5 жыл бұрын
@@bigga951 Есть простой способ, изменить функции (из библиотеки работы с дисплеем) таким образом чтобы им в параметрах передавался еще и номер дисплея. Соответственно пусть они этот номер протягивают до самого нижнего уровня - до общения по SPI интерфейсу и там дергают за ногу соответствующий CS-pin. Таким образом все будет прекрасно работать. Ну и надо не забывать, что в любой момент вы можете классический "C" обернуть в обьект и перейти на C++ если вам так удобнее. И среда программирования и структура всех библиотек это позволяет. Другой дело что это редко делают потому что в этом нет потребностей. Но весь инструментарий позволяет перейти на плюсы без каких-либо проблем.
@bigga9515 жыл бұрын
@@VladimirMedintsev Точно! CS будет 3 штуки, и уже в параметрах отрисовки появится еще одна переменная=))). Спасибо=). Не знаю, что и делал бы без Ваших видео. Про CAN очень хорошо зашло, за вечер вдумчивого просмотра БК набросал-завел, с блэк-джеком и часиками=).
@Alexander_Gurov_RF5 жыл бұрын
Ге всегда hal - это хорошо. Просто в данном примере всё слишком топорно сделано. А так то, если по нормальному делать, можно было разбить на абстракции, и потом легко переносить. Хоть на тот же hal.
@electronicelectronic-wo3yk4 жыл бұрын
Здравствуйте! Ссылка не работает Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2...
@VladimirMedintsev4 жыл бұрын
Да, ссылка не работает. Причина автор библиотеки не продлил хостинг. Если прочитаете комментарии под роликом то обнаружите альтернативную ссылку.
@yroslavivanov85864 жыл бұрын
Библиотеку скачать невозможно (((
@VladimirMedintsev4 жыл бұрын
Да, невозможно, ее автор удалил свой сайт. А вот если посмотрите в комментариях, то наверняка найдете нормальную ссылку.
@MrEksol4 ай бұрын
Полезный ролик но ркн не дает посмотреть
@VladimirMedintsev4 ай бұрын
@@MrEksol РКН тут точно не при чем. Все претензии в Google отправляйте.
@dmitriyterkhov85712 ай бұрын
@@VladimirMedintsevпрошёл месяц и после того как РКН признал что замедлил ютуб, Вы по прежнему считаете что это гугл виноват?
@VladimirMedintsev2 ай бұрын
@dmitriyterkhov8571 Да, я действительно считаю что в этом виновата корпорация Google. Она не выполняла требования российского законодательства.
@CoBaldr5 жыл бұрын
модно? кек, а я тут по своей глупости думал что модно это ардуина, как же я ошибался)
@LexxS793 жыл бұрын
Ни хера не понял. Тёмный лес для меня.
@ArtemKAD13 жыл бұрын
Проблема этой библиотеки лишь в том, что автор не вынес в одно место название битов и портов. HAL там ничего другого не сделал.
@slime9245 жыл бұрын
а где код либы на HAL?)
@VladimirMedintsev5 жыл бұрын
Он показан в видео.
@EnemyState-i3u5 жыл бұрын
Красиво но ... фигня эти дисплеи. стоят как чугунный мост а памяти откусывают на реализацию глядения на них ойойой. как правило обработчик целевых задач занимает полкопейки а задачи отражения настроек девайса на рубль. пробовал такой девайс применить.. вот - kzbin.info/www/bejne/m4GbfKKpfNSUetU . Все дисплеи у нас уже как правило есть. то смартфон. достаточно написать сервер и через esp32 не только по wifi но и удаленно можно наблюдать и управлять. Тем более с китая чета посылки перестают приходить и особенно дисплеи.
@VladimirMedintsev5 жыл бұрын
Ну давайте по пунктам: 1. Стоит такой дисплей без платы 116 рублей на сегодняшний день. Это хорошая цена. 2. Памяти практически не откусывают если не делать видео-буфер. 3. В промышленной электронике типа контроллеров для оперативного управления использовать Wi-Fi недопустимо. Стандартами прописано ручное управление и отображение информации на приборе. 4. С посылками из Китая все хорошо. В моей немалой истории только одна пропала и то был косяк локальной почты.
@generalleitenant424 жыл бұрын
Здраствуйте скиньте пожалуйста полностью исходный код с библиотеками на general.leitenant.42@mail.ru
@vadimerofeev11484 жыл бұрын
HAL от STM это самая тупая и бесполезная библиотека. Для каждого периферийного модуля она хранит в ОЗУ копию всего регистрового контекста. Она хороша только для тех, кто пришел в STM32 из адурины. Они так и носят с собой костыли.
@VladimirMedintsev4 жыл бұрын
И именно по этой причине данная библиотека так активно развивается производителем и тысячи разработчиков зарубежом ее используют? Ну вы прям молодец. Все дураки, а вы Дартаньян. Так получается?
@МиколаМельничук-в4п4 жыл бұрын
программирование на регистрах рано или поздно уйдёт в прошлое и мы о нём забудем как о страшном сне. Наведу вам такой себе примерчик... Имеем STM32H7 контроллер, к которому подключен 7" - дисплей по LTDC. Также к контроллеру подрублена оперативка (MT48LC32M16). Всё это дело коннектится в сеть (LAN8742 + LWIP) Я даже боюсь себе представить как без HAL-a и куба нужно будет натр***тся с регистрами что бы это всё завести
@dazzershell3 жыл бұрын
@@МиколаМельничук-в4п ХАЛ хорош тем, что он дополняет иногда коряво сделанное описание к периферии контроллеров, открывает тайны его особенностей и глюков. На старые МК были такие code-snippets, по сути шпаргалки под типовые задачи. Отличная вещь, жаль сейчас их не выкладывают. Настройка таймера занимала 5 строчек, с комментариями она давала больше ясности, чем казенные пространные мануалы и аппноуты от индусов из СТ.
@xbevice5 жыл бұрын
Hal это плохо. Косяки есть на уровне архитектуры
@VladimirMedintsev5 жыл бұрын
О какая фраза потрясающая. Пример косяка привести сможете?
@avi-crakhome25245 жыл бұрын
@@VladimirMedintsev Всё в одном файле, переносимость нулевая. Железный уровень(spi и всё что с ним связано), аппаратно зависимый уровень(инициализация регистров дисплея), программно-зависимый уровень (функции рисования графики). Управление графикой у вас отдельно, но пробивает до самого дна. Пример отсутствия ошибок - файлы шрифтов. Наверное от того что сами по себе большие. Желательно ограничить их видимость только для функций рисования.
@xbevice5 жыл бұрын
Vladimir Medintsev да легко, все прерывания обрабатываются единым обработчиком хала, который плевать хотел на приоритеты, и смотрит только флаги, в порядке заданном программистами хала.
@XpIOHdeJIb30002 жыл бұрын
ахренеть насколько кривущая библиотека, стыдно должно быть такое показывать.