Hi I am using a STM32H747 MCU with Embedded wizard.
and I am operating an LCD using LTDC not DSI.
Screen Flickering occurs every time the time is updated on the screen.
The LTDC settings are as follows.
#define LCD_HSYNC 5
#define LCD_WIDTH 1024
#define LCD_VFP 12
#define LCD_HFP 160
#define LCD_VSYNC 5
#define LCD_VBP 23
#define LCD_HEIGHT 600
#define LCD_SDRAM_ADDRESS 0xD0000000
#define LCD_HBP 160
#define PIN_LCD_Backlight_Ctrl_Pin GPIO_PIN_15
#define PIN_LCD_Backlight_Ctrl_GPIO_Port GPIOE
static void MX_LTDC_Init(void)
{
LTDC_LayerCfgTypeDef pLayerCfg = {0};
hltdc.Instance = LTDC;
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc.Init.HorizontalSync = 3;
hltdc.Init.VerticalSync = LCD_VSYNC - 1;
hltdc.Init.AccumulatedHBP = LCD_HSYNC + LCD_HBP - 1;
hltdc.Init.AccumulatedVBP = LCD_VSYNC + LCD_VBP - 1;
hltdc.Init.AccumulatedActiveW = LCD_WIDTH + LCD_HSYNC + LCD_HBP - 1;
hltdc.Init.AccumulatedActiveH = LCD_HEIGHT + LCD_VSYNC + LCD_VBP - 1;
hltdc.Init.TotalWidth = LCD_WIDTH + LCD_HSYNC + LCD_HBP + LCD_HFP - 1;
hltdc.Init.TotalHeigh = LCD_HEIGHT + LCD_VSYNC + LCD_VBP + LCD_VFP - 1;
hltdc.Init.Backcolor.Blue = 0;
hltdc.Init.Backcolor.Green = 0;
hltdc.Init.Backcolor.Red = 0;
if (HAL_LTDC_Init(&hltdc) != HAL_OK)
{
Error_Handler();
}
pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = LCD_WIDTH;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = LCD_HEIGHT;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
pLayerCfg.FBStartAdress = (uint32_t)LCD_SDRAM_ADDRESS;
pLayerCfg.ImageWidth = LCD_WIDTH;
pLayerCfg.ImageHeight = LCD_HEIGHT;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN LTDC_Init 2 */
LayerConfig = pLayerCfg;
/* USER CODE END LTDC_Init 2 */
}


The clock settings for LTDC are as follows, The configured clock frequency is 12.3MHz
( When I set the clock to around 51MHz, the screen is broken).
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLL3.PLL3M = 5;
PeriphClkInitStruct.PLL3.PLL3N = 160;
PeriphClkInitStruct.PLL3.PLL3P = 2;
PeriphClkInitStruct.PLL3.PLL3Q = 2;
PeriphClkInitStruct.PLL3.PLL3R = 65;
PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_2;
PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;
PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
The following is the configuration status of ewconfig.h
#define SDRAM_BASE_ADDR 0xD0000000
#define SDRAM_SIZE_BYTES 0x2000000
#define EW_DISPLAY_WIDTH 1024
#define EW_DISPLAY_HEIGHT 600
#define EW_FRAME_BUFFER_WIDTH 1024
#define EW_FRAME_BUFFER_HEIGHT 600
If the time is not updated, the screen is displayed normally. However, when updating, flickering occurs.
I want to get various things to check and solutions to solve the problem.
Please Help me.