2026-04-08 6:16 AM
Hello everyone,
I am developing a UI using TouchGFX on a custom board based on the STM32F767. I am encountering visual artifacts during screen updates.
As seen in the attached video:
In the date selection wheel, the text overlaps, tears, and leaves ghosting artifacts during scrolling.
The first menu ("Date & Time", "Language" etc.) is inside a ScrollableContainer with a ListLayout. Initially, the text is corrupted. However, as soon as I scroll this container, the artifacts disappear completely and the screen draws correctly.
System Info:
MCU: STM32F767
GUI: TouchGFX (Version: [Sürüm] )
Memory: Framebuffer is located in [SDRAM vb.]
Configuration: MPU is ENABLED, D-Cache is ENABLED.
What could be causing this issue? Any suggestions on which configurations or settings I should check?
Thank you!
2026-04-13 7:08 AM
Any suggestions on this? Still looking for a solution. Thanks in advance!
2026-04-13 7:51 AM - edited 2026-04-13 7:52 AM
GPT says:
this is a very typical TouchGFX issue, and the symptoms you describe point quite strongly to framebuffer / cache / invalidation problems, not a widget bug.
Let’s decode your two observations:
Classic sign of:
This is the big clue.
It usually means:
The screen is not properly initialized or invalidated, and scrolling forces a full redraw → fixing it temporarily.
The F7 has data cache, and TouchGFX uses DMA.
If you don’t manage cache properly:
You must ensure cache clean before DMA reads framebuffer:
Typical places:
Or enable TouchGFX cache handling:
Also check:
If framebuffer is in:
It should be in:
TouchGFX relies on dirty rectangles.
If something isn’t invalidated:
If using:
Check:
If LTDC reads while DMA2D writes:
→ tearing / partial updates
Ensure:
Scrolling a ScrollableContainer:
That’s why it suddenly looks correct
:warning:D-Cache not cleaned before LTDC/DMA reads framebuffer
This EXACT pattern:
In TouchGFX HAL:
2026-04-17 3:58 AM
Hello Trampler,
Based on your video, I think it looks like you are missing some screen area validation in you GUI code. When you do standard animations in TouchGFX, like e.g. scrolling a list, the framework knows that it needs to redraw the relevant area in the framebuffer. But when you manually manipulates widgets in GUI code, like changing the color of your text area, you need manually tell the framework to redraw this area. This is normally done by calling the invalidate method for the relevant widget, e.g.: myTextArea.invalidate().
For testing, you can try just directly calling invalidate() every tick or everytime you change something. This will invalidate the entire and thereby quickly reveal if the issue is related to invalidation. This should however only be used for testing, since redrawing the entire screen all the time can slow done performance a lot.
Best regards
Peter