Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
We wish to always improve our documentation. The best reviews and critics always come from the people that read it, so we would like to use this post to collect your thoughts and feedbacks. Please share what you like, dislike, what you think is missing, etc ... /The TouchGFX team
TouchGFX 4.26.1 is now out. Please follow this link to download it.This version is a patch release and includes bugfixes of issues seen on TouchGFX Designer 4.26.1 version, as well as adding support of the new STM32H5F5 and Chrom-ART 2.Please visit our dedicated website for STM32H5 graphics to know more about high performance graphics on our most powerful Cortex-M33 MCU. Release details: Release date: March 2nd, 2026 New TouchGFX Designer Features Allow selecting a CMakeLists.txt file as the project file without requiring a STM32CubeMX .ioc file. Bugfixes in TouchGFX Designer Fix caching issue when changing text configurations and re-generating code. Fix outdated timestamp on files when importing a GUI. Fix faulty code generation when a Shape widget has two identical end points. Fix faulty code generation when a Shape widget uses an "interaction ended" callback. New TouchGFX Generator Features Support for STM32H5F5/E5 and STM32H5F4/E4 series with the
When creating a UI project, you may need widgets that are not part of the TouchGFX library. To create your own graphical element, the TouchGFX team suggests using the Custom Container approach. Since TouchGFX 4.20 it is possible to export and import Custom Containers into different projects. The TouchGFX team is working on developing new custom containers that could be useful for our own projects. You will find them under this post. The first widget is a keyboard. We hope that the idea will please you and that it will be useful for your projects ;)! We invite you to do the same. In the guide attached you will learn how to create your own widgets and how to export them. We wish to create a space where the community can find and share custom widgets. To keep this space a good place for collaboration between all of us, we invite you to share your project in a zip format which includes you widget (.tpkg) and a short document explaining your widget. Your post needs
EnvironmentTouchGFX 4.26.1 (Engine + prebuilt library) LCD config: 8bpp, `LCD8bpp_ABGR2222`, 240x240 Reproduced on Windows simulator (MSVC), Linux simulator, and STM32U595 hardware. Same TouchGFX source across all three, so this is not platform-specific.SummaryWhen an ABGR2222 dynamic external bitmap is drawn with `LCD::drawPartialBitmap` and the source rect extends past the dirty (clip) rect on the Y axis, the clipping path writes the overhanging rows starting at the dirty rect's top (`dirtyRect.y`) instead of at the requested `screenY`. The result is a duplicated copy of those rows at the wrong vertical position.X-axis clipping is correct: `screenX` can be negative or off-screen with no issue. The defect is specific to vertical overhang. Trigger conditions (all must hold)Bitmap format `Bitmap::ABGR2222` (the other three 8bpp 2222 formats compile to identical code, so they are likely affected too) Bitmap registered with `Bitmap::dynamicBitmapCreateExternal` Drawn via `LCD::drawPartial
Hi! I have already trained my AI model using the STM32 Model Zoo Services, and the project is fully running on the STM32N6570-DK board. The model has been successfully deployed, and the object detection is working correctly with the camera.In parallel, I have also developed the graphical user interface using TouchGFX as a separate project. At this point, my goal is to integrate both projects into a single application: the TouchGFX interface and the AI inference application.I have read your article about integrating TouchGFX with the Camera Middleware, which was very helpful.However, I could not find information about integrating TouchGFX with an AI application generated from the STM32 Model Zoo Services.What I would like to achieve is the following workflow: the application starts with the TouchGFX interface, and when the user presses a button, the camera is initialized, the AI inference pipeline starts, and the model begins detecting objects in real time.Could you please advise on the
I made a custom board with STM32H7S7 , Touchgfx without OS, 2 framebuffers in psram(aps256xxn). At first ,after startthe debugging ,the display is normal,but after a while (random time),display is freezing. Then I pause the program,I foundit stuck at nema_wait_irq_cl. This is my screen:This is information when stuck:This project is a test project,the touchgfx code is simply rotate textureMapper1 and move red box on each frame
TouchGFX Designer: 4.26.0I cannot share the project to reproduce the bug unfortunately.I removed several custom containers in the Container tab. In several places in the Screens tab a yellow dot appeared for some now incomplete screen interactions (expected behavior). However, when generating sources/saving the project I got the following error```txt2026-07-16 14:45:05,342 [1] ERROR TouchGFXDesigner.App: Object reference not set to an instance of an object.System.NullReferenceException: Object reference not set to an instance of an object. at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(TriggerCustom t) at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Interaction i) at System.Linq.Enumerable.IListSelectIterator`2.ToList() at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Screen s) at System.Linq.Enumerable.IListSelectIterator`2.ToList() at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Application a) at TouchGFXDomainModel.LoadSave.Serial.ToSeri
Hello wonderful ST Community!Before I get into the question, a bit of background on this project. I'm creating a button panel HID gaming device for the space sim Elite Dangerous. Using its somewhat limited API I'm hoping to feed info about the game state back to a 9 inch screen on the HID device through USB CDC running composite with HID. Before I start getting into hardware dev I want to create a sim of the GUI to test two things:- size of display needed to show what I want to show- getting data out of the game (will be done with a USB CDC app/driver/python (I have not quite got this far) running on the host computer)It would be amazing to test these two aspects using the GFX simulator. I known it's theoretically possible to send data through some medium such as sockets but how does this work in practice?Is there some good documentation around how the simulator works and how I can feed data into my sims?I've been investigating using VSCode since GFX already has compatibility, but how
Hi all,I currently working on a project using TouchGFX, multiple tasks are using functions from <math.h> which are not re-entrant, so I have them mutex protected. The drivers using these functions are written in C.Does anyone know if the TouchGFX library uses any non re-entrant library functions? Do I need to be careful with anything I use in the application?Kind Regards,Anthony
The problem described in https://community.st.com/stm32-mcus-touchgfx-and-gui-33/duplicit-include-paths-are-added-to-keil-project-when-touchgfx-project-is-regenerated-151799 ist still there. The topic was closed a year ago and it seems that nothing happened since then.Please provide a solution!
Hi Community, We are exploring the migration of our FreeRTOS-based firmware to Zephyr. Our current design heavily relies on TouchGFX (provided by ST) for controlling an 800×480 touch display. Here are some key details of our setup: TouchGFX with external SDRAM for a double frame buffer using the FMC peripheral Images, fonts, and text stored in external QSPI Flash LTDC controller in use DMA2D accelerator enabled RGB image compression utilized Is there any sample application or detailed documentation available for achieving this on Zephyr? I have already briefly reviewed the following resources: Abstraction Layer Architecture | TouchGFX Documentation and https://support.touchgfx.com/docs/basic-concepts/operating-system#touchgfx-os-wrappers However, I need more guidance, specifically: Examples or reference projects for TouchGFX on Zephyr Detailed documentation on integration steps We have a tig
Request: Add an option to the ModalWindow to hide the modal when the shade is pressed. Also add a switch in the Properties panel in DesignerThis can be implemented as simply as: namespace touchgfx{class ModalWindow: public Container{public: ModalWindow: // ... shadePressedCallback(this, &ModalWindow::shadePressedCallbackHandler), shadeWasPressed(false), hideOnShadePressed(false) { backgroundShade.setClickAction(shadePressedCallback); windowContainer.setTouchable(true); } // ... // some setter/getter for `hideOnShadePressed` void shadePressedCallbackHandler(const Box &box, const ClickEvent &event) { bool pressed = event.getType() == ClickEvent::PRESSED; if (hideOnShadePressed && &box == &backgroundShade && shadeWasPressed && !pressed) { hide(); } shadeWasPressed = pressed; }protected: // ... Callback<ModalWindow, const Box&
Hi everyone,I am relatively new to the ST ecosystem, coming primarily from a web development and programmatic software background.I recently built a browser-based daily logic game tailored for my local market called hang 5. The core mechanics rely on a responsive visual letter grid, basic string matching for user inputs, and a specific vowel-penalty state machine.As a hobby project, I want to build a physical, standalone desktop version of this puzzle using an STM32 board and a small capacitive touch TFT display. I've been researching TouchGFX to handle the UI, as it seems more than capable of replicating the clean CSS grid layout I am currently using on the web version.Before I purchase my first board, I have two quick questions: Which STM32 Discovery kit would you recommend for a beginner wanting to utilize TouchGFX for a snappy, interactive 2D touch grid? The game requires a daily dictionary array of about 2,500 words. Is storing this plain text array directly in the internal flas
Dear all,I am writing to request assistance with activating an Ethernet connection between my PC and an STM32N657-DK development kit using NetX Duo.While my TouchGFX design is currently functioning correctly on the board, I am encountering issues when attempting to enable communication. Specifically, after flashing the Ethernet configuration, I am unable to successfully ping between the devices. I have attempted several troubleshooting steps but have not yet been able to resolve the connectivity issue.Please provide guidance or instructions on the proper configuration steps to establish this connection. Thank you so much.
Hello,When I right-click - create a new .c source file in a new STM32CubeIDE TouchGFX project, the file gets created in the STM32CubeIDE/Appli/Application/User/Core directory. However, all the project source files are under Appli/Core/Src and headers in Appli/Core/Inc. Is this normal and ok? Why have the separate source file locations?Thank you
TouchGFX version: 4.26.0Visual Studio version: 18.6.3When TouchGFX generates or updates the “TouchGFX/simulator/msvs/Application.vcxproj” file it creates lines with<ClCompile Include="path/to/some/file.cpp"/>but Visual Studio updates the lines to <ClCompile Include="path/to/some/file.cpp" />. Notice the extra space. This means that in version control sometimes commits will be added without the space and sometimes with the space. This overcomplicates merges and causes merge requests. Please update the XML library or fix the output to be consistent with Visual Studio.
Hello I’m developing long project.Tomorrow I open the project and try to save it without any modification,but appears this window Can someone please help me, thankyou in advance.
Hello everyone,I'm trying to interface a Waveshare 4.0" TFT Touch Shield (SKU13587) with an ILI9486 LCD controller using an STM32F767ZI.The display communicates over SPI, and the SPI bus is shared with the XPT2046 touch controller. At this stage I am testing only the LCD. The touchscreen is completely disabled and is not accessed by the software.HardwareMCU: STM32F767ZI Display: Waveshare 4.0" TFT Touch Shield (SKU13587) LCD Controller: ILI9486 Touch Controller: XPT2046 (not used during testing) Interface: SPI Current statusI wrote my own low-level ILI9486 driver.The following basic operations work correctly:LCD initialization Setting an address window Writing commands Writing data Drawing a single pixelA single pixel is always drawn at the correct position.ProblemThe problem appears only when I draw a filled rectangle (or any larger filled area).The rectangle itself is drawn correctly, but additional unwanted pixels appear beside the rectangle.The artifacts have some interesting cha
TouchGFX version 4.25.0 CubeMX version 6.17.4* STMCubeIDE version 2.0.0*edited versionI created a development environment starting with TouchGFX and used Generate Under Root in CubeMX. This did a great job of setting up the directory structure without links so that it is easier to navigate in the STM32CubeIDE application.Part of this process automagically moves the middleware and driver directories from the STM32CubeIDE directory to the root directory.When the .project file is created by the TouchGFX code generation it handles the movement of all these files and include directories like a champ, except the Properties=>C/C++ Build=>Settings=>MCU/MPU G++ Linker=>Libraries=>Library search path for the libtouchgfx-float-abi-hard.a library.It sets the path to "${workspace_loc:/STMCubeIDE/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc}" instead of "${workspace_loc:/${ProjName}/Middlewares/ST/touchgfx/lib/core/cortex_m7/gcc}"It's a quick fix to edit it to
Hi,first time TouchGFX user but not new to graphics programming and hoping to get some help understanding a TouchGFX problem I'm having on a Riverdi RVT50HQSNWC01-B I'm thinking of using for an automotive dashboard display.If I don't throttle my display changes, the display buffers don't have the same content. The buffer with the most complete looking content does have a small glitch towards the bottom right hand side of the RPM segmented display, so I'm guessing it's not as simple as TouchGFX didn't get around to doing all updates on both buffers but more like it ran out of space somewhere to manage the updates? I've tried putting invalidate()'s either side of making changes, as suggested in this (https://community.st.com/t5/stm32-mcus-touchgfx-and-gui/double-buffer-one-buffer-is-not-updated/m-p/165271#M9822) thread, but that doesn't help. The only thing that helps is to throttle updates inside the screen handleTickEvent() to every other tick (and not do them the first 3 ticks either
TouchGFX Version: 2.26.0Problem: preview in Designer looks different from generated code.Details: when moving a modal into an existing container, Designer does not draw the dimensions correctly. Steps to reproduce: Add a container that is smaller than the screen size and move to somewhere away from screen edges. Add a modal to the screen. Add a Box to the modal. Move the modal into the container. See the incorrect drawn modal. Switch between screens to force correct drawing.Workaround: in Designer, go to another screen, and then go back to the screen you were editing.See also attached images:
Hi everyone,I’d like to propose an enhancement for a future TouchGFX update.Currently, the clickable area of a ToggleButton is limited strictly to the dimensions of the button’s image. While this works in simple cases, it can be limiting in more practical UI designs.I suggest giving the ToggleButton a resizable clickable area, similar to the way the FlexButton works. Specifically, this would allow the developer to: Expand the clickable area independently via standard width and height properties. Freely position the toggle image within that area (just like an image placed inside a FlexButton). Use case example:Imagine a screen with multiple toggle options, each accompanied by explanatory text or an icon next to the button. With this feature, users could simply tap on the descriptive text or icon to activate the toggle, instead of having to precisely hit the small button image. This would significantly improve the user experience, especially on smaller screens or touch targets.I believ
Is this version do not copy touchgfx_core.a to project folder? ex) Middlewares\ST\touchgfx\lib\core\cortex_m4f\IAR8.xbecause I did generate code in touchGFX so automatelly remove the files in lib/core.and i can't build on IAR because .ipcf file generated from touchGFX desinger need touchgfx_core.a of path above.
Creating your own custom reusable containers has its limitations. One of the, in my opionion, largest drawbacks is that you are not able to set multiple sizes in Designer for the same container (e.g. in the same screen add a MyCustomContainer with size 31x731 and a MyCustomContainer with size 61x13). Currently there are three options:(1) new container for every new sizeCreate a new custom container for every size variation you have. Add an abstract base class that implements some of the common code and let every container extend that base class. Pro: in Designer you can see roughly how your component will look like for all of the sizes. Con: you still have to copy paste code between the different containers that are actually all identical except for their size. If you have a lot of different sizes, this option is not viable.(2) single container but all components are invisibleCreate a custom container with all of its child components hidden and “override” Drawable::setWidthHeight(int16
I’m a beginner with the STM32 series and STM32N6570-DK.I’m using ‘TouchGFX 4.26.1 Designer’ and ‘STM32CubeIDE 2.1.1’ and ‘STM32CubeMX’.First, I created a simple project for my STM32N6570-DK using TouchGFX. And, it displayed an image on the LCD normally.Next, to use the SD card, I configured the fileX and SDMMC2 settings using CubeMX.After that, when I regenerated the code using CubeMX, the LCD screen is not displaying properly. Is there a guide on how to use an SD card in a project created with TouchGFX?
ST Community highlights – April to June 2026
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.