STM32 + Дисплей ST7735 или почему HAL это хорошая библиотека

  Рет қаралды 46,109

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Пікірлер: 165
@kardanium
@kardanium 5 жыл бұрын
А еще скорость можно поднять, если оптимизировать работу графической библиотеки в сторону сокращения количества транзакций по SPI, задействовать DMA и функции оконного заполнения в контроллере дисплея. То есть, сначала рисуем кусок графического примитива в некоторый буфер в ОЗУ, за тем одной транзакцией задаем окно заполнения и второй транзакцией сливаем буфер в это окно. Если примитив огромный, то можно рисовать его по частям. Это все равно будет быстрее, чем слать координаты каждого пикселя, а потом его цвет. Так и ядро камня будет меньше загружено, так как передачей данных занимается DMA, и картинка будет быстрее рисоваться на дисплее, так как координаты задаются только один раз, когда задается окно и потом уже непрерывно сливается блок цветов пикселей. В качестве примера возьмем функцию вывода текста: Выделяем буфер, размером в одно знакоместо (под один символ). Формируем в нем растр символа. Отсылаем дисплею команды формирования окна: Начальные координаты, конечные координаты, направление заполнения. Заливаем содержимое буфера в дисплей в режиме данных. Выполняем что-нибудь другое, пока DMA шлет буфер в дисплей. Например, готовим второй буфер, если ОЗУ хватит. Символ напечатан, приступаем к следующему. На видео видно, что листбокс перерисовывается полностью, когда перемещается курсор выбора. В качестве ввода у нас только кнопки, потому мы не можем прыгнуть через элемент, а только с текущего на соседний. Вот и перерисовать можно только их. Сначала перересовываем текущий, а потом тот, на который переходим. Все это можно рисовать оконным заполнением и с использованием DMA. А если библиотека переносится на камень, который не имеет DMA, то его можно заменить на прерывание от SPI. Производительность не сильно пострадает. А еще можно поделить экран на условные квадраты и перед отрисовкой сначала читать содержимое нужного окна, производить модификацию и за тем отправлять обратно. Сие сократит скорость обновления картинки, однако если использовать DMA, то разгрузит процессор. Ну а плюс в модификации - можно рисовать более красивый интерфейс, с полупрозрачными элементами. Да и скорость можно поднять, если модифицировать только те зоны (квадраты), которые подвергаются изменениям.
@alexroman6246
@alexroman6246 4 жыл бұрын
да, только вот зачастую целевые контроллеры не имеют достаточно оперативки чтобы хранить видеобуффер. Я по крайней мере с этим столкнулся. И тут выход либо оперативку внешнюю ставить, либо рисовать медленно(насколько возможно быстро со всеми оптимизациями).
@diverom6046
@diverom6046 4 жыл бұрын
@@alexroman6246 Не обязательно буффер должен быть чтобы закрасить весь дисплей. Достаточно накапливать 1/10 часть и выводить. За 10 раз можно заполнить весь экран. Это намного быстрее чем обычным способом. На разрешении 320х240 я получал 15 FPS по SPI при однотонной заливке. А на дисплее что в видео будет намного больше.
@alekseyzaretskiy5757
@alekseyzaretskiy5757 4 жыл бұрын
Ваши видео вдохновляют. Спасибо!
@oleholeynikov8659
@oleholeynikov8659 4 жыл бұрын
каждый раз, когда смотрю ваши видео, ловлю себя на мысли, что вы сэкономили мне часы времени!!! спасибо!!!
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
А и вам спасибо на добром слове. И во вторник выйдет новое видео про дисплейчик.
@zona2451
@zona2451 9 ай бұрын
Большое вам спасибо. Мне как начинающему очень пригодится.
@ДимаДима-к1н
@ДимаДима-к1н 4 жыл бұрын
Библиотека более не доступна ф. не могли бы вы выложить файл новой 030 и старой 103 биб-ки! за ранее СПАСИБО!
@pavelboboshkin3898
@pavelboboshkin3898 5 жыл бұрын
Недавно подключал к контроллеру дисплей (на базе 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 и пересылкой данных по этому каналу?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Как-то сложно вы пытаетесь это все реализовать. А проще не модно? Во первых у DMA есть прерывания которые он генерирует по окончании передачи. Его можно использовать для переключения состояния вывода DI. В целом я не вижу здесь каких-либо проблем. С другой стороны если подцепить на 64х ногий процессор 16ти битный дисплей то что там от ног свободных останется. Надо же и остальные задачи решать. Так что если уж выбирать такой дисплей, то и процессор соответствующий.
@pavelboboshkin3898
@pavelboboshkin3898 5 жыл бұрын
@@VladimirMedintsev У меня дисплей с 8-битной шиной, и с минимальным циклом записи 400 наносекунд. Через ногодрыг у меня цикл записи получился 2.3 микросекунды, или 55 тактов контроллера (при 24MHz). Через DMA я ещё не пытался это программировать. Пока это только идея. Прерывание от DMA для остановки передачи, конечно, использовать можно, но если прерывание произойдёт с задержкой, большей периода ШИМ таймера (в идеале 400 ns), то в память дисплея будет записан лишний байт данных. А ещё прерывание может произойти в момент, когда прерывания запрещены. Аппаратная реализация остановки передачи лучше. (Выключение ШИМ (E) или деактивация сигнала CS).
@pavelboboshkin3898
@pavelboboshkin3898 5 жыл бұрын
Второй не выясненный момент - скорость срабатывания DMA относительно события (фронта сигнала ШИМ). Конечно, это можно проверить осциллографом. Но, может, кто то уже это проверял, и знает ответ?
@pavelboboshkin3898
@pavelboboshkin3898 5 жыл бұрын
Оказывается, на эту тему есть аппнот от ST. AN4666 "Parallel synchronous transmission using GPIO and DMA". Но тема для меня больше не актуальна. При оптимизации цикла записи данных в LCD получается достичь почти максимальной возможной скорости для этого LCD и без использования DMA. При частоте контроллера 72MHz.
@bul2012
@bul2012 5 жыл бұрын
Оооооо, а вот это вовремя, мне как раз месяц назад ст7735 и ст7789. Ща диплом сдам и примусь за работу с дисплейчиком.
@ShelbyCobraGH
@ShelbyCobraGH 5 жыл бұрын
Поздравляю со сдачей. Тоже только сегодня отстрелялся) железа дома - хоть свой магазин открывай. Надо тоже садиться за проекты)
@kogram
@kogram 5 жыл бұрын
Хорошее видео, спасибо!
@avi-crakhome2524
@avi-crakhome2524 5 жыл бұрын
Есть очень старый анекдот про палача и острый топор: проговорённый - и это всё? палач - а ты кивни... Смена мк, подключение на другой spi или ногодрыг, смена экрана, смена алгоритма вывода графики для этого или иного дисплея... Всё это должно быть прозрачно. Автор библиотеки залез на нижний железный уровень, и на верхний символьный. В результате библиотека стала уникальной, и кстати осталась таковой даже после доработок. Дисплеев великое множество, и все они отличаются способом запуска и управления. То-есть по идее библиотека должна уметь работать через примитивы железного уровня, и поставлять на верх собственные примитивы - стандартные для экранов с внутренней памятью. К сожалению подобного коммунизма не существует в природе. По этому переписывать чужие библиотеки нужно под собственный стандарт, выкидывая из неё всё лишнее. Потом легче будет, особенно через пару месяцев - когда придётся вспоминать, как всё это работает.
@СергейСеменов-г7д
@СергейСеменов-г7д 5 жыл бұрын
В целом, с автором согласен. HAL нормальная абстракция. Позволяет сосредоточится на алгоритмах, не тратя время на ковыряние в документации. Хотя я и на CMSIS голом писал, и на SPL и, возможно, это дает мне уверенность в том, что если уж реально нужно будет опустится до ковыряния регистров, я смогу это сделать. Новечка, конечно же, HAL расслабит очень серьезно. В общем, HAL рулит, но не всегда. Зависит от задачи. Сам недавно портировал библиотеку, написанную на SPL под хал. Не скажу что это заняло много времни. Как правило, что бы сделать первый рабочий старт библиотеки надо переписать низкоуровневые функции (дергание ногами контроллера, запись/чтение данных по интерфейсам и т.п.). До конца пока не досмотрел, но напишу, пока не забыл. Тут есть баг в либе (на сегодняшнее число он есть, может в будущем исправят). Если по SPI передавать больше одного байта, то контроллер сваливается в хардфаулт. Это именно на 030 контроллере. Тот же код на 103 работает идеально (где я передаю нужное мне количество байт фунецией SPI Transmit). Потому, если надо передать, на 030 контроллере больше одного байта, нужно сделать это по байте в for цикле.
@ВладимирВасильев-с1е
@ВладимирВасильев-с1е 5 жыл бұрын
Поддерживаю автора. Необходимо внедрять в разработку программ современных библиотек и генераторов кода для сокращения сроков разработки.
@ukrfoil
@ukrfoil 4 жыл бұрын
Экран маленький . все таки экраны 3.5" TFT 9486 больше и разрешение лучше и помещается больше системной информации, а стоят также .. работаю. с ними по шине I2C .. (связке c mcp23018 (17))
@danilgaijin8366
@danilgaijin8366 5 жыл бұрын
По поводу организации кода, многие знают, но было бы здорово показать выбор рабочей секции кода с помощью препроцессора #IFDEF. Пример естественно у вас демонстративный, но было бы намного приятнее видеть такое) По поводу HAL, его преимущество в скорости разработки небольших проектах, что вы и продемонстрировали. Когда проект разрастается там уже чёрт ногу сломит. Хотя честно, эта простота определённо приятна.
@miptkol
@miptkol 3 жыл бұрын
Как насчет того, чтобы вместо вырезания кода вручную включать -O3 в компилляторе? Он сделает примерно то-же (местами меньше, местами больше), но это не будет ручное вырезание кусков кода.
@ArthurIslamRU
@ArthurIslamRU 5 жыл бұрын
*Спасибо большое*
@awwsum
@awwsum 5 жыл бұрын
структура батончика
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Большие кнопки - батоны.
@andrewdronsson9028
@andrewdronsson9028 5 жыл бұрын
Тогда надо края кнопок закруглять под батон.
@maksympavlenko5305
@maksympavlenko5305 3 жыл бұрын
Не знаете есть ли библиотека для st7735 , в которой есть функция построения графиков? Или нужно самому создавать из функций типа зарисовать пиксель, построить линию от точки к точке?
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
Ну это же 10 строк кода... Чего там делать этот график.
@maksympavlenko5305
@maksympavlenko5305 3 жыл бұрын
@@VladimirMedintsev у меня Y значения колеблются в диапазоне от 0 до 100000 (ЭКГ данные). Ко мне туго доходит, чтобы сообразить как масштабировать этот график и держать его в рамках дисплея
@VladimirMedintsev
@VladimirMedintsev 3 жыл бұрын
@@maksympavlenko5305 Скользящее среднее для вычисления среднего уровня сигнала. Из этого вычисляем масштаб. Соответственно исходные данные масштабируем и отображаем. Ничего сложного в этом нету.
@maksympavlenko5305
@maksympavlenko5305 3 жыл бұрын
@@VladimirMedintsev спасибо большое. Буду продолжать париться. 😅 для вас легко конечно, а я только с Ардуины выбежал и то только лизнул слегка. Хотя тут больше даже не это играет роль. Такое наверное просто сообразить нужно, а на каком языке писать уже все равно. Спасибо за быстрый ответ
@ИнженерыИнформ
@ИнженерыИнформ Жыл бұрын
Меня что удивило, не оказалось ни одного полного примера использования платы аналоговых входов на микросхеме ADS1256 под STM32. Есть примеры под ардуино, а под стм нет.
@Frutktt
@Frutktt 4 жыл бұрын
Почему производитель чипов ST7735 делает чехарду с именами выводов? Интерфейс SPI, а названы как I2C. Я имею в виду SDA и SCL. Когда хотел подключить экран к ардуине чуть с ума не сошёл, это нигде не указано.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Это общемировая проблема которая уже не первый год приводит к различным казусам и проблемам. Каждый именует ноги интерфейсов как хочет. CLK - SPC, SDO, SDI и прочие и прочие. Приходится каждый раз очень внимательно читать datasheet
@sergeyrink3003
@sergeyrink3003 4 жыл бұрын
А не пробовали OLED отключать чтобы не выгорал. И включать только при необходимости, при открытии щитка или в аварийном режиме оповещения.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Пробовали. Не помогает.
@ruslankalchev4721
@ruslankalchev4721 Жыл бұрын
Здравствуйте. А почему вы про LL не упоминаете, ведь там тоже кое-что есть и она отягощает код лишними проверками!? Я в некоторых проектах использую и HAL, и LL одновременно.
@arzamas1988
@arzamas1988 4 жыл бұрын
Тоже постоянно заимствую либы на гитхабе. Нет времени разбираться со всем и писать свою либу. Аналогично перекапывал код, адаптировал под HAL.
@igorgoblin1123
@igorgoblin1123 5 жыл бұрын
Ага, круто! HAL это клёво дя бвстрой разработки и проверки. Дальше писать ручками без библиотек или хотя бы минимум cmsis. Могу утверждать со 100% уверенностью на примере ST7789 и дисплея 240х240- без HAL работает в 4 раза быстрее. А использовать или нет библиотеку решать конечно вам. Видео даже писал заливки экрана одним цветом с использованием HAL и без
@kardanium
@kardanium 5 жыл бұрын
Я когда делал цифровую обработку звука на STM32F407, я сначала тоже слепил все на HAL в Кубе, чтобы тупо прогнать звук с одного интерфейса I2S в другой с целью проверки правильности сборки соплей на макетке. И как только я удостоверился, что все ОК, выкинул этот проект и начал уже чистый, где все настраивал на регистрах. Ибо нужен был каждый такт, так как цифровых фильтров нужно целую кучу. В ход пошли даже специальные DSP инструкции этого камня и некоторые банальные вещи, как перестановка двух полуслов местами в 32-битном слове - пришлось лепить ассемблером, ибо есть инструкции, которые сделают это за такт. А компилятор упорно не хотел их применять. Даже тактирование настраивал вручную, так как мне нужно было корректно реагировать на отвалы кварца (сначала дергать линию аварийного останова, потом уже все остальное), ибо это не просто обработчик звука, а целый усилитель на полкиловатта, класса D.
@pistoletov1974
@pistoletov1974 4 жыл бұрын
Графические библиотеки быстрые там где framebuffer используется. Правда не знаю есть ли такая для этого дисплейчика. Хотелось бы такую
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Напишите, делов на вечер. Тем более на карантине....
@alexanderurezchenko6446
@alexanderurezchenko6446 5 жыл бұрын
Владимир, а сколько примерно памяти у Вас занял сей проект на F030? На сколько с Вашей точки зрения можно использовать данный МК для решения "боевых" задач? Или все же это больше устройство для тестов?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Я вечером замерю и отвечу подробнее по размеру кода. Но что касается самого МК это вполне себе устройство. Я его использовал в датчике пульсоксиметра и вполне доволен. На нем был ввод-вывод данных, фильтрация сигнала и автоподстройка. Так что вполне себе рабочий контроллер.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Program Size: Code=6600 RO-data=3056 RW-data=8 ZI-data=1192 Собственно у вас доступно 16 килобайт flash памяти а занято 6,6 нет повода для какого-либо беспокойства. Тем более, что этот MCU он же не создан для работы с экраном. У него свои задачи и он им вполне соответствует. Но даже при таком использовании вполне себе такой рабочий малыш.
@80cahek
@80cahek 5 жыл бұрын
У меня влезло управление усилителем с экраном 16×2, флеш памятью внешней для хранения настроек, фм на rda5807 с rds. И я не сильно парился с экономией памяти.
@toshibamaster2210
@toshibamaster2210 2 ай бұрын
подскажите какое напряжение на подсветку , CS можно на землю а reset на + ? spi на какой скорости ?
@VladimirMedintsev
@VladimirMedintsev 2 ай бұрын
@@toshibamaster2210 3,3 вольта. Можно
@smartrobot9383
@smartrobot9383 4 жыл бұрын
Здравствуйте! С днем радио и связи! подскажите, как добавить библиотеку в проект?
@Insideus2786
@Insideus2786 5 жыл бұрын
Спасибо за интересное видео! Интересно было бы узнать, какие средства разработки GUI вы используете в своих рабочих проектах? К сожалению, те стандартные библиотечные функции отрисовки списков, кнопок и прогресс баров, которые показаны в данной видео, подходят больше для обучающих целей, ибо выглядят очень уж по колхозному.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Нет ну для эстетов есть TouchGFX. ST даже недавно вэбинар по ней проводили. А вообще если часик позаниматься и показанное в видео можно модифицировать. Иными словами ничего заслуживающего внимания я не использую.
@ПетрГуберт
@ПетрГуберт 5 жыл бұрын
Владимир, добрый день! Не сталкивались с такой проблемой? Подключаю экран на таком же контроллере к китайской плате с f407zgt. Если подключить к spi1, то текст и изображения искажаются, если к spi2, то все в порядке. Все бы ничего, но у spi1 скорость в 2 раза выше.
@aemarkov
@aemarkov 4 жыл бұрын
Вы расписали не преимущества библиотеки 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 приводят к появлению ардуин, которые подводят все МК к общему знаменателю, самому хилому. Ведь в разных МК есть разные заморочки, позволяющие решить ту или иную задачу чуть эффективнее.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Вот тут я специально делал обзор библиотек - kzbin.info/www/bejne/q4WVf6imnqh-ma8 И да, обратные вызовы это просто сказочное решение если их правильно использовать.
@aemarkov
@aemarkov 4 жыл бұрын
@@VladimirMedintsev Благодарю, видимо, я не очень разобрался, надо будет лучше покурить их документацию.
@alexroman6246
@alexroman6246 5 жыл бұрын
hal это как java-ценою скорости можно запускать на разных устройствах. для каждой задачи надо иметь подходящий мк.
@alexglushenko6754
@alexglushenko6754 5 жыл бұрын
Добрый день. Почему не используете dma?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
DMA подразумевает обмен данными между памятью и периферией. Чтобы сделать видео-память для этого экрана потребуется 40 килобайт. Короче смысла нету.
@sergeyterentiev4720
@sergeyterentiev4720 5 жыл бұрын
@@VladimirMedintsev Имеет смысл использовать для заливки экрана одним цветом или заливки каких-то областей. Памяти, как вы понимаете, для этого не надо, т.к. шлется одно и тоже значение.
@liftoman_777
@liftoman_777 Жыл бұрын
Не подскажите, а Вы победили зависание МК при обрыве (подыхании) OLED экрана? Спасибо!
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
У меня не бывает зависаний МК
@olegk2005
@olegk2005 Жыл бұрын
Вписываете в конце кода вочдог и он будет перегружать контроллер при зависании.
@denial3874
@denial3874 3 жыл бұрын
Пусть те кто рассказывают что HAL плохой пусть хоть один урок снимут про свою любимую библиотеку
@isakneuman9995
@isakneuman9995 2 жыл бұрын
им не до этого. они обычно работают и получают реальные заказы за реальные деньги
@denial3874
@denial3874 2 жыл бұрын
@@isakneuman9995 А на хейтинг время есть
@isakneuman9995
@isakneuman9995 2 жыл бұрын
@@denial3874 обычно кто хейтит это начинающие и те кто не далеко ушли. Я учусь у реальных разработчиков. Все юзают цмсис и свои локальные либры которых сами писали. Хал у них чисто на подхвате когда бухают и спорят друг с другом чтоб быстро посмотреть.
@isakneuman9995
@isakneuman9995 2 жыл бұрын
@@denial3874 просто понимаешь то на чем халловцы боятся для настоящих разработчиков ничего. Они всю эту инициализацию с закрытыми глазами как только проект открывают печатают. А для халловцев это что то сверх сильное. Вот и сидят как макаки зависимые
@isakneuman9995
@isakneuman9995 2 жыл бұрын
@@denial3874 "Добрый день. :) Оставьте этого товарища писать на своем Ардуино. :) А сами продолжайте изучать, как контроллер работает изнутри. :) Это особенно актуально сейчас, когда начались проблемы с поставками. Любители Cube прочно подсажены на STM32, такой код сложно портировать на другой контроллер. Потому им остается платить ST столько, сколько они скажут, и ждать столько, сколько придется. С другой стороны, если человек разбирается в работе контроллера в принципе, и может писать код без всяких кубов, ему не составит труда разобраться с любой другой архитектурой и портировать решение под нее. Так что в некотором смысле да, работники ST не зря получают свою зарплату - существенное количество людей прочно подсажено на STM32 и не в состоянии слезть с этих контроллеров без большой головной боли. Для ST это, конечно, плюс. :)"
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
Спасибо за интересный материал. Я использовал функцию HAL по передаче по протоколу SPI, но на высокой скорости. Поэтому, прорисовка экрана была нормальной. Но теперь вижу, что и её можно существенно ускорить. Можно Вас попросить сделать видео о том, каким образом организовать чтение графического файла с cd-card с последующим выводом на экран без использования большого буфера (равного размеру области, которая будет окрашиваться). Т.е. алгоритм будет не таким: "Читаем данные в буфер" -> "Передаём данные из буфера на экран", а сразу с флешки на экран. В переписке Вы упомянули, что такое возможно. Заранее спасибо.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Чтобы вам долго не ждать с тем пока я видео сделаю и все такое, пока раскачаюсь... Тут совсем недавно было вот такое - kzbin.info/www/bejne/oJSYYX6Lr8-miKs и к видео даже код есть. Очень полезное видео хоть и рассказано мало, но есть за что зацепиться. И там как раз нечто похожее реализовано.
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
@@VladimirMedintsev Использовать внешнюю память в моём случае не получится. Учитывая, что у меня обновляется не весь экран, а отдельные области, буду под каждый тип иконок создавать буфер в виде массива. После передачи - освобождать память. В моём случае это приемлемо. Ну а если работать со всем экраном целиком и не просто заливая его одним цветом, а выводить полноценные картинки, не хватит места под такой буфер в памяти контроллера. Придётся частями отображать картинку. Я сейчас пытаюсь сделать информационный дисплей на приборную панель в своё авто. Пока залил всё в память контролера. Но места в нём катастрофически не хватает. Вот и хочу все изображения разместить на cd-card и выводить пофайлово на экран пиктограммы.
@aemarkov
@aemarkov 4 жыл бұрын
Внимание вопрос: насколько HAL распространен среди тех, кто занимается разработкой под STM32 на коммерческой основе? Какие там подходы?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
В России не сильно распространена. На западе достаточно широко используется. В силовой электронике НЕ используется нигде. Реальный плюс этой библиотеки уменьшение порога вхождения, крайняя простота освоения и использования. Легкость оптимизации.
@Веб-разработка-л3р
@Веб-разработка-л3р Жыл бұрын
@@VladimirMedintsev А почему HAL не используют в силовой электронике? Насколько я понмю, вы сделали электронную нагрузку, прошивка которой написана с использованием HAL.
@MrEksol
@MrEksol 4 ай бұрын
Силовая электроника не терпит ошибок в формировании сигналов. Чем выше уровень языка, тем менее точнее отрабатываются задержки. И тем выше вероятность бабаха. ​@@Веб-разработка-л3р
@ibrag2012
@ibrag2012 5 жыл бұрын
Зробив теж саме але конфігуратор видав 24Мб/с.
@edmelectronics4110
@edmelectronics4110 Жыл бұрын
Ссылка на библиотека не работает. Откуда можно взять?
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
Не работает. Автор ее удалил.
@raal8438
@raal8438 Жыл бұрын
​@@VladimirMedintsev тогда свой файл выложи! ученик твой просит! или ты много много деньгов хатишь низашто! )))
@VladimirMedintsev
@VladimirMedintsev Жыл бұрын
@@raal8438 Продолжишь хамить - заблокирую.
@MTechnologies68
@MTechnologies68 Жыл бұрын
​@@raal8438?! Ты идиот? Человек вообще про деньги молчит, нахрен писать дичь?
@toshibamaster2210
@toshibamaster2210 4 жыл бұрын
беру халовское и метотом тыка удаляю лишнее пока работоспособность остается)) void lcd_write8 ( char dat) { SPI1_DR_8bit = dat; while(SPI1->SR & SPI_SR_BSY); } void lcd_write(uint16_t dat) { SPI1_DR_8bit = dat>>8; while(SPI1->SR & SPI_SR_BSY){}; SPI1_DR_8bit = dat; while(SPI1->SR & SPI_SR_BSY){}; }
@aleksandrdemidov6058
@aleksandrdemidov6058 5 жыл бұрын
подойдет ли микросхема f030 для задачи: реализация двух интерфейсов 1-wire и i2c, логика простая, прочитать данные с i2c и передать по 1-wire и наоборот, 1-wire в режиме slave ?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Ну разумеется подойдет.
@CanchezAK
@CanchezAK 3 жыл бұрын
Блин, нигде не могу найти информацию по работе с этим дисплеем в параллельном режиме, в даташите нашел информацию о передаче цвета на каждый пиксель, ок, RGB565 16-bit понятно, но даже там нашелся вопрос на тему: А какой стартовый адрес пикселей-то? Проще говоря, с какого угла считать? Автор, можешь сделать видео по работе с этим дисплеем в параллельном режиме (или с похожим, но на том же контроллере)?
@alexaleynikov8978
@alexaleynikov8978 4 жыл бұрын
Добрый день, ссылка на библиотеку не работает. Есть возможность выложить ее?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Видать автор библиотеки хостинг не продлил...
@alexey-art-studio
@alexey-art-studio 4 жыл бұрын
@@VladimirMedintsev а у вас копия не сохранилась?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
@@alexey-art-studio Так себе идея чужие библиотеки раздавать. yadi.sk/d/Le-NLpX8Ri42JQ
@alexey-art-studio
@alexey-art-studio 4 жыл бұрын
если не трудно закиньте демо проект куда нибудь...
@Avrora707
@Avrora707 2 жыл бұрын
Из опытов знаю что М0 спокойно раскручивается до 72 МГц и продолжает работать без глюков. Хотя маленько греется. А если вообще без стыда и совести, то до 94 Мгц его разгонял. Но там уже подвисания начинаются. Но это явно не для любителей строго даташитного включения)
@alexanderurezchenko6446
@alexanderurezchenko6446 2 жыл бұрын
К сожалению, ссылка с кдом библиотеки не работает...
@ЭльМеф
@ЭльМеф 6 ай бұрын
А где можно найти библиотеку на st7735? И можно ли с HAL на cmsis переписать?
@VladimirMedintsev
@VladimirMedintsev 6 ай бұрын
Библиотеку о которой я рассказывал автор удалил. Но подобных очень много. Переписать можно
@ЭльМеф
@ЭльМеф 6 ай бұрын
@@VladimirMedintsev Ну дайте хоть ссылку.Ещё один вопрос st7735 и iii9341 библиотеки похожи или нужно другую библиотеку?
@VladimirMedintsev
@VladimirMedintsev 6 ай бұрын
@user-nj4vm4sh2l нужно другую библиотеку
@ivanrusev2270
@ivanrusev2270 5 ай бұрын
@@VladimirMedintsev А как можно кирилицу выаодить.?
@VladimirMedintsev
@VladimirMedintsev 5 ай бұрын
@ivanrusev2270 Подключить кирилический шрифт и выводить. Ну уж это вообще не проблема. Есть куча генераторов шрифта.
@gintarasbaranauskas2035
@gintarasbaranauskas2035 5 жыл бұрын
Для управления GPIO ножек лучше использовать библиотеку LL а не HAL. Она работает гораздо быстрее и генерирует более компактный код.
@vladimirvt3930
@vladimirvt3930 4 жыл бұрын
Ссылка "Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2..." не рабочая!
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Да, ссылка не рабочая. Этот контент больше не существует на сайте автора. Я ничего с этим поделать не могу.
@ivank.r.8945
@ivank.r.8945 5 жыл бұрын
Что в библиотеке SPI? Вы подключили вручную библиотеку SPI.h, а что в ней находится? у меня почти один в один, как у вас, но при этом ругается на HAL_SPI_Transmit( &hspi1, &data, 0x01, 10); Программа не понимает, откуда растут ноги у этой структуры( или функция) hspi1, пишет, что не декларирована, но если нажать go to definition он находит эту строчку там в мейне.Вопрос, как исправить эту ситуацию?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Все зависит от того, как у вас сгенерирован проект в кубе. Если вы включили расширенные настройки то у вас вся инициализация SPI находится в отдельном файле. И соответственно объявлять надо его. Если стандартные то в main.c и тогда надо в библиотеку прописать main.h Это показывает что у вас проблемы не с микроконтроллером а с пониманием языка C.
@ivank.r.8945
@ivank.r.8945 5 жыл бұрын
@@VladimirMedintsev Инициализация идет в мейне (static void MX_SPI1_Init(void)), подключил библиотеки в файле st7735 #include "main.h" #include "st7735.h" #include "stm32f0xx_hal_spi.h"
@ivank.r.8945
@ivank.r.8945 5 жыл бұрын
Даже добавление чисто библиотеки устройства не дает эффекта(оно и не может, я просто в отчаянии)
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
@@ivank.r.8945 Вы можете показать какую ошибку дает компилятор?
@ivank.r.8945
@ivank.r.8945 5 жыл бұрын
@@VladimirMedintsev она пишет, что функция hspi1 не определена, undefined
@samatsamatov5565
@samatsamatov5565 5 жыл бұрын
И всё же, было бы очень хорошо выложить свои исходники. В целях обучения, конечно.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Все достаточно просто. Я не против чем-то делиться с коллегами по цеху если это можно так назвать. Буквально пару недель назад и я у одного из подписчиков просил библиотеку т.к. сам застопорился в разработке. И взглянув на написанное у него удивился насколько все было просто. В данном случае я дал ссылку на библиотеку. Пользуйтесь пожалуйста. А вот подход ардуино-франкенштейнов когда проект лепится из убогого кода бездумно скомпилированных мыслей других людей я не поддерживаю.
@СтасСомов-н4ъ
@СтасСомов-н4ъ 4 жыл бұрын
Здрасьте, что за зверь процессор f303 ?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
STM32F303
@AndreyChigisheff
@AndreyChigisheff 5 жыл бұрын
Приятель подарил несколько дисплеев от телефонов. К сожалению гугл и яндекс не помогли их опознать. Нет какой нибудь тайной нычки?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Мне такая неизвестна, может кто из общественности подскажет.
@МихаилАаа-д3ю
@МихаилАаа-д3ю 5 жыл бұрын
Есть русскоязычный ресурс, в котором тусуются любители подключения неизвестных дисплеев к микропроцессорам. В основном они там Ардуину мучают. К сожалению, адрес не сохранился.
@ugene4063
@ugene4063 5 жыл бұрын
Hal хороша для жирных чипов. Но сие не всегда возможно ессно по соображениям финансовым🙂
@alexorlovecky8015
@alexorlovecky8015 4 жыл бұрын
Никогда не понимал, почему все доступные библиотеки всяких дисплейчиков сделанны на прерываниях и ногодрыгах… Прям заговор какой то. Ведь есть же ДМА... Всегда беру только логику инициализации и настройки (бо лень разбирать все регистры в мануале дисплея) и переписываю под ДМА. Да, с ДМА удобно работать с буффером всего экрана, что не возможно на младших линейках МК. Но выдумал велосипед, который динамически выделят буфер, конкретно нужного участка. При этом вся работа осуществляется по средством "контроллера задач". То бишь есть массив абстрактных задач(текс, всякие кнопки, геометрические фигуры). Каждая задача, это структурка с общими атрибутами. В этот массив добавляем/изменяем/удаляем задачу. Вуаля! У нас не тратится ресурс ядра, нам не нужен целый буффер дисплея. Работает всё в разы быстрее, и не нужно обновлять весь экран (что так же визуально выглядит в разы приятней)Кстате, автору. Чисто для себя, сравните выигрыш после Вашей оптимизацией, и с стандартной функцией хала с включённой оптимизацией "фаст" во вкладке компилятора.. Разница если и будет, то сильно не значительна. Сильно вумные сегодня компиляторы, после которых в ассемблер вообще лезть не хочится.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Сложность тут у всех одна. По какой-то причине ни у кого нет времени ждать и делать вдумчивое программирование как для себя. Вот взять хоть последний год. Заказчиков, кто готов был бы делать проект хоть 2 месяца можно пересчитать по пальцам. В основной массе все прибегают как кипятком облитые. 3 недели и проект должен быть готов. Это жуть какая-то. Разумеется при таком цейтноте ни о каком вдумчивом программировании и DMA вообще не идет речи. Тут только ногодрыг в самом худшем его проявлении и с дикими лагами. И заказчика я тоже в большинстве случаев могу понять. Ему эту плату вставить в изделие у которого сроки горят и вперед... При этом ладно бы использовались одни и те же экраны. Нет, как на подбор все разные у одного любовь к "жутким чернилам", другому OLED подавай, третий где-то прочитал что все это ерунда и хочет кучу светодиодиков и не думать о выгорании экрана. Так что если это не долговременный проект, а текучка, работы с DMA и хорошего программирования не ждите.
@bigga951
@bigga951 5 жыл бұрын
Спасибо, доходчиво, понял. А вот если мне придется подцепить 3 дисплея сразу? Это для C вообще реализуемо? Или только ООП и С++?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Пожалуйста, нужно 3 дисплея подключайте 3 дисплея. С точки зрения контроллера ему нет разницы сколько дисплеев в вашей конструкции. А вопроса про то, реализуемо ли это на языке С или надо использовать ООП я честно говоря не понял. А что-то есть реализуемое на С++ чего нельзя реализовать на С?
@bigga951
@bigga951 5 жыл бұрын
@@VladimirMedintsev проинициализировать дисплей 3 раза, каждый со своим CS, на С++ я это могу представить более-менее четко. Как это реализовать на C, пока не догоняю
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
@@bigga951 Есть простой способ, изменить функции (из библиотеки работы с дисплеем) таким образом чтобы им в параметрах передавался еще и номер дисплея. Соответственно пусть они этот номер протягивают до самого нижнего уровня - до общения по SPI интерфейсу и там дергают за ногу соответствующий CS-pin. Таким образом все будет прекрасно работать. Ну и надо не забывать, что в любой момент вы можете классический "C" обернуть в обьект и перейти на C++ если вам так удобнее. И среда программирования и структура всех библиотек это позволяет. Другой дело что это редко делают потому что в этом нет потребностей. Но весь инструментарий позволяет перейти на плюсы без каких-либо проблем.
@bigga951
@bigga951 5 жыл бұрын
@@VladimirMedintsev Точно! CS будет 3 штуки, и уже в параметрах отрисовки появится еще одна переменная=))). Спасибо=). Не знаю, что и делал бы без Ваших видео. Про CAN очень хорошо зашло, за вечер вдумчивого просмотра БК набросал-завел, с блэк-джеком и часиками=).
@Alexander_Gurov_RF
@Alexander_Gurov_RF 5 жыл бұрын
Ге всегда hal - это хорошо. Просто в данном примере всё слишком топорно сделано. А так то, если по нормальному делать, можно было разбить на абстракции, и потом легко переносить. Хоть на тот же hal.
@electronicelectronic-wo3yk
@electronicelectronic-wo3yk 4 жыл бұрын
Здравствуйте! Ссылка не работает Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2...
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Да, ссылка не работает. Причина автор библиотеки не продлил хостинг. Если прочитаете комментарии под роликом то обнаружите альтернативную ссылку.
@yroslavivanov8586
@yroslavivanov8586 4 жыл бұрын
Библиотеку скачать невозможно (((
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Да, невозможно, ее автор удалил свой сайт. А вот если посмотрите в комментариях, то наверняка найдете нормальную ссылку.
@MrEksol
@MrEksol 4 ай бұрын
Полезный ролик но ркн не дает посмотреть
@VladimirMedintsev
@VladimirMedintsev 4 ай бұрын
@@MrEksol РКН тут точно не при чем. Все претензии в Google отправляйте.
@dmitriyterkhov8571
@dmitriyterkhov8571 2 ай бұрын
​@@VladimirMedintsevпрошёл месяц и после того как РКН признал что замедлил ютуб, Вы по прежнему считаете что это гугл виноват?
@VladimirMedintsev
@VladimirMedintsev 2 ай бұрын
@dmitriyterkhov8571 Да, я действительно считаю что в этом виновата корпорация Google. Она не выполняла требования российского законодательства.
@CoBaldr
@CoBaldr 5 жыл бұрын
модно? кек, а я тут по своей глупости думал что модно это ардуина, как же я ошибался)
@LexxS79
@LexxS79 3 жыл бұрын
Ни хера не понял. Тёмный лес для меня.
@ArtemKAD1
@ArtemKAD1 3 жыл бұрын
Проблема этой библиотеки лишь в том, что автор не вынес в одно место название битов и портов. HAL там ничего другого не сделал.
@slime924
@slime924 5 жыл бұрын
а где код либы на HAL?)
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Он показан в видео.
@EnemyState-i3u
@EnemyState-i3u 5 жыл бұрын
Красиво но ... фигня эти дисплеи. стоят как чугунный мост а памяти откусывают на реализацию глядения на них ойойой. как правило обработчик целевых задач занимает полкопейки а задачи отражения настроек девайса на рубль. пробовал такой девайс применить.. вот - kzbin.info/www/bejne/m4GbfKKpfNSUetU . Все дисплеи у нас уже как правило есть. то смартфон. достаточно написать сервер и через esp32 не только по wifi но и удаленно можно наблюдать и управлять. Тем более с китая чета посылки перестают приходить и особенно дисплеи.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Ну давайте по пунктам: 1. Стоит такой дисплей без платы 116 рублей на сегодняшний день. Это хорошая цена. 2. Памяти практически не откусывают если не делать видео-буфер. 3. В промышленной электронике типа контроллеров для оперативного управления использовать Wi-Fi недопустимо. Стандартами прописано ручное управление и отображение информации на приборе. 4. С посылками из Китая все хорошо. В моей немалой истории только одна пропала и то был косяк локальной почты.
@generalleitenant42
@generalleitenant42 4 жыл бұрын
Здраствуйте скиньте пожалуйста полностью исходный код с библиотеками на general.leitenant.42@mail.ru
@vadimerofeev1148
@vadimerofeev1148 4 жыл бұрын
HAL от STM это самая тупая и бесполезная библиотека. Для каждого периферийного модуля она хранит в ОЗУ копию всего регистрового контекста. Она хороша только для тех, кто пришел в STM32 из адурины. Они так и носят с собой костыли.
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
И именно по этой причине данная библиотека так активно развивается производителем и тысячи разработчиков зарубежом ее используют? Ну вы прям молодец. Все дураки, а вы Дартаньян. Так получается?
@МиколаМельничук-в4п
@МиколаМельничук-в4п 4 жыл бұрын
программирование на регистрах рано или поздно уйдёт в прошлое и мы о нём забудем как о страшном сне. Наведу вам такой себе примерчик... Имеем STM32H7 контроллер, к которому подключен 7" - дисплей по LTDC. Также к контроллеру подрублена оперативка (MT48LC32M16). Всё это дело коннектится в сеть (LAN8742 + LWIP) Я даже боюсь себе представить как без HAL-a и куба нужно будет натр***тся с регистрами что бы это всё завести
@dazzershell
@dazzershell 3 жыл бұрын
@@МиколаМельничук-в4п ХАЛ хорош тем, что он дополняет иногда коряво сделанное описание к периферии контроллеров, открывает тайны его особенностей и глюков. На старые МК были такие code-snippets, по сути шпаргалки под типовые задачи. Отличная вещь, жаль сейчас их не выкладывают. Настройка таймера занимала 5 строчек, с комментариями она давала больше ясности, чем казенные пространные мануалы и аппноуты от индусов из СТ.
@xbevice
@xbevice 5 жыл бұрын
Hal это плохо. Косяки есть на уровне архитектуры
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
О какая фраза потрясающая. Пример косяка привести сможете?
@avi-crakhome2524
@avi-crakhome2524 5 жыл бұрын
@@VladimirMedintsev Всё в одном файле, переносимость нулевая. Железный уровень(spi и всё что с ним связано), аппаратно зависимый уровень(инициализация регистров дисплея), программно-зависимый уровень (функции рисования графики). Управление графикой у вас отдельно, но пробивает до самого дна. Пример отсутствия ошибок - файлы шрифтов. Наверное от того что сами по себе большие. Желательно ограничить их видимость только для функций рисования.
@xbevice
@xbevice 5 жыл бұрын
Vladimir Medintsev да легко, все прерывания обрабатываются единым обработчиком хала, который плевать хотел на приоритеты, и смотрит только флаги, в порядке заданном программистами хала.
@XpIOHdeJIb3000
@XpIOHdeJIb3000 2 жыл бұрын
ахренеть насколько кривущая библиотека, стыдно должно быть такое показывать.
@mnemo2637
@mnemo2637 Жыл бұрын
Для кого это?
LCD1602 - это очень просто!
22:19
Гневисть
Рет қаралды 148 М.
Thank you Santa
00:13
Nadir Show
Рет қаралды 59 МЛН
Изучаю STM32!
20:26
Лёша Кластер
Рет қаралды 197 М.
Фишки Arduino, о которых ты не знал!
13:37
Заметки Ардуинщика
Рет қаралды 117 М.