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
I’ve released updated versions of STM32 TFT Designer and STM32 OLED Designer, two desktop tools that let you lay out embedded display screens visually and export plain STM32 HAL C source/header files for STM32CubeIDE.New in STM32 TFT Designer: support for ILI9488 480 × 320 TFT displays.TFT controllers: ILI9488, ILI9341, ST7796, ST7789, and ST7735; XPT2046 and FT6336U touch support.OLED controllers: SSD1306, SSD1309, and SH1106 at 128 × 64, with incremental region updates for smooth live data.Visual widgets, image import, generated C/.h files, Windows and macOS support, and detailed PDF manuals.No middleware or RTOS required.The Lite editions are free and include one project screen with all other features enabled. Pro editions add unlimited screens ($35 OLED, $49 TFT, or $75 for the bundle).Downloads and purchase: https://carlosbarberis49.gumroad.com/productsTFT project and releases: https://github.com/carlosabarberis/STM32-TFT-DesignerOLED project and releases: https://github.com/carlo
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
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
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.
First i'll say what i have. I have folders name 34,35,37,38,39,42. Inside it has images adn every folder images start with 0. I have a folder name DWIN_SET. So inside that DWIN_SET it has 22_Config.bin,14ShowFile.bin, 13TouchFile.bin,32 icon library these are generated by me few mins back. Remaining files are old files which is already present. What i did is Open the DGUS software. and open .hmi which is present outside the DWIN_SET. after opening it shows a list of 6 images, among that first image is different, it is inbuilt someone kept that order, i didn;t change anything on this. I opened a folder named image, inside it has 32,34,35,37,38,39,42 folders and has some images on it . What i did open the 32 folder in ICL generator tool. Here i try to remove only one image which 0.png and replace it with another image present in different folder, but it failed. If i change one image remaining all iages also lost. So what i did is replace the image in the folder and then open it in icl to
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?
This is a small feature request to fix an annoying quirk of the TouchGFX Designer.When opening the texts menu in the designer, all of the texts groups are expanded by default. In projects with many texts/groups, its tedious to collapse all of the groups or scroll to the bottom of the expanded groups. I think it would be better if either TGFX stored the state of the groups expansion OR collapsed them all by default.
Hello ST Community,I am using STM32H7B3 + TouchGFX + 7-inch 800×480 TFT with GT911/GT9111 touch controller.In the TouchGFX PC simulator, all buttons and toggle switches work correctly. But after flashing to hardware:TFT display is working properly.Touch is detected.Actual touch point and detected touch point are different.Touch is detected on the same horizontal line, but the vertical coordinate is shifted/wrong.I want to know the correct solution for touch coordinate mapping/calibration. Should this correction be done. Please guide me on the correct method for touch calibration and hardware control/status display in TouchGFX.Thank you.
You can currently set tick rate using setVsyncInterval().I want to be able to get the tickrate using getVsyncInterval(). This would make timing things in the gui easier (blinking cursor, animation speed, boot logo, etc.). I made a topic about this earlier, but it got closed.
Currently image source files take up a lot of drive space.My image folder TouchGFX\generated\images\src is 44.5MiB on my drive.TouchGFX projects can take up a lot of drive space as is (https://community.st.com/t5/stm32-mcus-touchgfx-and-gui/gfxdesigner-option-to-auto-delete-touchgfx-folder-upon-exit/m-p/724758#M39655). So these files just add to it.You could use build scripts or cmake to add data from binary files to temporary source files. But this can be quite a hassle to make it platform independent. But that would save a lot of drive space as the binary files take up less space than source files with hex constants. (Example to use OBJCOPY)There are ways to shrink the source files. One way is to use uint64_t hex constants instead of uint8_t hex constants to reduce overhead.Before: LOCATION_PRAGMA("ExtFlashSection") KEEP extern const unsigned char image_test_image[] LOCATION_ATTRIBUTE("ExtFlashSection") = { // a x b RGB565 pixels. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
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.