Программирование МК 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 Наука
По поводу вызова MX_DMA_Init до вызова инита переферии: 18:24 Чтобы каждый раз это не делать, можно зайти в куб, в проект, -> Project Manager -> Advanced Settings и в таблице Generated Function Calls Выделить MX_DMA_Init и сместить ее вверх по рангу кнопками в правом верхнем углу таблицы. И добавьте в текстовую версию если не лень :)
надо записать ваш комментарий, я узнал новое для себя.
на F411/F401 нормальная последовательность инициализации. Мне повезло в этом плане.
Не работает код с сайта - при попытке компиляции ругается на multiple definition в районе фонтов. Как исправить ещё не понял, но включать Си-файлы в другие Си-файлы а-ля #include - дурной тон.
Ну это не мой дурной тон. Так сделано и в bsp-библиотеках от STM.
Скиньте видео, где вы рассказывали как собрать шлейфик такой вот
для 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;
заливка практически мгновенная
Could u do a video with spi oled ? Please
Здравствуйте. А в чем смысл тратить такой большой буфер, если можно просто отключить инкримент памяти?
Смысл - проверить, как работает дисплей с DMA и смысл в будущем. Не всегда надо выводить одинаковые байты, то есть заливать одним цветом. Иногда требуется и разные. Подобный код потребуется для вывода буферов с разнообразным содержанием. Мы подключим SDRAM и будем работать с ним.
Так что это именно для урока, чтобы мы могли делить любой буфер на удобоваримые кусочки для нашего DMA.
@@narodstream552 А возможно использовать буфер меньшего размера? Что бы он занимал допустим 20КВ а не 60?
Привет.А можешь снять видео анализ sdio шины при помощи usb логического анализатора
Здравствуйте!
А зачем снимать видео.
Настройте SDIO, подключите анализатор, запустите программу логического анализа, подключите протокол, если он там есть. Если нет, то напишите плагин. И смотрите на здоровье вживую без всякого видео.
@@narodstream552 Да у меня анализатор на 24 мегагерца всего.
@@user-ld2xi8sn6l тактовую частоту можно до 8 мгц уменьшить.
Хотелось бы поинтересоваться , планируется ли урок по памяти QSPI с помощью библиотеки HAL ? Интересует вопрос , так как на многих платах уже установлена такая энергонезависимая память и хотелось бы ее научиться использовать .
Пока нет, мы ещё не готовы. Хотя там нет ничего сложного. Есть примеры в репозитории Cube.
12:40 У вас долгая заливка экрана из-за отправки пакета по 2 байта. оставил реализацию отправки пакета у вас на сайте в Уроке 179. Часть 1. думается мне что это будет равнозначно отправки по ДМА, разумеется не считая что во время отправки по ДМА можно заниматься чем то полезным.
Это неправда. Быстрее не будет все равно. Байты следуют непрерывно. Мы же проверили с помощью логического анализа. Я пробовал с применением SDRAM. Картинки вылетают мгновенно.
Здравствуйте, уважаемый автор! Проясните, пожалуйста, момент передачи данных из буфера в дисплей!? У меня подключен дисплей (ST7735) с использованием LL, в этом случае перед оправкой данных к дисплею идет команда адреса пикселя и команда записи в память дисплея и так для каждого пикселя. А как этот момент реализуется в DMA?
Здравствуйте!
Для передачи одного пикселя никакой буфер и никакой DMA не требуется. Это операция передачи двух байтов, они и без DMA прекрасно передадутся. Как работать с DMA в SPI при использовании библиотеки LL, мы изучили в одном из предыдущих уроков, правда был там несколько другой контроллер, но реализация DMA там не сильно отличается.