Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Дисплей ILI9341 на STM32F429 по SPI

Непрочитано 12.11.2017, 02:13  
radian
Прохожий
 
Регистрация: 12.11.2017
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
radian на пути к лучшему
По умолчанию Дисплей ILI9341 на STM32F429 по SPI

Всем привет. Прошу помочь разобраться с дисплеем ili9341 на плате STM32F429. Дисплей подключен через 8 битный SPI, но заставить его отобразить хоть что-нибудь никак не выходит. После инициализации экран просто покрывается серыми точками и темнеет.

Настройка SPI:
Код:
void SPI_Init(void)
{
  /*
   * CSX  -› PC2
   * DCX  -› PD13
   * SCL  -› PF7
   * MISO -› PF8
   * SDA  -› PF9
   */
  RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOFEN | RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOCEN;

  /* DCX Output PP */
  GPIOD-›MODER &= ~ GPIO_MODER_MODER13;
  GPIOD-›MODER |= GPIO_MODER_MODER13_0;

  /* CSX Output PP */
  GPIOC-›MODER &= ~ GPIO_MODER_MODER2;
  GPIOC-›MODER |= GPIO_MODER_MODER2_0;

  /* SCK MOSI MISO AF5 PP PD */
  GPIOF-›MODER &= ~(GPIO_MODER_MODER7 | GPIO_MODER_MODER8 | GPIO_MODER_MODER9);
  GPIOF-›MODER |= (GPIO_MODER_MODER7_1  | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1);
  GPIOF-›PUPDR &= ~(GPIO_PUPDR_PUPDR7 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9);
  GPIOF-›PUPDR |= (GPIO_PUPDR_PUPDR7_1 | GPIO_PUPDR_PUPDR8_1 | GPIO_PUPDR_PUPDR9_1);

  GPIOF-›AFR[0] |= GPIO_AFRL_AFSEL7_0 | GPIO_AFRL_AFSEL7_2;
  GPIOF-›AFR[1] |= GPIO_AFRH_AFSEL8_0 | GPIO_AFRH_AFSEL8_2;
  GPIOF-›AFR[1] |= GPIO_AFRH_AFSEL9_0 | GPIO_AFRH_AFSEL9_2;

  RCC-›APB2ENR |= RCC_APB2ENR_SPI5EN;

  SPI5-›CR1 |= SPI_CR1_BR_0 | SPI_CR1_BR_1; // Baud rate: 5.6 Mbit
  SPI5-›CR1 &= ~SPI_CR1_CPOL;               // Clock polarity: low
  SPI5-›CR1 &= ~SPI_CR1_CPHA;               // Clock phase: rising edge
  SPI5-›CR1 &= ~SPI_CR1_DFF;                // Data frame: 8-bit
  SPI5-›CR1 &= ~SPI_CR1_LSBFIRST;           // Frame format: MSB first
  SPI5-›CR1 |= SPI_CR1_SSI | SPI_CR1_SSM;   // NSS software mode
  SPI5-›CR1 |= SPI_CR1_MSTR;                // Master configuration

  SPI5-›CR1 |= SPI_CR1_SPE;
}

Инициализация дисплея:
Код:
void LCD_Init(void)
{
  LCD_WriteCommand(LCD_CMD_DISP_INV_OFF);
  LCD_WriteCommand(0xCA);
  LCD_WriteData(0xC3);
  LCD_WriteData(0x08);
  LCD_WriteData(0x50);
  LCD_WriteCommand(LCD_POWERB);
  LCD_WriteData(0x00);
  LCD_WriteData(0xC1);
  LCD_WriteData(0x30);
  LCD_WriteCommand(LCD_POWER_SEQ);
  LCD_WriteData(0x64);
  LCD_WriteData(0x03);
  LCD_WriteData(0x12);
  LCD_WriteData(0x81);
  LCD_WriteCommand(LCD_DTCA);
  LCD_WriteData(0x85);
  LCD_WriteData(0x00);
  LCD_WriteData(0x78);
  LCD_WriteCommand(LCD_POWERA);
  LCD_WriteData(0x39);
  LCD_WriteData(0x2C);
  LCD_WriteData(0x00);
  LCD_WriteData(0x34);
  LCD_WriteData(0x02);
  LCD_WriteCommand(LCD_PRC);
  LCD_WriteData(0x20);
  LCD_WriteCommand(LCD_DTCB);
  LCD_WriteData(0x00);
  LCD_WriteData(0x00);
  LCD_WriteCommand(LCD_FRC);
  LCD_WriteData(0x00);
  LCD_WriteData(0x1B);
  LCD_WriteCommand(LCD_DFC);
  LCD_WriteData(0x0A);
  LCD_WriteData(0xA2);
  LCD_WriteCommand(LCD_POWER1);
  LCD_WriteData(0x10);
  LCD_WriteCommand(LCD_POWER2);
  LCD_WriteData(0x10);
  LCD_WriteCommand(LCD_VCOM1);
  LCD_WriteData(0x45);
  LCD_WriteData(0x15);
  LCD_WriteCommand(LCD_VCOM2);
  LCD_WriteData(0x90);
  LCD_WriteCommand(LCD_MAC);
  LCD_WriteData(0xC8);
  //LCD_WriteData(0x48);
  LCD_WriteCommand(LCD_3GAMMA_EN);
  LCD_WriteData(0x00);
  LCD_WriteCommand(LCD_RGB_INTERFACE);
  LCD_WriteData(0xC2);
  LCD_WriteCommand(LCD_DFC);
  LCD_WriteData(0x0A);
  LCD_WriteData(0xA7);
  LCD_WriteData(0x27);
  LCD_WriteData(0x04);
  /* colomn address set */
  LCD_WriteCommand(LCD_COLUMN_ADDR);
  LCD_WriteData(0x00);
  LCD_WriteData(0x00);
  LCD_WriteData(0x00);
  LCD_WriteData(0xEF);
  /* Page Address Set */
  LCD_WriteCommand(LCD_PAGE_ADDR);
  LCD_WriteData(0x00);
  LCD_WriteData(0x00);
  LCD_WriteData(0x01);
  LCD_WriteData(0x3F);
  LCD_WriteCommand(LCD_INTERFACE);
  LCD_WriteData(0x01);
  LCD_WriteData(0x00);
  LCD_WriteData(0x06);
  LCD_WriteCommand(LCD_GRAM);
  HAL_Delay(200);

  LCD_WriteCommand(LCD_SLEEP_OUT);
  HAL_Delay(200);
  LCD_WriteCommand(LCD_DISPLAY_ON);
  /* GRAM start writing */
  LCD_WriteCommand(LCD_GRAM);
}

