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

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

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

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

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

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


 
Опции темы
Непрочитано 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
Адрес: мурмурляндия
Сообщений: 10,383
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию 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
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
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, время: 13:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot