2021-09-17 05:58 AM
I am using TFT LCD + LTDC + STemWin in STM32F429IG with external SDRAM. I have enabled multi buffering to reduce the flickering effect. Then it works fine. But after a continuous run time of more than a day the system is running al the freertos task is running but the LCD display freezes. I have increased the memory of STemWin but still the problem exists.
Can anyone help me on this.
Note : I use CubeMX to generate the project.
2021-09-17 06:11 AM
Not sure I'm aware of a reason why the hardware would fail, assume you're going to have to debug the software
You'll likely need to output diagnostics/telemetry to understand failure.
Do sanity checking on stack and heap, and alert when memory allocations fails.
Watch for resource leaks.
Perhaps have different tasks write words directly into the frame buffer so some pixels can be used as a heart-beat to prove the LTDC and LCD are actually alive and well.
2021-09-17 06:14 AM
Thank you for your input. Will try.
2021-10-22 11:22 PM
Hi, I have debugged and figured the problem is with the multibuffering, When I disabled it, LCD is working fine. I tried with both 2 and 3 buffers but the problem exist. Don't know what to do?
Could anyone help me on this?
2021-10-22 11:25 PM
The below code is my configuration,
#define XSIZE_PHYS 800
#define YSIZE_PHYS 480
#define NUM_BUFFERS 3 /* Number of multiple buffers to be used */
#define NUM_VSCREENS 1 /* Number of virtual screens to be used */
#define COLOR_CONVERSION_0 GUICC_M565
#define DISPLAY_DRIVER_0 GUIDRV_LIN_16
#define LCD_LAYER0_FRAME_BUFFER ((uint32_t)0xc0000000) /* LTDC Layer 0 frame buffer */
void GRAPHICS_HW_Init(void)
{
MX_FMC_Init();
MX_SDRAM_InitEx();
MX_LCD_Init(); /* LTDC struc, layer struct */
MX_DMA2D_Init();
DMA2D_Init();
}
void GRAPHICS_Init(void)
{
/* Initialize the GUI */
GUI_Init();
WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
// WM_SetCreateFlags(WM_CF_MEMDEV);
HAL_LTDC_ProgramLineEvent(&hltdc, 0);
/* USER CODE END WM_SetCreateFlags */
}