Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
 Аватар для TIRECS
2 / 2 / 0
Регистрация: 16.07.2012
Сообщений: 38

Экран на ili9481 через SPI

17.10.2021, 17:51. Показов 7021. Ответов 40

Студворк — интернет-сервис помощи студентам
Недавно пришёл с алика сенсорный экранчик на ili9481. Пробую отрисовать на нём что-либо, но ничего не выходит.
Проект создан в CubeIDE, для платы Nucleo-F446RE. К экрану пытаюсь достучаться по SPI2 на ногах PB13-15.
За основу брал статью со стороннего ресурса о работе схожего экрана, т.к системы команд у них схожи.

Подключал так (контроллер -> экран):
3,3V -> VDD
GND -> GND
GND -> CS
3,3V -> BL (подсветка)
PB13(SCLK) -> SCK
PB14(MISO) -> SDI
PB15(MOSI) -> SDO
PB1 -> D/C

Функции которыми пытался достучаться:
Кликните здесь для просмотра всего текста

Основная, отправка байта:
C
1
2
3
4
5
void SPI2_SendByte(uint8_t sendData)
{
  while(!(SPI2->SR & SPI_SR_TXE));
  SPI2->DR = sendData;
}
Пересылка команды и данных, с ногодрыгом пина D/C экрана
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void SendCommand(uint8_t Dat)//DC=0
{
    if( HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 1 )
    {
        while((SPI2->SR & SPI_SR_BSY));
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1,0);
    }
    SPI2_SendByte(Dat);
}
 
void SendDat(uint8_t Dat)//DC=1
{
    if( HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0 )
    {
        while((SPI2->SR & SPI_SR_BSY));
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1,1);
    }
    SPI2_SendByte(Dat);
}
 
void Send2Dat(uint16_t Dat)//DC=1
{
    if( HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0 )
    {
        while((SPI2->SR & SPI_SR_BSY));
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1,1);
    }
    SPI2_SendByte(Dat>>8);
    SPI2_SendByte(Dat);
}
Ну и пользовательские функции для включения и отрисовки
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void SoftReset(void)
{
    SendCommand(SOFTRESET);
    HAL_Delay(120);
}
 
void ili9481_init(void)
{
    SoftReset();
    SendCommand(COLMOD);
    SendDat(COLMOD_PARAMETR);
    SendCommand(MADCTL);
    SendDat(MADCTL_PARAMETR);
    SendCommand(SLEEPOUT);
    HAL_Delay(120);
    SendCommand(DISPLAYON);
    HAL_Delay(120);
}
 
void draw_pixel(int16_t x, int16_t y, uint16_t color)
{
    SendCommand(COLADDRSET);
    SendDat(x>>8); SendDat(x);
    SendDat(x>>8); SendDat(x);
    SendCommand(PAGEADDRSET);
    SendDat(y>>8); SendDat(y);
    SendDat(y>>8); SendDat(y);
    SendCommand(MEMORYWRITE);
    Send2Dat(color);
}
 
void draw_FulRect(int16_t x, int16_t y, int16_t x2, int16_t y2, uint16_t color)
{
    uint16_t k=(x2-x)*(y2-y);
    SendCommand(COLADDRSET);
    SendDat(x>>8); SendDat(x);
    SendDat(x2>>8); SendDat(x2);
    SendCommand(PAGEADDRSET);
    SendDat(y>>8); SendDat(y);
    SendDat(y2>>8); SendDat(y2);
    SendCommand(MEMORYWRITE);
    while(k--)
        Send2Dat(color);
}
Используемая система команд
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define BLACK                       0x0000
#define BLUE                        0x001F
#define RED                         0xF800
#define GREEN                       0x07E0
#define CYAN                        0x07FF
#define MAGENTA                     0xF81F
#define YELLOW                      0xFFE0
#define WHITE                       0xFFFF
 
#define SOFTRESET           0x01
#define SLEEPOUT            0x11
#define DISPLAYON           0x29
#define COLADDRSET          0x2A
#define PAGEADDRSET         0x2B
#define MEMORYWRITE         0x2C
#define MADCTL              0x36
  #define MADCTL_MY               0x80
  #define MADCTL_MX               0x40
  #define MADCTL_MV               0x20
  #define MADCTL_BGR              0x08
  #define MADCTL_RGB              0x00
