2025-05-20 4:29 AM - edited 2025-05-20 4:32 AM
I'm experiencing a strange horizontal ghost/stripe effect mostly on light images (it's very visibile in text)
What could it be?
I'm using the STM32H7S78 microcontroller
Solved! Go to Solution.
2025-06-05 1:11 AM
Hi @GaetanGodart ,
It turned out to be the initialization of the oscillator in the SystemClock_Config.
Tuning RCC_OscInitStruct.PLL3.PLLR from 12 to 24 fixed the issue. Additionally, the touchscreen began to respond more effectively to touches.
2025-05-21 1:30 AM
Hello @nico23 ,
It looks like the issue doesn't only happen on text but also on the left of the flags.
Are you using a custom board or are you using the STM32H7S78-DK?
Regards,
2025-05-21 1:46 AM
Yes, it seems the issue happens on white/very bright pixels mostly
Yes, it's a custom board. These are the configurations for the display
static void MX_LTDC_Init(void)
{
/* USER CODE BEGIN LTDC_Init 0 */
/* USER CODE END LTDC_Init 0 */
LTDC_LayerCfgTypeDef pLayerCfg = {0};
/* USER CODE BEGIN LTDC_Init 1 */
/* USER CODE END LTDC_Init 1 */
hltdc.Instance = LTDC;
hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AH;
hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AH;
hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AH;
hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;
hltdc.Init.HorizontalSync = 3;
hltdc.Init.VerticalSync = 3;
hltdc.Init.AccumulatedHBP = 11;
hltdc.Init.AccumulatedVBP = 11;
hltdc.Init.AccumulatedActiveW = 811;
hltdc.Init.AccumulatedActiveH = 491;
hltdc.Init.TotalWidth = 819;
hltdc.Init.TotalHeigh = 499;
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 = 800;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = 480;
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
pLayerCfg.FBStartAdress = 0;
pLayerCfg.ImageWidth = 800;
pLayerCfg.ImageHeight = 480;
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 */
/* USER CODE END LTDC_Init 2 */
}
I'm using I-Cache with SCB_EnableICache and
static void MX_DMA2D_Init(void)
{
/* USER CODE BEGIN DMA2D_Init 0 */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB888;
hdma2d.Init.OutputOffset = 0;
/* USER CODE END DMA2D_Init 0 */
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN DMA2D_Init 2 */
/* USER CODE END DMA2D_Init 2 */
}
and GPU2D
static void MX_GPU2D_Init(void)
{
/* USER CODE BEGIN GPU2D_Init 0 */
/* USER CODE END GPU2D_Init 0 */
/* USER CODE BEGIN GPU2D_Init 1 */
/* USER CODE END GPU2D_Init 1 */
hgpu2d.Instance = GPU2D;
if (HAL_GPU2D_Init(&hgpu2d) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN GPU2D_Init 2 */
/* USER CODE END GPU2D_Init 2 */
}
is there a specific thing I should look into to see what's wrong with the rendering?
2025-05-21 2:06 AM
> (it's very visibile in text)
Which is basically proof that this is EMI / bandwidth related - the sections with the greatest signal contrast shows the greatest interference.
Display cable too long, or of insufficient quality ?
2025-05-22 12:02 AM
Hi @Ozone
I've done other tries.
It turnes out the issue appears when I use a full background image. When there's no background image, no issue is detected. Please see below
2025-05-22 1:28 AM
Hello @nico23 ,
Did you add an image or a box?
Can you try to add a box as a background? Try different colors.
What part of the display do you invalidate?
Regards,
2025-05-22 1:33 AM
Hi @GGODA
the background is an image.
In the latest two images, I've just generated the code. No user code is added.
I'll try with a box as background
2025-05-22 2:17 AM
I am not a hardware expert, but besides of external (cabling) issues, the display itself might be of low quality.
I very well remember "old" times, about a decade ago or more, when prolonged use of a terminal with static content did "burn in" this image, and a shadow of said image remained when the content changed.
This was very common with displays and operation terminals on industrial machinery running 24/7.
For a test, you could try vertical bars of different contrasts (colors) and width, to check the display visually.
A simple example would be black/white or blue/yellow.
I wouldn't be surprised if the visibilty of this bleed-over effect increases with change in magnitude of the individual pixel components (R/G/B).
2025-05-22 4:36 AM
I did not want to assume a cheap display but that is also what it made me think of.
We could verify whether it is the display's fault by trying the same GUI on a different display if you have one.
Regards,
2025-05-22 6:43 AM
Well, there is still the possibility of insufficient cabling, or you don't meet the requirements / specificiations of the display. Even an inappropriate power supply (for the display) can cause issues.
I would consult the responsible hardware guy, assuming you have one (and it is not you ...).