Skip to main content
Associate II
October 1, 2025
Question

LCD shift during display

  • October 1, 2025
  • 1 reply
  • 197 views

BeforeBeforeAfterAfterHello everyone.
I am in a tough situation when the LCD shift during display without touching the board as some pictures above:

I am using STM32F469ZIT6 and SDRAM IS42S16400J-6TLI. Here is the configuration: 

static void MX_FMC_Init(void)
{

 /* USER CODE BEGIN FMC_Init 0 */
 /* USER CODE END FMC_Init 0 */

 FMC_SDRAM_TimingTypeDef SdramTiming = {0};

 /* USER CODE BEGIN FMC_Init 1 */
 /* USER CODE END FMC_Init 1 */

 /** Perform the SDRAM1 memory initialization sequence
 */
 hsdram1.Instance = FMC_SDRAM_DEVICE;
 /* hsdram1.Init */
 hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
 hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
 hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
 hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
 hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
 hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
 hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
 hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
 hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
 hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
 /* SdramTiming */
 SdramTiming.LoadToActiveDelay = 2;
 SdramTiming.ExitSelfRefreshDelay = 7;
 SdramTiming.SelfRefreshTime = 6;
 SdramTiming.RowCycleDelay = 7;
 SdramTiming.WriteRecoveryTime = 2;
 SdramTiming.RPDelay = 2;
 SdramTiming.RCDDelay = 2;

 if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
 {
 Error_Handler( );
 }

 /* USER CODE BEGIN FMC_Init 2 */
 /* USER CODE END FMC_Init 2 */
}

void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount)
{
 __IO uint32_t tmpmrd = 0;

 /* Step 1: Configure a clock configuration enable command */
 Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
 Command.AutoRefreshNumber = 1;
 Command.ModeRegisterDefinition = 0;

 /* Send the command */
 HAL_SDRAM_SendCommand( &hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 2: Insert 100 us minimum delay */
 /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
 HAL_Delay(1);

 /* Step 3: Configure a PALL (precharge all) command */
 Command.CommandMode = FMC_SDRAM_CMD_PALL;
 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
 Command.AutoRefreshNumber = 1;
 Command.ModeRegisterDefinition = 0;

 /* Send the command */
 HAL_SDRAM_SendCommand( &hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 4: Configure an Auto Refresh command */
 Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
 Command.AutoRefreshNumber = 8;
 Command.ModeRegisterDefinition = 0;

 /* Send the command */
 HAL_SDRAM_SendCommand( &hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 5: Program the external memory mode register */
 tmpmrd = (uint32_t) SDRAM_MODEREG_BURST_LENGTH_1 |\
 SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\
 SDRAM_MODEREG_CAS_LATENCY_3 |\
 SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
 SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

 Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
 Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
 Command.AutoRefreshNumber = 1;
 Command.ModeRegisterDefinition = tmpmrd;

 /* Send the command */
 HAL_SDRAM_SendCommand( &hsdram1, &Command, SDRAM_TIMEOUT);

 /* Step 6: Set the refresh rate counter */
 /* Set the device refresh rate */
 HAL_SDRAM_ProgramRefreshRate( &hsdram1, RefreshCount);
}

 Refresh count equals 683 and clock for SDRAM is 90MHz

Can anyone help me? Thank youimage.pngimage.png

1 reply

Explorer
October 1, 2025

the display is in the middle of the image for anyone can not see it