#define COLMOD              0x3A
  #define COLMOD_PARAMETR           0x55
#define READ_ID4            0xD3
 
#define ROTATION                    2
#if ROTATION == 1
  #define MADCTL_PARAMETR           MADCTL_MX | MADCTL_BGR
  #define ILI9341_TFTWIDTH          320
  #define ILI9341_TFTHEIGHT         480
#elif ROTATION == 2
  #define MADCTL_PARAMETR           MADCTL_MV | MADCTL_BGR
  #define ILI9341_TFTWIDTH          480
  #define ILI9341_TFTHEIGHT         320
#elif ROTATION == 3
  #define MADCTL_PARAMETR           MADCTL_MY | MADCTL_BGR
  #define ILI9341_TFTWIDTH          320
  #define ILI9341_TFTHEIGHT         480
#elif ROTATION == 4
  #define MADCTL_PARAMETR           MADCTL_MX | MADCTL_MY| MADCTL_MV | MADCTL_BGR
  #define ILI9341_TFTWIDTH          480
  #define ILI9341_TFTHEIGHT         320
#endif


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

Еще напрягают неизвестные шумы на пине MISO во время передачи данных, в простое их не наблюдается
Миниатюры
Экран на ili9481 через SPI   Экран на ili9481 через SPI  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2021, 17:51
Ответы с готовыми решениями:

LCD Ili9481 + Coocox
Здравствуйте! Помогите пожалйста разобраться. Есть отладочная платка на stm32f103VET6. Есть дисплей ILI9481 3,5 дюйма 480х320 режим...

MCP2515 через SPI
Всем доброго времени суток. Недавно начал изучение программирования на AVR, задача - связаться через SPI с CAN. Хотя бы просто связаться,...

