Программирование МК STM32. HAL. Урок 180. Дисплей TFT 240×320. SPI. DMA

Поделиться
HTML-код
  • Опубликовано: 17 авг 2024
  • Продолжаем работу с передачей данных по шине SPI.
    В данном занятии мы пытаемся продолжаем работать с дисплеем TFT разрешением 240x320, подключенным по шине SPI к микроконтроллеру STM32F407VG.
    Также вместе с данным дисплеем на данной плате установлен контроллер дисплея ILI9341, которым мы продолжим управлять.
    Только ко всему прочему в данном уроке мы отправку данных в дисплей будем производить с использованием технологии DMA.
    Отследим мы этот смысл с помощью логического анализатора.
    Посмотрим, что из этого получится.
    Купить отладочную плату STM32F4-DISCOVERY можно здесь ali.pub/178fif
    Дисплей LCD 2,8 дюймов 240x320 SPI TFT LCD можно приобрести здесь ali.pub/3y24z7
    Логический анализатор 16 каналов можно приобрести здесь ali.pub/2i1ki5
    Навигация по видео:
    00:00 Введение
    01:29 Аппаратная организация DMA в контроллере STM32F4
    07:03 Настроим проект
    14:27 Заливка полного экрана одним цветом с использованием DMA
    17:09 Обработаем прерывание окончания передачи буфера через DMA
    21:13 Заливка прямоугольной части экрана одним цветом с использованием DMA
    Рекомендуется также перед просмотром данного урока просмотреть данное видео:
    Урок 1. Установка Keil μVision • Программирование МК ST...
    УРОК 37. Дисплей TFT 240x320 8bit. Часть 1 • Программирование МК ST...
    Урок 23. HAL. SPI. Сдвиговый регистр 74HC595 • Программирование МК ST...
    Урок 24. HAL. SPI. LED Статическая индикация • Программирование МК ST...
    Урок 25. HAL. SPI. LED Динамическая индикация • Программирование МК ST...
    Урок 26. HAL. SPI. Драйвер индикатора MAX7219 • Программирование МК ST...
    Урок 153. HAL. SPI. Соединяем два контроллера. Часть 1 • Программирование МК ST...
    Урок 154. LL. SPI. Соединяем два контроллера • Программирование МК ST...
    Урок 155. HAL. DMA. MEM2MEM • Программирование МК ST...
    Урок 156. LL. DMA. MEM2MEM. Часть 1 • Программирование МК ST...
    Урок 159. HAL. SPI. DMA • Программирование МК ST...
    Урок 160. LL. SPI. DMA • Программирование МК ST...
    Урок 174. CMSIS. STM32F1. SPI. Драйвер индикатора MAX7219 • Программирование МК ST...
    Урок 175. CMSIS. STM32F1. SPI. Соединяем два контроллера • Программирование МК ST...
    Урок 179. Дисплей TFT 240×320. SPI. Часть 1 • Программирование МК ST...
    Текстовая версия урока и исходный код здесь narodstream.ru/...
    Программирование на различных языках:
    Группа в контакте public1...
    Группа в Facebook / 284342185817764
    Группа в Одноклассниках ok.ru/group/55...
    Программирование микроконтроллеров:
    Группа в контакте club1166...
    Группа в Одноклассниках ok.ru/group/529...
    Группа в Facebook / 236905359999556
    Мой сайт "Программирование МК" narodstream.ru/
    Форум narodstream.ru/...
    Вы можете помочь проекту:
    ЮMoney
    yoomoney.ru/to...
    Webmoney
    Z341906933112
    Карта Сбербанка (МИР)
    2202201799288929
    Можно в USDT
    1) Сеть:TRC20
    Адрес: TBBPFk5Widf1CYvF7Xk5ssKXeiPJHwtMgS
    2) Сеть: BSC BNB Smart Chain (BEP20) (комиссия намного меньше)
    Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17
    3) Сеть: Huobi ECO Chain (HECO) (комиссия еще меньше)
    Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17
  • НаукаНаука

Комментарии • 21

  • @shellshell9860
    @shellshell9860 4 года назад +6

    По поводу вызова MX_DMA_Init до вызова инита переферии: 18:24 Чтобы каждый раз это не делать, можно зайти в куб, в проект, -> Project Manager -> Advanced Settings и в таблице Generated Function Calls Выделить MX_DMA_Init и сместить ее вверх по рангу кнопками в правом верхнем углу таблицы. И добавьте в текстовую версию если не лень :)

    • @tupoy_ytub_uberi_psevdonim
      @tupoy_ytub_uberi_psevdonim Год назад

      надо записать ваш комментарий, я узнал новое для себя.

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim Год назад

    на F411/F401 нормальная последовательность инициализации. Мне повезло в этом плане.

  • @Beatleman91
    @Beatleman91 3 года назад +1

    Не работает код с сайта - при попытке компиляции ругается на multiple definition в районе фонтов. Как исправить ещё не понял, но включать Си-файлы в другие Си-файлы а-ля #include - дурной тон.

    • @narodstream552
      @narodstream552  3 года назад

      Ну это не мой дурной тон. Так сделано и в bsp-библиотеках от STM.

  • @user-px4tj9cp9u
    @user-px4tj9cp9u 4 года назад

    Скиньте видео, где вы рассказывали как собрать шлейфик такой вот

  • @vitalyoleynikov9268
    @vitalyoleynikov9268 4 года назад

    для F103 немного изменил процедуру:
    в хедере изменять размер буфера
    #define FRM_BUFF_SIZE 4096
    в библиотеке
    uint16_t i, n;

    SetAddrWindow(0, 0, WIDTH-1, HEIGHT-1);
    for(i=0;i> 8;
    frm_buf[i*2+1] = color & 0xFF;
    }
    dma_spi_flag=1;
    n = FRM_BUFF_SIZE;
    DC_DATA();
    dma_spi_cnt = ((WIDTH*HEIGHT*2)/FRM_BUFF_SIZE+1);
    // если один буфер будет лишний - страшно или нет?
    HAL_SPI_Transmit_DMA(&hspi1, frm_buf, n);
    while(!dma_spi_flag) {}
    dma_spi_flag=0;
    в главном файле флаг и счетчик можно не инициализировать
    uint8_t dma_spi_flag;
    uint32_t dma_spi_cnt;
    заливка практически мгновенная

  • @andresfelipeparragafuquene4848
    @andresfelipeparragafuquene4848 4 года назад

    Could u do a video with spi oled ? Please

  • @U_video
    @U_video 4 года назад +1

    Здравствуйте. А в чем смысл тратить такой большой буфер, если можно просто отключить инкримент памяти?

    • @narodstream552
      @narodstream552  4 года назад

      Смысл - проверить, как работает дисплей с DMA и смысл в будущем. Не всегда надо выводить одинаковые байты, то есть заливать одним цветом. Иногда требуется и разные. Подобный код потребуется для вывода буферов с разнообразным содержанием. Мы подключим SDRAM и будем работать с ним.
      Так что это именно для урока, чтобы мы могли делить любой буфер на удобоваримые кусочки для нашего DMA.

    • @user-co3bn2mu5d
      @user-co3bn2mu5d 4 года назад

      @@narodstream552 А возможно использовать буфер меньшего размера? Что бы он занимал допустим 20КВ а не 60?

  • @user-ld2xi8sn6l
    @user-ld2xi8sn6l 4 года назад

    Привет.А можешь снять видео анализ sdio шины при помощи usb логического анализатора

    • @narodstream552
      @narodstream552  4 года назад

      Здравствуйте!
      А зачем снимать видео.
      Настройте SDIO, подключите анализатор, запустите программу логического анализа, подключите протокол, если он там есть. Если нет, то напишите плагин. И смотрите на здоровье вживую без всякого видео.

    • @user-ld2xi8sn6l
      @user-ld2xi8sn6l 4 года назад

      @@narodstream552 Да у меня анализатор на 24 мегагерца всего.

    • @U_video
      @U_video 4 года назад

      @@user-ld2xi8sn6l тактовую частоту можно до 8 мгц уменьшить.

  • @ottodietrich3000
    @ottodietrich3000 4 года назад

    Хотелось бы поинтересоваться , планируется ли урок по памяти QSPI с помощью библиотеки HAL ? Интересует вопрос , так как на многих платах уже установлена такая энергонезависимая память и хотелось бы ее научиться использовать .

    • @narodstream552
      @narodstream552  4 года назад

      Пока нет, мы ещё не готовы. Хотя там нет ничего сложного. Есть примеры в репозитории Cube.

  • @alexeysidorov4407
    @alexeysidorov4407 4 года назад

    12:40 У вас долгая заливка экрана из-за отправки пакета по 2 байта. оставил реализацию отправки пакета у вас на сайте в Уроке 179. Часть 1. думается мне что это будет равнозначно отправки по ДМА, разумеется не считая что во время отправки по ДМА можно заниматься чем то полезным.

    • @narodstream552
      @narodstream552  4 года назад

      Это неправда. Быстрее не будет все равно. Байты следуют непрерывно. Мы же проверили с помощью логического анализа. Я пробовал с применением SDRAM. Картинки вылетают мгновенно.

  • @evgeniypenkov750
    @evgeniypenkov750 4 года назад

    Здравствуйте, уважаемый автор! Проясните, пожалуйста, момент передачи данных из буфера в дисплей!? У меня подключен дисплей (ST7735) с использованием LL, в этом случае перед оправкой данных к дисплею идет команда адреса пикселя и команда записи в память дисплея и так для каждого пикселя. А как этот момент реализуется в DMA?

    • @narodstream552
      @narodstream552  4 года назад

      Здравствуйте!
      Для передачи одного пикселя никакой буфер и никакой DMA не требуется. Это операция передачи двух байтов, они и без DMA прекрасно передадутся. Как работать с DMA в SPI при использовании библиотеки LL, мы изучили в одном из предыдущих уроков, правда был там несколько другой контроллер, но реализация DMA там не сильно отличается.