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

Ғылым және технология

Рассказывается о дисплейном модуле 1,8" на контроллере ST7735s в связке с процессором STM32F030. Для подключения дисплейного модуля была использована плата из видео - p_6GG6TQygo и • Video и • Video
Канал в телеграмм - t.me/vladimir_medintsev
Канал Яндекс.Дзен - zen.yandex.ru/vladimir_medintsev
Канал на RuTube - rutube.ru/channel/1797552/
Канал на KZread - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------
Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2...
Видео про дисплей Nokia • STM32 + Nokia1202 Разр... и • STM32 + Nokia1202 Разр...

Пікірлер: 157

  • @kardanium
    @kardanium4 жыл бұрын

    А еще скорость можно поднять, если оптимизировать работу графической библиотеки в сторону сокращения количества транзакций по SPI, задействовать DMA и функции оконного заполнения в контроллере дисплея. То есть, сначала рисуем кусок графического примитива в некоторый буфер в ОЗУ, за тем одной транзакцией задаем окно заполнения и второй транзакцией сливаем буфер в это окно. Если примитив огромный, то можно рисовать его по частям. Это все равно будет быстрее, чем слать координаты каждого пикселя, а потом его цвет. Так и ядро камня будет меньше загружено, так как передачей данных занимается DMA, и картинка будет быстрее рисоваться на дисплее, так как координаты задаются только один раз, когда задается окно и потом уже непрерывно сливается блок цветов пикселей. В качестве примера возьмем функцию вывода текста: Выделяем буфер, размером в одно знакоместо (под один символ). Формируем в нем растр символа. Отсылаем дисплею команды формирования окна: Начальные координаты, конечные координаты, направление заполнения. Заливаем содержимое буфера в дисплей в режиме данных. Выполняем что-нибудь другое, пока DMA шлет буфер в дисплей. Например, готовим второй буфер, если ОЗУ хватит. Символ напечатан, приступаем к следующему. На видео видно, что листбокс перерисовывается полностью, когда перемещается курсор выбора. В качестве ввода у нас только кнопки, потому мы не можем прыгнуть через элемент, а только с текущего на соседний. Вот и перерисовать можно только их. Сначала перересовываем текущий, а потом тот, на который переходим. Все это можно рисовать оконным заполнением и с использованием DMA. А если библиотека переносится на камень, который не имеет DMA, то его можно заменить на прерывание от SPI. Производительность не сильно пострадает. А еще можно поделить экран на условные квадраты и перед отрисовкой сначала читать содержимое нужного окна, производить модификацию и за тем отправлять обратно. Сие сократит скорость обновления картинки, однако если использовать DMA, то разгрузит процессор. Ну а плюс в модификации - можно рисовать более красивый интерфейс, с полупрозрачными элементами. Да и скорость можно поднять, если модифицировать только те зоны (квадраты), которые подвергаются изменениям.

  • @alexroman6246

    @alexroman6246

    4 жыл бұрын

    да, только вот зачастую целевые контроллеры не имеют достаточно оперативки чтобы хранить видеобуффер. Я по крайней мере с этим столкнулся. И тут выход либо оперативку внешнюю ставить, либо рисовать медленно(насколько возможно быстро со всеми оптимизациями).

  • @diverom6046

    @diverom6046

    4 жыл бұрын

    @@alexroman6246 Не обязательно буффер должен быть чтобы закрасить весь дисплей. Достаточно накапливать 1/10 часть и выводить. За 10 раз можно заполнить весь экран. Это намного быстрее чем обычным способом. На разрешении 320х240 я получал 15 FPS по SPI при однотонной заливке. А на дисплее что в видео будет намного больше.

  • @alekseyzaretskiy5757
    @alekseyzaretskiy57574 жыл бұрын

    Ваши видео вдохновляют. Спасибо!

  • @user-qe2ii8hv8k
    @user-qe2ii8hv8k3 жыл бұрын

    Библиотека более не доступна ф. не могли бы вы выложить файл новой 030 и старой 103 биб-ки! за ранее СПАСИБО!

  • @kogram
    @kogram5 жыл бұрын

    Хорошее видео, спасибо!

  • @ArthurIslamRU
    @ArthurIslamRU5 жыл бұрын

    *Спасибо большое*

  • @zona2451
    @zona24514 ай бұрын

    Большое вам спасибо. Мне как начинающему очень пригодится.

  • @oleholeynikov8659
    @oleholeynikov86594 жыл бұрын

    каждый раз, когда смотрю ваши видео, ловлю себя на мысли, что вы сэкономили мне часы времени!!! спасибо!!!

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    А и вам спасибо на добром слове. И во вторник выйдет новое видео про дисплейчик.

  • @bul2012
    @bul20125 жыл бұрын

    Оооооо, а вот это вовремя, мне как раз месяц назад ст7735 и ст7789. Ща диплом сдам и примусь за работу с дисплейчиком.

  • @ShelbyCobraGH

    @ShelbyCobraGH

    5 жыл бұрын

    Поздравляю со сдачей. Тоже только сегодня отстрелялся) железа дома - хоть свой магазин открывай. Надо тоже садиться за проекты)

  • @user-gn6js6gy2n
    @user-gn6js6gy2n4 жыл бұрын

    Владимир, добрый день! Не сталкивались с такой проблемой? Подключаю экран на таком же контроллере к китайской плате с f407zgt. Если подключить к spi1, то текст и изображения искажаются, если к spi2, то все в порядке. Все бы ничего, но у spi1 скорость в 2 раза выше.

  • @miptkol
    @miptkol3 жыл бұрын

    Как насчет того, чтобы вместо вырезания кода вручную включать -O3 в компилляторе? Он сделает примерно то-же (местами меньше, местами больше), но это не будет ручное вырезание кусков кода.

  • @danilgaijin8366
    @danilgaijin83665 жыл бұрын

    По поводу организации кода, многие знают, но было бы здорово показать выбор рабочей секции кода с помощью препроцессора #IFDEF. Пример естественно у вас демонстративный, но было бы намного приятнее видеть такое) По поводу HAL, его преимущество в скорости разработки небольших проектах, что вы и продемонстрировали. Когда проект разрастается там уже чёрт ногу сломит. Хотя честно, эта простота определённо приятна.

  • @CanchezAK
    @CanchezAK3 жыл бұрын

    Блин, нигде не могу найти информацию по работе с этим дисплеем в параллельном режиме, в даташите нашел информацию о передаче цвета на каждый пиксель, ок, RGB565 16-bit понятно, но даже там нашелся вопрос на тему: А какой стартовый адрес пикселей-то? Проще говоря, с какого угла считать? Автор, можешь сделать видео по работе с этим дисплеем в параллельном режиме (или с похожим, но на том же контроллере)?

  • @smartrobot9383
    @smartrobot93834 жыл бұрын

    Здравствуйте! С днем радио и связи! подскажите, как добавить библиотеку в проект?

  • @Insideus2786
    @Insideus27865 жыл бұрын

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

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    Нет ну для эстетов есть TouchGFX. ST даже недавно вэбинар по ней проводили. А вообще если часик позаниматься и показанное в видео можно модифицировать. Иными словами ничего заслуживающего внимания я не использую.

  • @ruslankalchev4721
    @ruslankalchev47218 ай бұрын

    Здравствуйте. А почему вы про LL не упоминаете, ведь там тоже кое-что есть и она отягощает код лишними проверками!? Я в некоторых проектах использую и HAL, и LL одновременно.

  • @aleksandrdemidov6058
    @aleksandrdemidov60584 жыл бұрын

    подойдет ли микросхема f030 для задачи: реализация двух интерфейсов 1-wire и i2c, логика простая, прочитать данные с i2c и передать по 1-wire и наоборот, 1-wire в режиме slave ?

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Ну разумеется подойдет.

  • @pavelboboshkin3898
    @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 и пересылкой данных по этому каналу?

  • @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.

  • @avi-crakhome2524
    @avi-crakhome25245 жыл бұрын

    Есть очень старый анекдот про палача и острый топор: проговорённый - и это всё? палач - а ты кивни... Смена мк, подключение на другой spi или ногодрыг, смена экрана, смена алгоритма вывода графики для этого или иного дисплея... Всё это должно быть прозрачно. Автор библиотеки залез на нижний железный уровень, и на верхний символьный. В результате библиотека стала уникальной, и кстати осталась таковой даже после доработок. Дисплеев великое множество, и все они отличаются способом запуска и управления. То-есть по идее библиотека должна уметь работать через примитивы железного уровня, и поставлять на верх собственные примитивы - стандартные для экранов с внутренней памятью. К сожалению подобного коммунизма не существует в природе. По этому переписывать чужие библиотеки нужно под собственный стандарт, выкидывая из неё всё лишнее. Потом легче будет, особенно через пару месяцев - когда придётся вспоминать, как всё это работает.

  • @liftoman_777
    @liftoman_777 Жыл бұрын

    Не подскажите, а Вы победили зависание МК при обрыве (подыхании) OLED экрана? Спасибо!

  • @VladimirMedintsev

    @VladimirMedintsev

    Жыл бұрын

    У меня не бывает зависаний МК

  • @olegk2005

    @olegk2005

    Жыл бұрын

    Вписываете в конце кода вочдог и он будет перегружать контроллер при зависании.

  • @user-po1yn7li4c
    @user-po1yn7li4c Жыл бұрын

    Меня что удивило, не оказалось ни одного полного примера использования платы аналоговых входов на микросхеме ADS1256 под STM32. Есть примеры под ардуино, а под стм нет.

  • @Frutktt
    @Frutktt3 жыл бұрын

    Почему производитель чипов ST7735 делает чехарду с именами выводов? Интерфейс SPI, а названы как I2C. Я имею в виду SDA и SCL. Когда хотел подключить экран к ардуине чуть с ума не сошёл, это нигде не указано.

  • @VladimirMedintsev

    @VladimirMedintsev

    3 жыл бұрын

    Это общемировая проблема которая уже не первый год приводит к различным казусам и проблемам. Каждый именует ноги интерфейсов как хочет. CLK - SPC, SDO, SDI и прочие и прочие. Приходится каждый раз очень внимательно читать datasheet

  • @ukrfoil
    @ukrfoil4 жыл бұрын

    Экран маленький . все таки экраны 3.5" TFT 9486 больше и разрешение лучше и помещается больше системной информации, а стоят также .. работаю. с ними по шине I2C .. (связке c mcp23018 (17))

  • @user-oc7ky3sd6z
    @user-oc7ky3sd6z5 жыл бұрын

    Поддерживаю автора. Необходимо внедрять в разработку программ современных библиотек и генераторов кода для сокращения сроков разработки.

  • @user-fn6br6wd1m
    @user-fn6br6wd1m5 жыл бұрын

    В целом, с автором согласен. HAL нормальная абстракция. Позволяет сосредоточится на алгоритмах, не тратя время на ковыряние в документации. Хотя я и на CMSIS голом писал, и на SPL и, возможно, это дает мне уверенность в том, что если уж реально нужно будет опустится до ковыряния регистров, я смогу это сделать. Новечка, конечно же, HAL расслабит очень серьезно. В общем, HAL рулит, но не всегда. Зависит от задачи. Сам недавно портировал библиотеку, написанную на SPL под хал. Не скажу что это заняло много времни. Как правило, что бы сделать первый рабочий старт библиотеки надо переписать низкоуровневые функции (дергание ногами контроллера, запись/чтение данных по интерфейсам и т.п.). До конца пока не досмотрел, но напишу, пока не забыл. Тут есть баг в либе (на сегодняшнее число он есть, может в будущем исправят). Если по SPI передавать больше одного байта, то контроллер сваливается в хардфаулт. Это именно на 030 контроллере. Тот же код на 103 работает идеально (где я передаю нужное мне количество байт фунецией SPI Transmit). Потому, если надо передать, на 030 контроллере больше одного байта, нужно сделать это по байте в for цикле.

  • @awwsum
    @awwsum4 жыл бұрын

    структура батончика

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Большие кнопки - батоны.

  • @andrewdronsson9028

    @andrewdronsson9028

    4 жыл бұрын

    Тогда надо края кнопок закруглять под батон.

  • @alexanderurezchenko6446
    @alexanderurezchenko64462 жыл бұрын

    К сожалению, ссылка с кдом библиотеки не работает...

  • @alexanderurezchenko6446
    @alexanderurezchenko64465 жыл бұрын

    Владимир, а сколько примерно памяти у Вас занял сей проект на 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

    4 жыл бұрын

    У меня влезло управление усилителем с экраном 16×2, флеш памятью внешней для хранения настроек, фм на rda5807 с rds. И я не сильно парился с экономией памяти.

  • @maksympavlenko5305
    @maksympavlenko53053 жыл бұрын

    Не знаете есть ли библиотека для st7735 , в которой есть функция построения графиков? Или нужно самому создавать из функций типа зарисовать пиксель, построить линию от точки к точке?

  • @VladimirMedintsev

    @VladimirMedintsev

    3 жыл бұрын

    Ну это же 10 строк кода... Чего там делать этот график.

  • @maksympavlenko5305

    @maksympavlenko5305

    3 жыл бұрын

    @@VladimirMedintsev у меня Y значения колеблются в диапазоне от 0 до 100000 (ЭКГ данные). Ко мне туго доходит, чтобы сообразить как масштабировать этот график и держать его в рамках дисплея

  • @VladimirMedintsev

    @VladimirMedintsev

    3 жыл бұрын

    @@maksympavlenko5305 Скользящее среднее для вычисления среднего уровня сигнала. Из этого вычисляем масштаб. Соответственно исходные данные масштабируем и отображаем. Ничего сложного в этом нету.

  • @maksympavlenko5305

    @maksympavlenko5305

    3 жыл бұрын

    @@VladimirMedintsev спасибо большое. Буду продолжать париться. 😅 для вас легко конечно, а я только с Ардуины выбежал и то только лизнул слегка. Хотя тут больше даже не это играет роль. Такое наверное просто сообразить нужно, а на каком языке писать уже все равно. Спасибо за быстрый ответ

  • @ibrag2012
    @ibrag20124 жыл бұрын

    Зробив теж саме але конфігуратор видав 24Мб/с.

  • @pistoletov1974
    @pistoletov19744 жыл бұрын

    Графические библиотеки быстрые там где framebuffer используется. Правда не знаю есть ли такая для этого дисплейчика. Хотелось бы такую

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Напишите, делов на вечер. Тем более на карантине....

  • @Avrora707
    @Avrora7072 жыл бұрын

    Из опытов знаю что М0 спокойно раскручивается до 72 МГц и продолжает работать без глюков. Хотя маленько греется. А если вообще без стыда и совести, то до 94 Мгц его разгонял. Но там уже подвисания начинаются. Но это явно не для любителей строго даташитного включения)

  • @user-gh4tc2wo5k
    @user-gh4tc2wo5k4 жыл бұрын

    Спасибо за интересный материал. Я использовал функцию HAL по передаче по протоколу SPI, но на высокой скорости. Поэтому, прорисовка экрана была нормальной. Но теперь вижу, что и её можно существенно ускорить. Можно Вас попросить сделать видео о том, каким образом организовать чтение графического файла с cd-card с последующим выводом на экран без использования большого буфера (равного размеру области, которая будет окрашиваться). Т.е. алгоритм будет не таким: "Читаем данные в буфер" -> "Передаём данные из буфера на экран", а сразу с флешки на экран. В переписке Вы упомянули, что такое возможно. Заранее спасибо.

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Чтобы вам долго не ждать с тем пока я видео сделаю и все такое, пока раскачаюсь... Тут совсем недавно было вот такое - kzread.info/dash/bejne/nJdpkq2Oqs3Zgqw.html и к видео даже код есть. Очень полезное видео хоть и рассказано мало, но есть за что зацепиться. И там как раз нечто похожее реализовано.

  • @user-gh4tc2wo5k

    @user-gh4tc2wo5k

    4 жыл бұрын

    @@VladimirMedintsev Использовать внешнюю память в моём случае не получится. Учитывая, что у меня обновляется не весь экран, а отдельные области, буду под каждый тип иконок создавать буфер в виде массива. После передачи - освобождать память. В моём случае это приемлемо. Ну а если работать со всем экраном целиком и не просто заливая его одним цветом, а выводить полноценные картинки, не хватит места под такой буфер в памяти контроллера. Придётся частями отображать картинку. Я сейчас пытаюсь сделать информационный дисплей на приборную панель в своё авто. Пока залил всё в память контролера. Но места в нём катастрофически не хватает. Вот и хочу все изображения разместить на cd-card и выводить пофайлово на экран пиктограммы.

  • @sergeyrink3003
    @sergeyrink30034 жыл бұрын

    А не пробовали OLED отключать чтобы не выгорал. И включать только при необходимости, при открытии щитка или в аварийном режиме оповещения.

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Пробовали. Не помогает.

  • @user-jh3fw1ih5j
    @user-jh3fw1ih5j4 жыл бұрын

    Здрасьте, что за зверь процессор f303 ?

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    STM32F303

  • @alexglushenko6754
    @alexglushenko67545 жыл бұрын

    Добрый день. Почему не используете dma?

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    DMA подразумевает обмен данными между памятью и периферией. Чтобы сделать видео-память для этого экрана потребуется 40 килобайт. Короче смысла нету.

  • @sergeyterentiev4720

    @sergeyterentiev4720

    5 жыл бұрын

    @@VladimirMedintsev Имеет смысл использовать для заливки экрана одним цветом или заливки каких-то областей. Памяти, как вы понимаете, для этого не надо, т.к. шлется одно и тоже значение.

  • @ivank.r.8945
    @ivank.r.89454 жыл бұрын

    Что в библиотеке SPI? Вы подключили вручную библиотеку SPI.h, а что в ней находится? у меня почти один в один, как у вас, но при этом ругается на HAL_SPI_Transmit( &hspi1, &data, 0x01, 10); Программа не понимает, откуда растут ноги у этой структуры( или функция) hspi1, пишет, что не декларирована, но если нажать go to definition он находит эту строчку там в мейне.Вопрос, как исправить эту ситуацию?

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Все зависит от того, как у вас сгенерирован проект в кубе. Если вы включили расширенные настройки то у вас вся инициализация SPI находится в отдельном файле. И соответственно объявлять надо его. Если стандартные то в main.c и тогда надо в библиотеку прописать main.h Это показывает что у вас проблемы не с микроконтроллером а с пониманием языка C.

  • @ivank.r.8945

    @ivank.r.8945

    4 жыл бұрын

    @@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

    4 жыл бұрын

    Даже добавление чисто библиотеки устройства не дает эффекта(оно и не может, я просто в отчаянии)

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    @@ivank.r.8945 Вы можете показать какую ошибку дает компилятор?

  • @ivank.r.8945

    @ivank.r.8945

    4 жыл бұрын

    @@VladimirMedintsev она пишет, что функция hspi1 не определена, undefined

  • @bigga951
    @bigga9514 жыл бұрын

    Спасибо, доходчиво, понял. А вот если мне придется подцепить 3 дисплея сразу? Это для C вообще реализуемо? Или только ООП и С++?

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Пожалуйста, нужно 3 дисплея подключайте 3 дисплея. С точки зрения контроллера ему нет разницы сколько дисплеев в вашей конструкции. А вопроса про то, реализуемо ли это на языке С или надо использовать ООП я честно говоря не понял. А что-то есть реализуемое на С++ чего нельзя реализовать на С?

  • @bigga951

    @bigga951

    4 жыл бұрын

    @@VladimirMedintsev проинициализировать дисплей 3 раза, каждый со своим CS, на С++ я это могу представить более-менее четко. Как это реализовать на C, пока не догоняю

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    @@bigga951 Есть простой способ, изменить функции (из библиотеки работы с дисплеем) таким образом чтобы им в параметрах передавался еще и номер дисплея. Соответственно пусть они этот номер протягивают до самого нижнего уровня - до общения по SPI интерфейсу и там дергают за ногу соответствующий CS-pin. Таким образом все будет прекрасно работать. Ну и надо не забывать, что в любой момент вы можете классический "C" обернуть в обьект и перейти на C++ если вам так удобнее. И среда программирования и структура всех библиотек это позволяет. Другой дело что это редко делают потому что в этом нет потребностей. Но весь инструментарий позволяет перейти на плюсы без каких-либо проблем.

  • @bigga951

    @bigga951

    4 жыл бұрын

    @@VladimirMedintsev Точно! CS будет 3 штуки, и уже в параметрах отрисовки появится еще одна переменная=))). Спасибо=). Не знаю, что и делал бы без Ваших видео. Про CAN очень хорошо зашло, за вечер вдумчивого просмотра БК набросал-завел, с блэк-джеком и часиками=).

  • @alexaleynikov8978
    @alexaleynikov89784 жыл бұрын

    Добрый день, ссылка на библиотеку не работает. Есть возможность выложить ее?

  • @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 жыл бұрын

    если не трудно закиньте демо проект куда нибудь...

  • @samatsamatov5565
    @samatsamatov55655 жыл бұрын

    И всё же, было бы очень хорошо выложить свои исходники. В целях обучения, конечно.

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    Все достаточно просто. Я не против чем-то делиться с коллегами по цеху если это можно так назвать. Буквально пару недель назад и я у одного из подписчиков просил библиотеку т.к. сам застопорился в разработке. И взглянув на написанное у него удивился насколько все было просто. В данном случае я дал ссылку на библиотеку. Пользуйтесь пожалуйста. А вот подход ардуино-франкенштейнов когда проект лепится из убогого кода бездумно скомпилированных мыслей других людей я не поддерживаю.

  • @aemarkov
    @aemarkov4 жыл бұрын

    Внимание вопрос: насколько HAL распространен среди тех, кто занимается разработкой под STM32 на коммерческой основе? Какие там подходы?

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

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

  • @user-yx4bo6qo9x

    @user-yx4bo6qo9x

    Жыл бұрын

    @@VladimirMedintsev А почему HAL не используют в силовой электронике? Насколько я понмю, вы сделали электронную нагрузку, прошивка которой написана с использованием HAL.

  • @edmelectronics4110
    @edmelectronics4110 Жыл бұрын

    Ссылка на библиотека не работает. Откуда можно взять?

  • @VladimirMedintsev

    @VladimirMedintsev

    Жыл бұрын

    Не работает. Автор ее удалил.

  • @raal8438

    @raal8438

    Жыл бұрын

    ​@@VladimirMedintsev тогда свой файл выложи! ученик твой просит! или ты много много деньгов хатишь низашто! )))

  • @VladimirMedintsev

    @VladimirMedintsev

    Жыл бұрын

    @@raal8438 Продолжишь хамить - заблокирую.

  • @MTechnologies68

    @MTechnologies68

    11 ай бұрын

    ​@@raal8438?! Ты идиот? Человек вообще про деньги молчит, нахрен писать дичь?

  • @arzamas1988
    @arzamas19884 жыл бұрын

    Тоже постоянно заимствую либы на гитхабе. Нет времени разбираться со всем и писать свою либу. Аналогично перекапывал код, адаптировал под HAL.

  • @igorgoblin1123
    @igorgoblin11235 жыл бұрын

    Ага, круто! HAL это клёво дя бвстрой разработки и проверки. Дальше писать ручками без библиотек или хотя бы минимум cmsis. Могу утверждать со 100% уверенностью на примере ST7789 и дисплея 240х240- без HAL работает в 4 раза быстрее. А использовать или нет библиотеку решать конечно вам. Видео даже писал заливки экрана одним цветом с использованием HAL и без

  • @kardanium

    @kardanium

    4 жыл бұрын

    Я когда делал цифровую обработку звука на STM32F407, я сначала тоже слепил все на HAL в Кубе, чтобы тупо прогнать звук с одного интерфейса I2S в другой с целью проверки правильности сборки соплей на макетке. И как только я удостоверился, что все ОК, выкинул этот проект и начал уже чистый, где все настраивал на регистрах. Ибо нужен был каждый такт, так как цифровых фильтров нужно целую кучу. В ход пошли даже специальные DSP инструкции этого камня и некоторые банальные вещи, как перестановка двух полуслов местами в 32-битном слове - пришлось лепить ассемблером, ибо есть инструкции, которые сделают это за такт. А компилятор упорно не хотел их применять. Даже тактирование настраивал вручную, так как мне нужно было корректно реагировать на отвалы кварца (сначала дергать линию аварийного останова, потом уже все остальное), ибо это не просто обработчик звука, а целый усилитель на полкиловатта, класса D.

  • @toshibamaster2210
    @toshibamaster22103 жыл бұрын

    беру халовское и метотом тыка удаляю лишнее пока работоспособность остается)) 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){}; }

  • @user-nj4vm4sh2l
    @user-nj4vm4sh2lАй бұрын

    А где можно найти библиотеку на st7735? И можно ли с HAL на cmsis переписать?

  • @VladimirMedintsev

    @VladimirMedintsev

    Ай бұрын

    Библиотеку о которой я рассказывал автор удалил. Но подобных очень много. Переписать можно

  • @user-nj4vm4sh2l

    @user-nj4vm4sh2l

    Ай бұрын

    @@VladimirMedintsev Ну дайте хоть ссылку.Ещё один вопрос st7735 и iii9341 библиотеки похожи или нужно другую библиотеку?

  • @VladimirMedintsev

    @VladimirMedintsev

    Ай бұрын

    @user-nj4vm4sh2l нужно другую библиотеку

  • @ivanrusev2270

    @ivanrusev2270

    27 күн бұрын

    @@VladimirMedintsev А как можно кирилицу выаодить.?

  • @VladimirMedintsev

    @VladimirMedintsev

    27 күн бұрын

    @ivanrusev2270 Подключить кирилический шрифт и выводить. Ну уж это вообще не проблема. Есть куча генераторов шрифта.

  • @AndreyChigisheff
    @AndreyChigisheff5 жыл бұрын

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

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    Мне такая неизвестна, может кто из общественности подскажет.

  • @user-pc9wg4jt8l

    @user-pc9wg4jt8l

    5 жыл бұрын

    Есть русскоязычный ресурс, в котором тусуются любители подключения неизвестных дисплеев к микропроцессорам. В основном они там Ардуину мучают. К сожалению, адрес не сохранился.

  • @vladimirvt3930
    @vladimirvt39303 жыл бұрын

    Ссылка "Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2..." не рабочая!

  • @VladimirMedintsev

    @VladimirMedintsev

    3 жыл бұрын

    Да, ссылка не рабочая. Этот контент больше не существует на сайте автора. Я ничего с этим поделать не могу.

  • @ugene4063
    @ugene40634 жыл бұрын

    Hal хороша для жирных чипов. Но сие не всегда возможно ессно по соображениям финансовым🙂

  • @electronicelectronic-wo3yk
    @electronicelectronic-wo3yk4 жыл бұрын

    Здравствуйте! Ссылка не работает Исходная библиотека дисплея - mkprog.ru/wp-content/uploads/2...

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Да, ссылка не работает. Причина автор библиотеки не продлил хостинг. Если прочитаете комментарии под роликом то обнаружите альтернативную ссылку.

  • @alexroman6246
    @alexroman62464 жыл бұрын

    hal это как java-ценою скорости можно запускать на разных устройствах. для каждой задачи надо иметь подходящий мк.

  • @aemarkov
    @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 приводят к появлению ардуин, которые подводят все МК к общему знаменателю, самому хилому. Ведь в разных МК есть разные заморочки, позволяющие решить ту или иную задачу чуть эффективнее.

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Вот тут я специально делал обзор библиотек - kzread.info/dash/bejne/p4hmsNepmaaxk7A.html И да, обратные вызовы это просто сказочное решение если их правильно использовать.

  • @aemarkov

    @aemarkov

    4 жыл бұрын

    @@VladimirMedintsev Благодарю, видимо, я не очень разобрался, надо будет лучше покурить их документацию.

  • @denial3874
    @denial38743 жыл бұрын

    Пусть те кто рассказывают что 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 это, конечно, плюс. :)"

  • @alexorlovecky8015
    @alexorlovecky80154 жыл бұрын

    Никогда не понимал, почему все доступные библиотеки всяких дисплейчиков сделанны на прерываниях и ногодрыгах… Прям заговор какой то. Ведь есть же ДМА... Всегда беру только логику инициализации и настройки (бо лень разбирать все регистры в мануале дисплея) и переписываю под ДМА. Да, с ДМА удобно работать с буффером всего экрана, что не возможно на младших линейках МК. Но выдумал велосипед, который динамически выделят буфер, конкретно нужного участка. При этом вся работа осуществляется по средством "контроллера задач". То бишь есть массив абстрактных задач(текс, всякие кнопки, геометрические фигуры). Каждая задача, это структурка с общими атрибутами. В этот массив добавляем/изменяем/удаляем задачу. Вуаля! У нас не тратится ресурс ядра, нам не нужен целый буффер дисплея. Работает всё в разы быстрее, и не нужно обновлять весь экран (что так же визуально выглядит в разы приятней)Кстате, автору. Чисто для себя, сравните выигрыш после Вашей оптимизацией, и с стандартной функцией хала с включённой оптимизацией "фаст" во вкладке компилятора.. Разница если и будет, то сильно не значительна. Сильно вумные сегодня компиляторы, после которых в ассемблер вообще лезть не хочится.

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Сложность тут у всех одна. По какой-то причине ни у кого нет времени ждать и делать вдумчивое программирование как для себя. Вот взять хоть последний год. Заказчиков, кто готов был бы делать проект хоть 2 месяца можно пересчитать по пальцам. В основной массе все прибегают как кипятком облитые. 3 недели и проект должен быть готов. Это жуть какая-то. Разумеется при таком цейтноте ни о каком вдумчивом программировании и DMA вообще не идет речи. Тут только ногодрыг в самом худшем его проявлении и с дикими лагами. И заказчика я тоже в большинстве случаев могу понять. Ему эту плату вставить в изделие у которого сроки горят и вперед... При этом ладно бы использовались одни и те же экраны. Нет, как на подбор все разные у одного любовь к "жутким чернилам", другому OLED подавай, третий где-то прочитал что все это ерунда и хочет кучу светодиодиков и не думать о выгорании экрана. Так что если это не долговременный проект, а текучка, работы с DMA и хорошего программирования не ждите.

  • @slime924
    @slime9245 жыл бұрын

    а где код либы на HAL?)

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    Он показан в видео.

  • @user-dg3ut2mc6i
    @user-dg3ut2mc6i5 жыл бұрын

    Красиво но ... фигня эти дисплеи. стоят как чугунный мост а памяти откусывают на реализацию глядения на них ойойой. как правило обработчик целевых задач занимает полкопейки а задачи отражения настроек девайса на рубль. пробовал такой девайс применить.. вот - kzread.info/dash/bejne/l4RsrdGsd9LHdNY.html . Все дисплеи у нас уже как правило есть. то смартфон. достаточно написать сервер и через esp32 не только по wifi но и удаленно можно наблюдать и управлять. Тем более с китая чета посылки перестают приходить и особенно дисплеи.

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    Ну давайте по пунктам: 1. Стоит такой дисплей без платы 116 рублей на сегодняшний день. Это хорошая цена. 2. Памяти практически не откусывают если не делать видео-буфер. 3. В промышленной электронике типа контроллеров для оперативного управления использовать Wi-Fi недопустимо. Стандартами прописано ручное управление и отображение информации на приборе. 4. С посылками из Китая все хорошо. В моей немалой истории только одна пропала и то был косяк локальной почты.

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF4 жыл бұрын

    Ге всегда hal - это хорошо. Просто в данном примере всё слишком топорно сделано. А так то, если по нормальному делать, можно было разбить на абстракции, и потом легко переносить. Хоть на тот же hal.

  • @LexxS79
    @LexxS793 жыл бұрын

    Ни хера не понял. Тёмный лес для меня.

  • @ArtemKAD1
    @ArtemKAD13 жыл бұрын

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

  • @yroslavivanov8586
    @yroslavivanov85864 жыл бұрын

    Библиотеку скачать невозможно (((

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    Да, невозможно, ее автор удалил свой сайт. А вот если посмотрите в комментариях, то наверняка найдете нормальную ссылку.

  • @CoBaldr
    @CoBaldr5 жыл бұрын

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

  • @generalleitenant42
    @generalleitenant424 жыл бұрын

    Здраствуйте скиньте пожалуйста полностью исходный код с библиотеками на general.leitenant.42@mail.ru

  • @gintarasbaranauskas2035
    @gintarasbaranauskas20355 жыл бұрын

    Для управления GPIO ножек лучше использовать библиотеку LL а не HAL. Она работает гораздо быстрее и генерирует более компактный код.

  • @mnemo2637
    @mnemo2637 Жыл бұрын

    Для кого это?

  • @vadimerofeev1148
    @vadimerofeev11484 жыл бұрын

    HAL от STM это самая тупая и бесполезная библиотека. Для каждого периферийного модуля она хранит в ОЗУ копию всего регистрового контекста. Она хороша только для тех, кто пришел в STM32 из адурины. Они так и носят с собой костыли.

  • @VladimirMedintsev

    @VladimirMedintsev

    4 жыл бұрын

    И именно по этой причине данная библиотека так активно развивается производителем и тысячи разработчиков зарубежом ее используют? Ну вы прям молодец. Все дураки, а вы Дартаньян. Так получается?

  • @user-if7zu8nk2j

    @user-if7zu8nk2j

    4 жыл бұрын

    программирование на регистрах рано или поздно уйдёт в прошлое и мы о нём забудем как о страшном сне. Наведу вам такой себе примерчик... Имеем STM32H7 контроллер, к которому подключен 7" - дисплей по LTDC. Также к контроллеру подрублена оперативка (MT48LC32M16). Всё это дело коннектится в сеть (LAN8742 + LWIP) Я даже боюсь себе представить как без HAL-a и куба нужно будет натр***тся с регистрами что бы это всё завести

  • @dazzershell

    @dazzershell

    3 жыл бұрын

    @@user-if7zu8nk2j ХАЛ хорош тем, что он дополняет иногда коряво сделанное описание к периферии контроллеров, открывает тайны его особенностей и глюков. На старые МК были такие code-snippets, по сути шпаргалки под типовые задачи. Отличная вещь, жаль сейчас их не выкладывают. Настройка таймера занимала 5 строчек, с комментариями она давала больше ясности, чем казенные пространные мануалы и аппноуты от индусов из СТ.

  • @xbevice
    @xbevice5 жыл бұрын

    Hal это плохо. Косяки есть на уровне архитектуры

  • @VladimirMedintsev

    @VladimirMedintsev

    5 жыл бұрын

    О какая фраза потрясающая. Пример косяка привести сможете?

  • @avi-crakhome2524

    @avi-crakhome2524

    5 жыл бұрын

    @@VladimirMedintsev Всё в одном файле, переносимость нулевая. Железный уровень(spi и всё что с ним связано), аппаратно зависимый уровень(инициализация регистров дисплея), программно-зависимый уровень (функции рисования графики). Управление графикой у вас отдельно, но пробивает до самого дна. Пример отсутствия ошибок - файлы шрифтов. Наверное от того что сами по себе большие. Желательно ограничить их видимость только для функций рисования.

  • @xbevice

    @xbevice

    5 жыл бұрын

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

  • @XpIOHdeJIb3000
    @XpIOHdeJIb3000 Жыл бұрын

    ахренеть насколько кривущая библиотека, стыдно должно быть такое показывать.

Келесі