Spi через регистры
пишу в truestudio использую hal * USER CODE BEGIN WHILE */ while (1) { HAL_UART_Transmit(&huart1,(uint8_t*)buf, 3,...

40
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
24.11.2021, 18:51
Студворк — интернет-сервис помощи студентам
Из datasheet ili9481:
The write sequence is initiated when CSX is driven from high to low and ends when CSX is pulled high.
0
0 / 0 / 0
Регистрация: 31.07.2018
Сообщений: 11
30.11.2021, 10:03
Здравствуйте. Знаю что возможно пишу не в той теме, но то что я хочу собрать тоже с экраном, но на контроллере ili9341. В общем хочу собрать Hardware Monitor.

Прошить через Arduino IDE так и не смог. Пробовал версии 1.8.5, 1.8.15 и 1.8.13 (как у автора проекта). Но всё время появляется сообщение о недостающих файлах или об ошибке компиляции (exit status 1 Ошибка компиляции для платы Generic STM32F103C series).

Может кто-нибудь подсказать что я делаю не так? Во время прошивки экран должен быть подключен к плате STM32 или его можно подключить после того как плата будет прошита? Прошиваю через USB, STM32 определяется как COM порт.
Вложения
Тип файла: zip 1.zip (3.8 Кб, 3 просмотров)
0
 Аватар для TIRECS
2 / 2 / 0
Регистрация: 16.07.2012
Сообщений: 38
30.11.2021, 10:16  [ТС]
Вы пробовали для начала использовать тестовые примеры (насколько знаю именно для 8341 у адафрута есть несколько примеров в ардуине. Какая плата используется для проекта (блюпилка?). Другие скетчи прошиваются и работают, тот же блинк к примеру?
0
0 / 0 / 0
Регистрация: 31.07.2018
Сообщений: 11
30.11.2021, 10:43
Цитата Сообщение от TIRECS Посмотреть сообщение
Вы пробовали для начала использовать тестовые примеры (насколько знаю именно для 8341 у адафрута есть несколько примеров в ардуине. Какая плата используется для проекта (блюпилка?). Другие скетчи прошиваются и работают, тот же блинк к примеру?
Использую STM32F103C8T6 Blue Pill. Тестовый скетч Blink прошил в самом начале, после прошивки плата стала определяться как COM порт (до этого просто определялась как Maple DFU) и светодиод стал моргать 1 раз в сек. Прошиваю с отключенным дисплеем, может в этом дело? Может дисплей должен быть подключен во время прошивки? Никогда не имел дело с STM32, до этого обычно пользовался ESP32 и с ними не бывало таких проблем.
0
 Аватар для TIRECS
2 / 2 / 0
Регистрация: 16.07.2012
Сообщений: 38
30.11.2021, 11:05  [ТС]
Прошивка подразумевает загрузку микрокода в память контроллера. Периферия в этот момент не получает никаких сигналов, поэтому подключен дисплей или нет разницы не имеет. После окончания загрузки происходит рестарт и контроллер начинает выполнять программу. Первым делом происходит инициация периферии (если это требуется) и только потом уже работа с ней. Т.е экран должен быть подключен перед началом выполнения программы. Можно прошить контроллер, потом подключить экран, подать питание или (если схема собиралась с включённым контроллером) нажать кнопку Reset.
1
0 / 0 / 0
Регистрация: 31.07.2018
Сообщений: 11
30.11.2021, 11:12
Цитата Сообщение от TIRECS Посмотреть сообщение
подключен дисплей или нет разницы не имеет.
Спасибо. Так и думал. Можете ещё подсказать какой лучше источник использовать для добавления платы STM32 в Arduino IDE? Я пробовал добавлять плату из разных источников, но остановился на этом. Скачиваю архив, разархивирую и просто добавляю в папку hardware. Может для последних версий Arduino IDE нужно использовать другой метод добавления плат STM32?
0
 Аватар для TIRECS
2 / 2 / 0
Регистрация: 16.07.2012
Сообщений: 38
30.11.2021, 12:41  [ТС]
Насколько знаю, в самой IDE в области подменю выбора платы сверху есть кнопка добавления своей. Она вызывает окно подобное добавлению библиотек но только с платами. В поисковой строке набрать STM32 и смотреть результаты. В описании искать bluepill или f103

Добавлено через 41 минуту
Забыл добавить, что нужно внести директорию поиска в программу: для этого открываем настройки и в окне ввода "Дополнительные ссылки для менеджера плат" вносим этот адрес: http://dan.drown.org/stm32duin... index.json

Дальше как я описал выше
0
0 / 0 / 0
Регистрация: 31.07.2018
Сообщений: 11
30.11.2021, 15:27
Получилось скомпилировать скетч. Решение всех проблем было описано в текст самого скетча, точнее в его комментарии.
Adafruit GFX Library:
NOTE: Adafruit_GFX Version 1.8.0 and higher doesn't compile for ESP8266 & STM32 Boards -
Downgrade to Adafruit_GFX Version 1.7.5 in the library manager.Libraries

Как выяснилось для компиляции данного скетча библиотека Adafruit_GFX не должна быть выше версии 1.7.5
0
0 / 0 / 0
Регистрация: 02.01.2022
Сообщений: 5
02.01.2022, 10:54
Привет всем ! Меня очень интересует этот дисплей на ips матрице ili9481 удалось его завести по isp протоколу ? У меня стоит выбор между ili9488 - ili9481

Добавлено через 16 минут
SPI протоколу
0
 Аватар для TIRECS
2 / 2 / 0
Регистрация: 16.07.2012
Сообщений: 38
02.01.2022, 11:00  [ТС]
У меня так и не вышло не то что пиксель закрасить но даже получить какой-либо ответ от дисплея. Пробовал и самописный код через stm32, и библиотеки через ардуино - результат никакой...
0
Windows must die
608 / 881 / 104
Регистрация: 23.11.2021
Сообщений: 5,163
Записей в блоге: 19
02.01.2022, 11:06
Я тоже не смог ни один из трёх экранчиков поднять. Попробовал абдуриной - тоже не работает, т.е. все три - брак.
На одном вообще тач приняли к SPI! Отпаял, но не помогло.
0
Эксперт .NET
 Аватар для Rius
13391 / 7842 / 1699
Регистрация: 25.05.2015
Сообщений: 23,853
Записей в блоге: 14
02.01.2022, 11:16
Anton7558, покупай на buydisplay.com, там распайка правильная и документация в комплекте. Контроллер дисплея значения не имеет, если вышеперечисленное есть, работать будет.
(если ты не нуб, но это проходит со временем, обычно)
0
0 / 0 / 0
Регистрация: 02.01.2022
Сообщений: 5
02.01.2022, 11:53
Спасибо за ответы ! Даже библиотека Adafruit-ILI9481-ESP32-SPI-master.zip не помогла ? С дисплеем на ili9488 я разобрался быстро проект работает и картинки показывает хорошо 16 бит всё таки , но одно но спалил (коратнул) . С дисплеем на ili9486 не всё так просто заводится на библиотеке ili9488 , но происходить смещение цветов подправил библиотеку заработало , но 8 бит картинки не все идут (в основном светлые) . У ТФТ углы маленькие , а этот ips углы должны быть большие , но как я понимаю завести не удастся по spi ?
0
Эксперт .NET
 Аватар для Rius
13391 / 7842 / 1699
Регистрация: 25.05.2015
Сообщений: 23,853
Записей в блоге: 14
02.01.2022, 12:18
Цитата Сообщение от Anton7558 Посмотреть сообщение
но как я понимаю завести не удастся по spi
Не так. Контроллеры работают по предусмотренным производителем интерфейсам при правильной распайке и программе.
0
0 / 0 / 0
Регистрация: 02.01.2022
Сообщений: 5
02.01.2022, 12:42
А где это можно посмотреть ? Информация очень скудная .
0
Эксперт .NET
 Аватар для Rius
13391 / 7842 / 1699
Регистрация: 25.05.2015
Сообщений: 23,853
Записей в блоге: 14
02.01.2022, 12:44
Это - это что? Какая информация скудная?
0
0 / 0 / 0
Регистрация: 02.01.2022
Сообщений: 5
02.01.2022, 12:55
Про распайку и программу ...
0
Эксперт .NET
 Аватар для Rius
13391 / 7842 / 1699
Регистрация: 25.05.2015
Сообщений: 23,853
Записей в блоге: 14
02.01.2022, 13:13
Например: https://www.buydisplay.com/4-3... controller
0
0 / 0 / 0
Регистрация: 02.01.2022
Сообщений: 5
02.01.2022, 13:25
Спасибо , но Вы всё дальше меня уводите от истины . Шилд (паралельное) соединение работает . Проблема в сокращение количества проводников до 4 spi . Дисплей уже установлен на плате с SPI разводкой
https://aliexpress.ru/item/100... 3mwQ5&mp=1
0
Эксперт .NET
 Аватар для Rius
13391 / 7842 / 1699
Регистрация: 25.05.2015
Сообщений: 23,853
Записей в блоге: 14
02.01.2022, 14:20
Цитата Сообщение от Anton7558 Посмотреть сообщение
на плате с SPI разводкой
Мало заказов.
Мало отзывов.
Среди отзывов никто не сказал, что дисплей работает, зато наоборот - да.

Надо подать правильное напряжение питания, а это 3.3В или 5В, не ясно.
Далее программным SPI установить простейший обмен и считать ID контроллера дисплея.
Далее прописать инициализацию именно для такого контроллера и для такого размера матрицы.

Цитата Сообщение от Anton7558 Посмотреть сообщение
от истины
Истина проста: нужно покупать комплектующие, имеющие нормальную документацию. Иначе вам предстоит игра в угадайку и повезейку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.01.2022, 14:20

MSP430G2553 через SPI к CC110L
Есть МК (MSP430G2553) и есть трансмиттер Anaren LR09A на чипе CC110L всё управление чипом производиться посредством команд SPI. (Посылаем...

spi через длинные провода в автомобиле
Нужно управлять одним spi устройством, можно на очень малых скоростях (1 кГц). Между контроллером и устройством метров 5, в автомобиле. Что...

Проблемы с fatfs через spi [решено].
Возникала такая проблема с fatfs через spi. Система монтируется, файлы открываются, и даже создаются пустые файлы, но их не возможно...

Соединение STM32 + Cubieboard через SPI
Добрый день! Соединяю платы STM32 и Cubieboard2 через SPI. Скорость 10МГц. Может ли длинна проводов между платами достигать 10-20 см?

Передача данных через SPI ATmega8
Не передаются данные через шину, не понимаю почему. Передаю массив данных, который содержит в себе картинку 8 на 8 пикселей. По схеме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru