Перейти к содержанию
    

Подключение ITDB02_2.4E к STM32F743ZG

Всем привет.

 

Возникла проблема с подключением указанного модуля к плате Nucleo-STM32F743ZG. Пытаюсь подключить по FSMC, используя видеоуроки от Sappise. Однако дисплей не инициализируется, что бы я ни делал, только жизнерадостно горит подсветонька. Подключаю в режиме 16 бит, пример инициализации для контроллера дисплея (S6D1121) нашел здесь, на форуме, а также в программке одного поляка. Исходя из того, что они совпадают, пришел к выводу, что ошибка не в инициализации.

 

Инициализация F7 и модуля FSMC происходит с помощью HALCubeMX, тактовая частота на MCO совпадает с требуемой, а отладчик говорит, что весь код инициализации успешно выполняется, и программа переходит в главный цикл, то есть проблема не в зависании.

 

Инициализация FSMC (в F7 он обозначен как FMC):

/* FMC initialization function */
static void MX_FMC_Init(void)
{
 FMC_NORSRAM_TimingTypeDef Timing;

 /** Perform the SRAM1 memory initialization sequence
 */
 hsram1.Instance = FMC_NORSRAM_DEVICE;
 hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
 /* hsram1.Init */
 hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
 hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
 hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
 hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
 hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
 hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
 hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
 hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
 hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
 hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
 hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
 hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
 hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
 hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE;
 hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
 /* Timing */
 Timing.AddressSetupTime = 15;
 Timing.AddressHoldTime = 15;
 Timing.DataSetupTime = 255;
 Timing.BusTurnAroundDuration = 15;
 Timing.CLKDivision = 16;
 Timing.DataLatency = 17;
 Timing.AccessMode = FMC_ACCESS_MODE_A;
 /* ExtTiming */

 if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
 {
_Error_Handler(__FILE__, __LINE__);
 }

}
 

 

Заголовочный файл с адресами для записи и чтения:

#ifndef LCD_H
#define LCD_H
#include "stm32f7xx_hal.h"

#define CMD_ADR ((*(uint32_t*)0x60000000))
#define DAT_ADR ((*(uint32_t*)0x60020000))

#define S6D1121_GRAM   0x22

void lcdInit(void);

#endif
 

 

И файл с функциями:

#include "lcd.h"

void lcdWriteReg(uint16_t reg, uint16_t dat)
{
  CMD_ADR = reg;
  DAT_ADR = dat;
}

void lcdWriteDat(uint16_t dat)
{
  DAT_ADR = dat;
}

uint16_t lcdReadReg(uint8_t LCD_Reg) 
{
  uint16_t val = 0;
  CMD_ADR = LCD_Reg;
  val = DAT_ADR;						 // Read 16-bit Reg 
  return val;
}

void lcdGRAMReady(void)
{
  CMD_ADR = S6D1121_GRAM;
}

void lcdClear(uint32_t color)
{
  lcdGRAMReady();
  for (uint32_t i = 0; i < 320 * 240; i++)
  {
  DAT_ADR = color;
  }
}

void lcdInit(void)
{
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET);
  HAL_Delay(1000);
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
  HAL_Delay(1000);

//   lcdReadReg(0x00);

  lcdWriteReg(0x11,0x2004);   
  lcdWriteReg(0x13,0xCC00);   
  lcdWriteReg(0x15,0x2600);   
  lcdWriteReg(0x14,0x252A);   
  lcdWriteReg(0x12,0x0033);   
  lcdWriteReg(0x13,0xCC04);   
  HAL_Delay(5); 
  lcdWriteReg(0x13,0xCC06);   
  HAL_Delay(5); 
  lcdWriteReg(0x13,0xCC4F);   
  HAL_Delay(5);  
  lcdWriteReg(0x13,0x674F);
  lcdWriteReg(0x11,0x2003);
  HAL_Delay(5); 
  lcdWriteReg(0x30,0x2609);   
  lcdWriteReg(0x31,0x242C);   
  lcdWriteReg(0x32,0x1F23);   
  lcdWriteReg(0x33,0x2425);   
  lcdWriteReg(0x34,0x2226);   
  lcdWriteReg(0x35,0x2523);   
  lcdWriteReg(0x36,0x1C1A);   
  lcdWriteReg(0x37,0x131D);   
  lcdWriteReg(0x38,0x0B11);   
  lcdWriteReg(0x39,0x1210);   
  lcdWriteReg(0x3A,0x1315);   
  lcdWriteReg(0x3B,0x3619);   
  lcdWriteReg(0x3C,0x0D00);   
  lcdWriteReg(0x3D,0x000D);   
  lcdWriteReg(0x16,0x0007);   
  lcdWriteReg(0x02,0x0013);   
  lcdWriteReg(0x03,0x8003);   
  lcdWriteReg(0x01,0x0127);   
  HAL_Delay(5); 
  lcdWriteReg(0x08,0x0303);   
  lcdWriteReg(0x0A,0x000B);   
  lcdWriteReg(0x0B,0x0003); 
  lcdWriteReg(0x0C,0x0000); 
  lcdWriteReg(0x41,0x0000); 
  lcdWriteReg(0x50,0x0000); 
  lcdWriteReg(0x60,0x0005); 
  lcdWriteReg(0x70,0x000B); 
  lcdWriteReg(0x71,0x0000); 
  lcdWriteReg(0x78,0x0000); 
  lcdWriteReg(0x7A,0x0000); 
  lcdWriteReg(0x79,0x0007);   
  lcdWriteReg(0x07,0x0051); 
  HAL_Delay(5); 
  lcdWriteReg(0x07,0x0053);   
  lcdWriteReg(0x79,0x0000);
  HAL_Delay(50); 

  lcdClear(0x0000);
  HAL_Delay(50); 
}
 

 