void LCD_WriteCommand(uint8_t LCD_Reg)
{
   DCX_LOW;
   CSX_LOW;
   SPI5-›DR = LCD_Reg;
   while(!(SPI5-›SR & SPI_SR_RXNE)){}
   SPI5-›DR;
   CSX_HI;
}

void LCD_WriteData(uint8_t value)
{
  DCX_HI;
  CSX_LOW;
  SPI5-›DR = value;
  while(!(SPI5-›SR & SPI_SR_RXNE)){}
  SPI5-›DR;
  CSX_HI;
}

Так я пытаюсь отобразить на экране красную линию:
Код:
uint8_t i = 0;
for (i = 0; i ‹ 200; ++i)
  {
    LCD_DrawPixel(i, i, 0xF800);
  }

void LCD_SetColumn(uint16_t start, uint16_t end)
{
  LCD_WriteCommand(LCD_CMD_COLUMN_ADDR);
  LCD_WriteData(start ›› 8);
  LCD_WriteData(start & 0xFF);
  LCD_WriteData(end ›› 8);
  LCD_WriteData(end & 0xFF);
}

void LCD_SetPage(uint16_t start, uint16_t end)
{
  LCD_WriteCommand(LCD_CMD_PAGE_ADDR);
  LCD_WriteData(start ›› 8);
  LCD_WriteData(start & 0xFF);
  LCD_WriteData(end ›› 8);
  LCD_WriteData(end & 0xFF);
}

void LCD_SetXY(uint16_t x, uint16_t y)
{
  LCD_SetColumn(x, x);
  LCD_SetPage(y, y);
}

void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color)
{
  LCD_SetXY(x, y);
  LCD_WriteCommand(LCD_GRAM);
  LCD_WriteData(color ›› 8);
  LCD_WriteData(color & 0xFF);
}
Реклама:
radian вне форума  
Непрочитано 12.11.2017, 02:45  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,129
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Дисплей ILI9341 на STM32F429 по SPI

ну чудила...
зачем тебе этот гемор по спи когда у 429 есть прямой контроллер экранов с плюшками типа видеокарты уже!!!
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 12.11.2017, 04:13  
radian
Прохожий
 
Регистрация: 12.11.2017
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
radian на пути к лучшему
По умолчанию Re: Дисплей ILI9341 на STM32F429 по SPI

Про LTDC знаю и через него все идет отлично, но его пины будут использоваться для других целей. А с SPI у меня опыта нету, так что считаю это хорошим поводом повозиться.
radian вне форума  
Непрочитано 12.11.2017, 04:51  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,282
Сказал спасибо: 11,860
Сказали Спасибо 4,159 раз(а) в 3,177 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Дисплей ILI9341 на STM32F429 по SPI

Конфигурация на IM3…IM0 правильная? VSS/VDDI-VDDI-VDDI-VSS
Используется 4-wire интерфейс?
Конфигурация сигналов и подтяжка соответствуют DS для выбранного типа интерфейса (I/II - IM3=VSS/VDDI)?
Тайминги инициализации и последовательность соответствуют DS?
Что происходит на линии данных на осциллографе, желательно вместе с тактовой. Правильно выбран режим D/C?
Что на линии CS?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 12.11.2017, 05:55  
radian
Прохожий
 
Регистрация: 12.11.2017
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
radian на пути к лучшему
По умолчанию Re: Дисплей ILI9341 на STM32F429 по SPI

У дисплея на этой плате IM контакты настроены на 4-wire 8-bit data serial interface I (0110), и тут ничего изменить нельзя.

С этой же инициализацией, но через LTDC все работатет, так что последовательность и тайминги должны соответсвовать, если я правильно понимаю. Раз инициализация проходит, то D/C тоже должен быть правильным.

Доступа к осциллографу пока что нет.
radian вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Кто-нибудь работал с RF модулями nRF2401A? Easyrider83 Автоматика и аппаратура связи 1481 04.09.2021 23:24
ili9341 SPI dimdidim ARM 35 02.12.2018 20:29
Дисплей с шиной SPI processo Электроника - это просто 1 06.10.2010 11:35
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03


Часовой пояс GMT +4, время: 11:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.