alexmiron31 0 17 октября, 2017 Опубликовано 17 октября, 2017 (изменено) · Жалоба Всем привет. Возникла проблема с подключением указанного модуля к плате 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); } По идее, после инициализации дисплейчик должен окрашивать в жизнеутверждающий черный цвет, вот только этого ни разу не происходит. Флешка на этом же модуле работает как часы. Потратил уже несколько дней, но никакого решения проблемы так и не нашел, поэтому буду благодарен за любую помощь. Изменено 16 ноября, 2022 пользователем haker_fox Уточнил название темы, добавил теги, переместил в нужный раздел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 17 октября, 2017 Опубликовано 17 октября, 2017 · Жалоба Простейшим признаком исправности интерфейса является получение "Production code" из рег 0x00. У вас чтение из него закомментировано: работает? 0x1121 было вычитано? Подозреваю (по опыту с Ilitek), что из самсунговского контроллера можно читать и из регистров "на запись" - способ проверки. С очисткой вы поспешили, правильно включённый дисплей будет заполнен хаотическими цветными точками. В магических числах разбираться сил нет, но младший ниббл в рег. 0x11 не может быть 4: в битах VC1..VC0 кодируются чичсла [0..3]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexmiron31 0 17 октября, 2017 Опубликовано 17 октября, 2017 · Жалоба Простейшим признаком исправности интерфейса является получение "Production code" из рег 0x00. У вас чтение из него закомментировано: работает? 0x1121 было вычитано? Подозреваю (по опыту с Ilitek), что из самсунговского контроллера можно читать и из регистров "на запись" - способ проверки. Вот тут кроется очередная засада - чтение из любого регистра возвращает 0xD325. Я сначала грешил на криво написанную функцию, поэтому воспользовался готовой функцией из библиотеки HAL. Однако она вернула мне то же самое. И в окне памяти кейловского отладчика с определенного момента до адреса 0x60000000 - знаки вопроса, а вот начиная с этого самого адреса там именно 0xD325. Я, откровенно говоря, не самый большой спец по микроконтроллерам, поэтому вполне допускаю, что мог и дурака где-то свалять, но вот этого момента я откровенно не понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 18 октября, 2017 Опубликовано 18 октября, 2017 · Жалоба Тут ситуация простая: отладчик (JTAG, надеюсь, есть), осциллограф - добиться правильной работы параллельной шины. Кстати, Nucleo-STM32F743ZG гуглю неизвестна (; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexmiron31 0 18 октября, 2017 Опубликовано 18 октября, 2017 · Жалоба Тут ситуация простая: отладчик (JTAG, надеюсь, есть), осциллограф - добиться правильной работы параллельной шины. JTAG, к сожалению, отсутствует, осцил будет на следующей неделе :( Исходя из того, что я вчера накопал, есть подозрение, что я намешал обращение к регистрам, пока попробую копнуть в эту сторону. Кстати, Nucleo-STM32F743ZG гуглю неизвестна (; Может, я не совсем правильно написал. В общем, вот такая платка у меня - http://www.st.com/content/st_com/en/produc...leo-f746zg.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 18 октября, 2017 Опубликовано 18 октября, 2017 · Жалоба "The STM32 Nucleo-144 boards do not require any separate probe as they integrate the ST-LINK/V2-1 debugger / programmer." - всё у вас есть (; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexmiron31 0 18 октября, 2017 Опубликовано 18 октября, 2017 · Жалоба "The STM32 Nucleo-144 boards do not require any separate probe as they integrate the ST-LINK/V2-1 debugger / programmer." - всё у вас есть (; Нет, отладчик, само собой, есть, и я даже немножко в него умею:) А вот осциллографа сейчас под рукой нет. Вроде в кейле есть такая штука, как логический анализатор, только я когда-то так и не вкурил работу с ним. Видимо, если остальное не поможет, то придется и с ним разбираться до кучи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться