2025-09-16 1:44 AM - last edited on 2025-09-16 1:50 AM by Andrew Neil
Hi,
I am working with an STM32F769 MCU driving a 480×272 RGB565 TFT display through LTDC.
Architecture:
Framebuffer in external SDRAM (IS42S16800F-7TL, 16 MB) connected via FMC.
LTDC + DMA2D used for graphics update (TouchGFX).
I²C + DMA used to read/write parameters on an external FRAM.
System managed with FreeRTOS.
Problem:
When a long I²C DMA transfer is running (FRAM read/write for parameter storage), I see horizontal glitches on the display: objects temporarily shift to the right (as if some pixels were missing).
The curious part is that the phenomenon only happens if I change the initialization sequence in main() from this:
MX_LTDC_Init();
HAL_Delay(1000); // avoid flickering on display
MX_TouchGFX_Init();
HAL_Delay(200); // avoid flickering on display
osKernelInitialize();
…to this:
MX_LTDC_Init();
HAL_Delay(1000); // avoid flickering on display
MX_TouchGFX_Init();
HAL_Delay(200); // avoid flickering on display
__NOP(); // added
__NOP(); // added
osKernelInitialize();
adding only 2 _NOP();
really can’t explain why just adding, in this init sequence, two NOP instructions makes the glitch appear.