Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
Dear ST Community Team,I am working on a project using the STM32N657X0H3Q1 MCU with TouchGFX for GUI development.After configuring TouchGFX and generating the code, I am encountering RAM and ROM overflow errors during the build/link stage.Hardware configuration:MCU: STM32N657X0H3Q1External RAM: S80KS5123GABHB020External Flash: S28HS512TGABHM0100Both the external RAM and external Flash are connected externally on the board and are intended to be used for the TouchGFX application.Issue description:After TouchGFX configuration and code generation, the linker reports errors such as:Internal RAM overflow (data/bss/heap/stack)Internal Flash (ROM) overflow due to TouchGFX assetsIt appears that TouchGFX frame buffers, heap, or graphic assets are still being placed in internal RAM/Flash, instead of using the available external RAM and external Flash.Questions / support needed:How should external RAM (S80KS5123GABHB020) be configured so that:TouchGFX frame buffersHeap and large buffer are alloca
I try to use TouchGFX with FreeRTOS, and one of the many problems I found, is thath the screen is nod refreshed because Thread (TouchGFX_Task) is waiting inside OSWrappers::waitForVSync, but VSync is disabled in configuration. I'm missing something? I followed all the steps in the tutorial (https://support.touchgfx.com/docs/development/touchgfx-hal-development/scenarios/scenarios-configure-rtos) but seams doesn't working. I'm using an SPI display, the project is for M7 core on STM32H755
Hello, I'm looking for an example with TouchGFX and AZRTOS / Azure RTOS (and USB). I'm using a customer board with STM32H7S, LCD and USB. For USB applications, AZRTOS / Azure RTOS seems more suitable to me.Does anyone know of an example or instructions? Dear ST employees, It would be great if TouchFX could optionally generate code without RTOS.
Hello, I have an issue with my touchGFX gauge. First, let me explain what I want to do and how I currently do it. What I want is receiving data from the CANbus which is a command for the gauge to which position the needle needs to point (same as a car). These commands are direct and if I write it directly to the GUI it jumps positions. It needs to move smooth to that position. What I have now is:I receive CAN message with an interrupt. The received CAN message I put in a FreeRTOS queue.From a CanTask I extract the data from the CAN message that is relevant to me and is put in a other queue (aziQueue).In the Model.cpp tick funtion I first had this:if (osMessageQueueGetCount(aziQueueHandle) > 0) { if (osMessageQueueGet(aziQueueHandle, &aziTarget, NULL, osWaitForever) == osOK) { azi = (uint16_t)filter(aziTarget); modelListener->aziUpdate(azi); } } This was blocking the GUI, because the CAN message was send every 100ms on the bus so it slowed down the GUI upda
Hi everyoneI am looking for a tutorial on: how to integrate your code in TouchGFX with some used case examples such as ON/OFF control of an LED or sending data over serial port to Putty terminal on PCI am using the following Board:STM32F469I-DISCO
Hi, I’m working with an STM32H7S78-DK board and I want to replace the current display with a new one that has a resolution of 480x272. I’d like to know if this is possible, and if so, what steps or considerations I need to follow to make it work properly. Any guidance on configuring the MCU, adjusting the display driver, or handling any hardware/software changes would be really helpful. Thanks!
Hello,I am using an STM32H747I-DISCO with the MB1166-A09 display and a standard TouchGFX project.I want to run the board as USB Host on CN1 (USB OTG HS, ULPI PHY) and connect a USB Full-Speed device (STM32H503 Nucleo running in device mode).VBUS is forced ON via ULPI_D0 and works fine in a non-TouchGFX project.However, as soon as I add USB Host to a TouchGFX project:The display becomes blackTouchGFX no longer rendersCubeMX reports conflicts with FMC (SDRAM) when USB OTG HS is enabledTouchGFX works without USB, and USB works without TouchGFX, but not together.It looks like USB HS (ULPI) and TouchGFX (DSI + SDRAM) conflict, possibly due to clocks or FMC being partially disabled.Question:Are there any reference projects or examples where TouchGFX and USB Host on CN1 coexist correctly on STM32H747I-DISCO?Is this a known limitation?Thanks in advance.
Hello,I am using the STM32U5G9ZJTXQ with TouchGFX on a 4.3-inch display (480×272). The display works fine, but the touch is not working. The touch controller IC is GT911.
Hello,I'm facing a issue with DMA2D to blend some images.From the naming ARGB means that the order of the colors should be Alpha, Red, Green and Blue.But if I have a PNG file which contains my image with Alpha, how I have to convert to a static image for my MCU to be able to work correctly with it with DMA2D?Normally PNG is using RGBA format in big-endian. But if I'm converting this file to ARGB format and try to blend it over another image, it will work?Also I'm confused with endianess, because I know that ARM normally is using little-endian.Which is the best approach to load the image?A struct like this:typedef struct { uint8_t A: 8; uint8_t R: 8; uint8_t G: 8; uint8_t B: 8; } ARGB_TypeDef; typedef struct { const uint16_t width; const uint16_t height; ARGB_TypeDef *data; } FCU_Labels_TypeDef;Should work with DMA2D which requires uint32_t data for source and destination?Thanks.
Hello!I am currently troubleshooting an issue on a customized board based on the STM32F469IIT6 MCU. The board leverages MIPI-DSI Video Burst Mode to render a TouchGFX UI on the display.The problem manifests as follows: the display works perfectly normal when the video signal initializes, but the image intermittently shifts within 5 minutes after power-on.I have captured the MIPI-DSI video signal using an oscilloscope for analysis. The results indicate that the synchronization signal of the DSI output remains stable as expected, while a noticeable delay occurs in the pixel data transmission — which is the direct cause of the image shifting issue.I had confirmed that the registers of the DSI and LTDC wasn't changed before and after the shift. The DSI and LTDC shows no warnings or errors.What could be the root cause of this? Is there any solutions?You can find the shifted image displayed and the wave captured in the attachment.
Hi there,I am quite new to this embedded platform. I am trying to work on enabling uart7 on the STM32H7S78-Discovery kit, while working on this display GUI using touchgfx designer 4.26.0. After scouring through some videos it is recommended to open up .ioc configuration file using STM32cubeMX to enable the peripheral (e.g uart7). However after generating code and using STM32cubeIDE to flash the H7S78 discovery kit the screen goes blank after reset button was pushed. Could you advice what is the right workflow with touchgfx -> STM32cubeIDE and STMcubeMX (to enable peripherals) -> back to touchgfx to further add/change touch buttons etc
I am trying to get my own DSI and LTDC code to run on STM32H757I-EVAL in preparation for custom hardware. In parallel, I am trying to get the example code to run (see this thread).I've made some progress with my own code by reading AN4860 and following the steps "34.14 Programming procedure" in RM0399. I copied OTM8009A_init() from TouchGFX example code and adapted it to my code. I can successfully configure the panel and sending panel on/off commands has the desired effect.When I step over OTM8009A_init(), the display shows blocks of noise (see image below). As soon as LTDCEN is set in LTDC_GCR, all LTDC register values change to 0x2220. Is this normal?It never seems to read from my RAM buffer, and I never get anything else on the screen. I also find it strange that if the code is stopped just after CMCR is cleared, then the noise is not on the screen.I've read many forums of DSI and LTDC issues, and clock timing seems to be one of the biggest culprits but I've double-
I am experiencing quite a weird behavior on my STM32F429I-DISCOVERY board when trying to use SDIO module: If I use SDIO (1 wire) without DMA, it works fine, writes and reads. Also works in combination with my main application (TouchGFX, ADCs+DMA, 1 FreeRTOS task - besides TouchGFX and USBH task, USB OTG Host). However, if i configure my SDIO to work with DMA2 (Stream3 (TX) - Stream6 (RX)), it does write what i want, but it fails to trigger the DMA Interrupt at the end, leading to a DMA Error Flag being set and no Interrupt at end of transmission being triggered.So I've created a test-code right after all MX_...Init(); initialization functions, but before osKernelInitialize() and also before FreeRTOS task even get created. Same behavior: SDIO works, SDIO+DMA doesnt. Then, it comes the surprise: if I comment MX_TouchGFX_Init();, then it does work. I thought it could be some timing issue or configuration being messed up, but changing orders didnt solve.Then I realize the following: c
I am getting a issue with simulating touchgfx projects. These are the steps I followed.Create a working touchgfx project from cubeide. (This one works/simulate without an issue)Push the project to git.Clone the project to another locationOpen touchgfx and try to simulate.I am getting this error when i try to simulate.Run Simulator Generate Done Generate Assets make -f simulator/gcc/Makefile assets -j8 generated/simulator/gcc/Makefile:215: recipe for target 'images' failed process_begin: CreateProcess(NULL, ../Middlewares/ST/touchgfx/framework/tools/imageconvert/build/win/imageconvert.out -r assets/images -w generated/images, ...) failed. make (e=2): The system cannot find the file specified. make[1]: *** [images] Error 2 simulator/gcc/Makefile:32: recipe for target 'assets' fa
Hi all,I used STM32H7S78-DK and everything was fine: I was able to load and flash the "HVAC Iot Demo" from TouchGFX Designer at the first time and develop my application using STM32CubeIDE.Then I bought an STM32N6570-DK and did the same procedure as before, but I was not able to flash that demo.I can successfully generate the code inside the TouchGFX Designer (version 4.26.0) but, when I push the button "Program and run target", I get this kind of error: Erasing memory corresponding to segment 0:Erasing external memory sector 0Error: failed to erase memoryError: failed to erase memoryc:/TouchGFXProjects/STM32N6570DK/IotDemo/MyApplication/gcc/include/flash_sections_int_ext.mk:18: recipe for target '_fsblflash_' failedmake[2]: *** [_fsblflash_] Error 1makefile_fsbl:45: recipe for target 'flash' failedmake[1]: *** [flash] Error 2../../gcc/Makefile:8: recipe for target 'flash' failedmake: *** [flash] Error 2FailedFailed Can anyone please help me?
Hi everyone, I've setup a project in TouchGFX4.18.1 and STM32H747i Disco, which consist of 4-5 screens. One screen is for motor control. In this motor control screen 3 buttons are used (low, medium, high) for changing the PWM. Simple but, the virtual function at the model (MVP) is calling the wrong Function. The funny thing is, the order that a function is placed in the .HPP yields that the function to be called in model and it's not the correct function. I've used breakpoints throughout MVP, and all was validated as making the incorrect/correct call. virtual void PWM_33(); (if PWM_33 is placed on the bottom, PWM_66 would be called for every button.) virtual void PWM_66(); (same as the above) virtual void PWM_75(); (same as the above) This is the third time I've made the to change to the buttons that only yield the same results. Otherwise, each function call reverts to the order in .HPP. This area (stepping from VIEW, Presenter to Model not possible
Hello everyone,I’m working on a custom board based on the STM32L4R9 with a 2.1" round 480×480 display from Newhaven, which uses the ST7701S controller. My goal is to get it running with MIPI DSI / LTDC and TouchGFX.So far, I’ve managed to display a solid color by manually filling a framebuffer. However, once I integrated TouchGFX and started rendering shapes, the lines appeared shifted. This makes me think the issue is related to timing parameters (HSYNC, VSYNC, VBP, VFP, HBP, HFP).The problem is that the display datasheet doesn’t provide typical timing values. I contacted Newhaven’s support, and they shared example code for the same panel but using the SSD1963 controller. Unfortunately, using those values didn’t work. Looking deeper into their example, I noticed that the comments mention one set of values, but the actual register settings differ. When I reached out again, they simply said the comments might be wrong, but the code should work. Not very helpful.Here is the example that
When I attempt to create a new project with TouchGFX Designer 4.18.0 using the STM32F469I Discovery as a board setup, the Create button gets to 88% and then consistently fails with the message "Error: Cannot create a file when that file already exists."The message seems completely misleading though. It also asks me to look at the TouchGFXDesigner.log for additional info. That log tells a completely different story. Roughtly halfway through the logfile, I find:2021-10-27 14:57:50,354 [10] INFO Utils.WebHandling.WebHandler: Downloading washer_demo_image_02.png2021-10-27 14:57:50,526 [10] INFO Utils.WebHandling.WebHandler: Downloading washer_demo_image_03.png2021-10-27 14:57:50,713 [10] INFO Utils.WebHandling.WebHandler: Downloading STM32F746G-DISCO_washerdemo.png2021-10-27 14:57:50,869 [10] INFO Utils.WebHandling.WebHandler: Downloading washer_demo_image_02.png2021-10-27 14:57:51,041 [10] INFO Utils.WebHandling.WebHandler: Downloading washer_demo_image_03.png2021
I followed and reproduced the video https://youtu.be/NFljjd_vQGA.I reproduced it using an STM32F429I-DISC1 module, and it works.In Windows Explorer, among the files created by the TouchGFX generator, you can see the file tree of a CubeIDE project: /core, /drivers, /middleware, etc.However, the IOC file does not have the same name as the project.When you double-click on the .project file (as shown in the video, in the STM32CubeIDE folder),inside the CubeIDE environment you see a different file tree compared to Windows Explorer:The project name has become: STM32F429I_DISCO_REV_D01No /core/src and /core/inc foldersmain.c is located in /application/userNo main.hNo link to open TouchGFX Designeretc.What should be done to get back to a “standard” CubeIDE project?
Hi,There is a documentation about Using TouchGFX on Linux but with TouchGFX 4.26 there is something missing to be able to build the simulator on Ubuntu 24.04.TouchGFX 4.26 embeds Ruby 3.0.0 and Ubuntu 24.04 provides Ruby 3.2.TouchGFX 4.26 generates Ruby scripts with a method 'exists?' which gives an error on Ruby 3.2Using this command:sed -i 's/exists?/exist?/g' $(find Middlewares/ST/touchgfx -type f)I was able to do a sucessful:make -f simulator/gcc/Makefileon Ubuntu 24.04.ST, can you update your scripts to be compatible with Ruby 3.2 for TouchGFX 4.27 ? Thank you
don't want to start a touchgfx project from cubemx, instead from cubeide!
一. Relevant hardware and software versionsThe hardware I am using is STM32H750, including on-chip RAM and QSPI flash. The screen resolution is 480x272 with a RGB interface screen, and the color format is RGB565. The LCD buffer and TouchGFX buffer are located in AXI RAM. The Cubemx version is 6.15 and the TouchGFX version is 4.26.二. Regarding the issues I encounteredI tried several 480x272 examples available on touchgfx. I found that there was some image loss in this simulation clock example and texture mapping example, but I was able to complete the task using other examples. I would like to ask everyone what's going on here, or if there are any suggestions for solutions.tains some relevant pictures.
Perhaps someone can help me with regard to creating a TBS please.I created a TBS following the instructions here https://support.touchgfx.com/docs/development/scenarios/scenarios-create-atI'm using TouchGFX V 4.26.0 so I altered the instructions given for V.4.25.0 accordingly.Apart from some confusion over the naming of the JSON file which always reverts to 'MyApplication' following the pack command, the TBS that I created worked.I then went on to create a second TBS for a different set up. However this one didn't work, and the first TBS that I had created stopped working. (I must add at this stage that I don't recall changing anything that related to the first TBS when I created the second but I honestly can't be sure).The error I get is 'Download of 'MyAppicationName' failed, this is shown highlighted in the screenshot below at the bottom right. My two TBS's are highlighted with red star. The first TBS I created is named '4-inch-Circular', and the second 3.45 inch starter projec
Hi!I'm currently working on a game for a st32U5 which is 80 MHz and I don't believe has any H.W. acceleration (right?) and I want to minimize the CPU workload.I'm currently manually making an image move, by changing the position at 30Hz. I'm considering using an animation class, but I am worried that If I use the animation class it would then move at my touchGFX FPS (60Hz) and cause more CPU workload.If using an animation is more efficient, then I suppose I won't worry about it.
I have come back to TouchGFXDesigner after not using it for about 6 months. I have updated to 4.26.0 and created a new blank project for the STM32H747I-DISCO board. When trying to generate code, I get the following error message:Generate CodeGenerateDoneGenerate Assetsmake -f simulator/gcc/Makefile assets -j8'M' is not recognized as an internal or external command,operable program or batch file.FailedFailedLooking through the Makefile, I can't see anywhere that this 'M' would be generated, and make isn't overridden in my environment variables.
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.