По идее, после инициализации дисплейчик должен окрашивать в жизнеутверждающий черный цвет, вот только этого ни разу не происходит.

 

Флешка на этом же модуле работает как часы.

 

Потратил уже несколько дней, но никакого решения проблемы так и не нашел, поэтому буду благодарен за любую помощь.

Изменено пользователем haker_fox
Уточнил название темы, добавил теги, переместил в нужный раздел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простейшим признаком исправности интерфейса является получение "Production code" из рег 0x00. У вас чтение из него закомментировано: работает? 0x1121 было вычитано?

Подозреваю (по опыту с Ilitek), что из самсунговского контроллера можно читать и из регистров "на запись" - способ проверки.

 

С очисткой вы поспешили, правильно включённый дисплей будет заполнен хаотическими цветными точками.

 

В магических числах разбираться сил нет, но младший ниббл в рег. 0x11 не может быть 4: в битах VC1..VC0 кодируются чичсла [0..3].

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простейшим признаком исправности интерфейса является получение "Production code" из рег 0x00. У вас чтение из него закомментировано: работает? 0x1121 было вычитано?

Подозреваю (по опыту с Ilitek), что из самсунговского контроллера можно читать и из регистров "на запись" - способ проверки.

 

Вот тут кроется очередная засада - чтение из любого регистра возвращает 0xD325. Я сначала грешил на криво написанную функцию, поэтому воспользовался готовой функцией из библиотеки HAL. Однако она вернула мне то же самое. И в окне памяти кейловского отладчика с определенного момента до адреса 0x60000000 - знаки вопроса, а вот начиная с этого самого адреса там именно 0xD325.

Я, откровенно говоря, не самый большой спец по микроконтроллерам, поэтому вполне допускаю, что мог и дурака где-то свалять, но вот этого момента я откровенно не понимаю.

post-99790-1508251441_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут ситуация простая: отладчик (JTAG, надеюсь, есть), осциллограф - добиться правильной работы параллельной шины.

 

Кстати, Nucleo-STM32F743ZG гуглю неизвестна (;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут ситуация простая: отладчик (JTAG, надеюсь, есть), осциллограф - добиться правильной работы параллельной шины.

 

JTAG, к сожалению, отсутствует, осцил будет на следующей неделе :( Исходя из того, что я вчера накопал, есть подозрение, что я намешал обращение к регистрам, пока попробую копнуть в эту сторону.

 

Кстати, Nucleo-STM32F743ZG гуглю неизвестна (;

 

Может, я не совсем правильно написал. В общем, вот такая платка у меня - http://www.st.com/content/st_com/en/produc...leo-f746zg.html

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"The STM32 Nucleo-144 boards do not require any separate probe as they integrate the ST-LINK/V2-1 debugger / programmer." - всё у вас есть (;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"The STM32 Nucleo-144 boards do not require any separate probe as they integrate the ST-LINK/V2-1 debugger / programmer." - всё у вас есть (;

 

Нет, отладчик, само собой, есть, и я даже немножко в него умею:) А вот осциллографа сейчас под рукой нет. Вроде в кейле есть такая штука, как логический анализатор, только я когда-то так и не вкурил работу с ним. Видимо, если остальное не поможет, то придется и с ним разбираться до кучи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...