cancel
Showing results for 
Search instead for 
Did you mean: 

Flickering issue on STM32F769NI

Shree
Associate II

Hi ,

I am working with STM32F769NI based custom board with 7" display of 800 x 480 resolution. I am experiencing the flickering effect whenever I am trying to update the screen content with digital clock updated at every 1 sec.

Please find the below video link for your reference

https://youtu.be/Cj5yvzDTxf4 

Request you share your suggestions to rectify this issue.

Regards,

Shree

/**
  * @brief DMA2D Initialization Function
  * @param None
  * @retval None
  */
static void MX_DMA2D_Init(void)
{
 
 
  /* USER CODE BEGIN DMA2D_Init 0 */
 
 
  /* USER CODE END DMA2D_Init 0 */
 
 
  /* USER CODE BEGIN DMA2D_Init 1 */
 
 
  /* USER CODE END DMA2D_Init 1 */
  hdma2d.Instance = DMA2D;
  hdma2d.Init.Mode = DMA2D_M2M;
  hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
  hdma2d.Init.OutputOffset = 0;
  hdma2d.LayerCfg[1].InputOffset = 0;
  hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
  hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  hdma2d.LayerCfg[1].InputAlpha = 0;
  hdma2d.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA;
  hdma2d.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR;
  if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN DMA2D_Init 2 */
 
 
  /* USER CODE END DMA2D_Init 2 */
 
 
}
 
/**
  * @brief LTDC Initialization Function
  * @param None
  * @retval None
  */
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_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  hltdc.Init.HorizontalSync = 127;
  hltdc.Init.VerticalSync = 1;
  hltdc.Init.AccumulatedHBP = 215;
  hltdc.Init.AccumulatedVBP = 24;
  hltdc.Init.AccumulatedActiveW = 1015;
  hltdc.Init.AccumulatedActiveH = 504;
  hltdc.Init.TotalWidth = 1055;
  hltdc.Init.TotalHeigh = 524;
  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_RGB888;
  pLayerCfg.Alpha = 255;
  pLayerCfg.Alpha0 = 0;
  pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  pLayerCfg.FBStartAdress = 0xC0000000;
  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 */
 
 
}

1 REPLY 1
Alexandre RENOUX
Principal

Hello,

What are you updating on the screen every second ? It looks like you have two Texture mappers (but might be something else).

Please try modifying your GUI from simplest to more demanding to see if it appears all the time. You are using an F7 with a 800x480 display which is considered a big screen for the F7. So depending on how much you render each time this can put heavy load on the MCU.

/Alexandre