Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
I have 4 screens in my application and I want to change screens from code. For instance, I have a dynamic list of item in a View and, depending on which element is currently selected, at the press of a button it should take to another screen.I generated the methods to change screen by setting Interactions from Designer FX that I know for sure they will not be triggered. So a simple `application().gotoMyScreenNoTransition()` in the same View should work.However, when writing the method inside the View to call from the Presenter, I see that the applications blocks on the function `makeTransition`. I don't even execute that methods that changes screens, simply writing the code to do that seems to block the whole process.This is where I get blocked:Remind that I don't even define the transitions by myself, so I should not edit the FrontendHeap, should I?
Hi all,I'm working with the STM32F769I-DISCO board and using TouchGFX for GUI development. When I build and flash the project through STM32CubeIDE, everything works fine — the LCD displays as expected.However, when I flash the generated .hex file using STM32CubeProgrammer, the board resets and runs, but the LCD stays blank. I’ve verified that the program is running (e.g., with an LED), but no graphics appear.Here’s what I’ve already done:SDRAM is initialized via MX_FMC_Init(), and it calls BSP_SDRAM_Initialization_Sequence().LCD and DSI are initialized in MX_LTDC_Init() and MX_DSIHOST_DSI_Init().TouchGFX is initialized using MX_TouchGFX_Init().The framebuffer is mapped to SDRAM (0xC0000000).Boot config and option bytes are correct (BOOT from main flash).The .hex and .bin are both generated and tested — same issue.Backlight GPIO is set high manually.It seems like CubeIDE is doing something extra that CubeProgrammer does not — possibly initializing QSPI, DSI, or loading something into RA
I test app on U599. GUI task priority set little low as hw task. After flash all works ok, but after powering start gui glitch on SVG fade animation or other redraw.After swap priority GUI up all works ok. Why this after flash difference occurs?
Right now hardware buttons work the following way:The TouchGFX engine checks if the button value matches the trigger set up in the designer in the generated method of the screen view base handleKeyEvent().In target hardware the method Sample() of your button controller (base class touchgfx::ButtonController) is called by TouchGFX engine. In simulator the vent SDL_TEXTINPUT is used. If you hold a key the event will happen in rising edge of the key press and then re-occur periodically if you hold it down, because the keyboard event repeats.Using SDL_KEYUP would make more sense as touch button widgets also produce a pressed event on falling edge of button press (button release).You cannot read the values the engine gets from the target hardware or simulator in the model directly. You would have to send them from view to presenter to model and do that for each screen. This is tedious.Alternatively you can retrieve the HAL instance and sample again:uint8_t key
ST official UI samples are running with external SRAM of STM32H750B-DK, but if use internal SRAM , how to adjust the configuration ??? I try to remove external SRAM configuration inner STM32CUBE MX , but it's fail , anybody have this sample to be released ?
I have placed several Image widgets in my Swipe Container, now I want the image widget to support clicks and call my function, how can I make it?I have tried to inherit from the Image widget and implement handleClickEvent, however it doesn't implement the click event that I want.My code:#include <touchgfx/widgets/Image.hpp> #include <touchgfx/Callback.hpp> #include <touchgfx/Utils.hpp> class ClickableImage : public Image { public: ClickableImage() : Image(), clickAction(0) {} virtual void handleClickEvent(const ClickEvent& event) { touchgfx_printf("img click\n"); // Not run if (event.getType() == ClickEvent::PRESSED) { if (clickAction && clickAction->isValid()) { clickAction->execute(*this, event); } } Image::handleClickEvent(event); } void setClickAction(GenericCallback<const ClickableImage&, const ClickEvent&>& callback) { clickAction = &callback; } private: GenericCallback<const ClickableImage&,
We're currently investigating issues with our scroll list regarding the selection of an element.Scrolling works fine (resistive touch with ~4k points in each direction on an 480x272px screen). But if you want to select an item, on most occasions a drag move is registered instead of a click and the list is scrolled by a few pixels. Unfortunately the setScrollThreshold is only implemented for ScrollContainer, not on ScrollBase level, so it can be used by all Scroll-Widgets. We tried reducing the touch resolution to 4px, it improves the behavior for distinguishing between click and drag, but generates a very coarse scrolling experience (stepping). We'll try to implement a matching behaviour on the TouchController level (report same position while pressed unless moved n pixels), but would appreciate a less hacky solution.Edit: the hacky solution works reliable and well, but has to be implemented on a much lower level with possible unwanted outcomes (e.g. screen calibration for resistive to
Hello,I downloaded a project on the net to write on a 800x480 tft screen with an ssd1963 driver with an STM32F429 ans TouchGFX, I'm starting with the stm32 and I can't get a display on my screen (the screens are created by TouchGFX), I have another code that works and with which I can write on my screen and the ports on the 2 codes are configured in the same way, can someone help me?Attached filesBest regards
Hi everyone, I'm currently working on a custom board based on an STM32 microcontroller, and I’ve developed my GUI using TouchGFX on the STM32F746G Discovery board. Now I want to migrate the same project to my custom hardware. The custom board uses the same MCU (STM32F746) and all the peripheral pins (LTDC, FMC, UART, etc.) are mapped identically to those on the Discovery board. The only difference is that it’s a custom PCB and not the original development board. My questions are: Can I directly use the code generated by TouchGFX (and STM32CubeMX/CubeIDE) from the Discovery board project on the custom board? Are there any specific changes I need to make for hardware initialization or BSP configurations? Has anyone done this kind of migration successfully with minimal modifications? Any tips or guidance from those who have gone through this process would be much appreciated! Thanks in advance.
why don't have GCC file when the stm32cube MX create project of touchGFX, butST official project have this ?
Hi,using the graph object is it possible to change the color of the line during creation?Example: I have a line that starts from time 0 and arrives at time 10. From 0 to 5 the color of the line must be red, from 5 to 10 the color of the line must be yellow.Thanks
Hi there,I'm curious how other folks handle this situation:Presently, I have a number of screens that all complete some hardware process (ex. move motors) and then navigate back to the Home screen. I'm introducing some additional logic that, across all such screens, would add a conditional to determine what next screen to display (ex. Critical Battery screen if battery is low, ... , with the Home screen being the 'else' option should none of the other conditions be satisfied).I don't want to duplicate and maintain this logic across all of the screens - where is a good place to put this? Thanks,Julia
I made some containers in 1 screen. (please refer to attached image) I wanted to handle these containers depends on h/w key. e.g. temp key is pressed, all of the containers in HDT_POPUP_GRAPHIC_SCREEN must be disabled. only main_graphic_temp_container will be showed up. However, main_graphic_temp_container.setVisible(true);main_graphic_temp_container.invalidate(); doesn't work normally, when these codes are in the switch~case statement. I tried to move these codes to the end of the setupScreen(), not in the switch~case statement. In that case, main_graphic_temp_container.setVisible(true);main_graphic_temp_container.invalidate(); works normally. Am I wrong to use these two (setVisible, invalidate) methods?
Hello!I wanted to ask if theX-NUCLEO-GFX01M2 module is compatible with STM32 NUCLEO-H533RE? The official documentation does not say anything about this NUCLEO board.Kind regards Andrew
Hi, I am using an STM32U5A9ZJT with LTDC L8 buffer and cannot select GPU2D, is support for L8 being added soon?Being able to use L8 and vector fonts would be ideal for storage savings. I also noticed that the "hardware" option for vector rendering is available on the STM32U5A9, isn't this a feature of the NeoChromVG of the STM32U5G9? Can I use L8 images in touchgfx when using an RGB565 buffer? I tried this and it works in the emulator but crashes on device.
HelloProject based on stm32u5g9 where I enabled TouchGfx in CubeMx settings. Layer 0 is configured to 800x600. I generate code from CubeMx. GPU2D and DMA2D are enabled and configured from CubeMx.With TouchGfx Designer, I open the ApplicationTemplate.touchgfx.part generated or my ProjectName.touchgfx project, I see that screen dimensions are 800x480, I think it should be 800x600.In TouchGfxDesigner, I add a screen and a box inside the screen, nothing more.I generate code from TouchGfxDesigner.In CubeIde, the only generated or added library I can see is :libtouchgfx-float-abi-hard.a.I have other project generated by myself though directly from TouchGfxDesigner, chosing a STM32U5G9J-DK2 800x480 kit. Here I can see :libnemagfx-float-abi-hard.a and :libtouchgfxnema-float-abi-hard.a are included in CubeIde project. In my code, I am trying to draw a scaled line, using ScalableImage, BitmapId, creating a dynamicBitmap.Indeed the line is scaled and displayed in my display.However the rende
On our custom board running STM32U5G7 I have set up a project using the same configurations in the .ioc file of the STM32U5G9J-DK2 but obviously with our pinout and package. The project compiles and runs, it does display correctly on the sim but there is no image on the LCD (I have previously verified the working LCD by writing to the framebuffer in board bring up. (https://support.touchgfx.com/docs/development/board-bring-up/board-introduction). I can see with the debugger that the hal.taskEntry() is called. But setting breakpoints in touchGFX designer code such as screen setup does not run. void touchgfx_taskEntry() { /* * Main event loop. Will wait for VSYNC signal, and then process next frame. Call * this function from your GUI task. * * Note This function never returns */ hal.taskEntry(); // <-- this line does get executed } The FreeRTOS wrappers are generated by TouchGFX and I have enabled the relevant interrupts for the LTDC and GPU2D.How would I go
Hello community!On March 18, we launched a TouchGFX Contest that had for goal for us to see our community's skills and creativity. This contest ended on May 2.We received several interesting projects, and it is now time to announce the winners! Our heartfelt congratulations to : @HTD : Keyboard @Glaglagluglu : Password @unsigned_char_array : screensaver_moving_logo_widget @Noutoi89 : Keyboard @u_2man : TouchGFX_MessageBox Prizes have been sent and should arrive soon (if they have not already ;)). To determine if this type of event interests you, we would appreciate your feedback. Please take a moment to answer this short survey (2 minutes).Congratulations to all participants, and enjoy these new containers! :)
我在使用cubeide时一直报错,下面是详细的报错信息:Description Resource Path Location Typefatal error: SDL2/SDL_render.h: No such file or directory HALSDL2.hpp /llwstm32/Middlewares/ST/touchgfx/framework/include/platform/hal/simulator/sdl2 line 26 C/C++ Problemmake: *** [Middlewares/ST/touchgfx/framework/source/platform/driver/touch/subdir.mk:19: Middlewares/ST/touchgfx/framework/source/platform/driver/touch/SDL2TouchController.o] Error 1 llwstm32 C/C++ Problemmake: *** Waiting for unfinished jobs.... llwstm32 C/C++ Problem'destroy' defined but not used [-Wunused-function] genx320.c /llwstm32/Drivers/product-genx-ctrl/src line 188 C/C++ ProblemProject 'llwstm32' has no explicit encoding set llwstm32 /llwstm32 No explicit project encodingProject 'product-genx-ctrl' has no explicit encoding set product-genx-ctrl /product-genx-ctrl No explicit project encoding路径都添加了,不知道是什么原因引起的,使用的是STM32F7146G-DISCO
Hi All, I'm trying to boot to an app present in QSPI.I created a project from TouchGFX and generated code, same.ioc file I used to make my bootloader code.When I used the bootloader to jump to the app that was present at address 0x0802000 it jumped successfully, and my app was running normally. Now I want to move this app completely to QSPI and want to run from there via a bootloader. How to achieve that. I tried to move the whole application to QSPI by changing the .ld file, but not able to jump.
I use stm32H750ZBT6 to built a LCD driver , when i finished configuring with freeROS , toouchGFX , but STM32CUBE IDE have some error after compiling , touchGFX can't run into target , also,target icon is grey. the error list photo as follows: TouchGFX don't run into target and target icon is grey: STM32CUBEMX add toucuGFX and freeROS : STM32CUBEMX error list after compiling : D:/ST/STM32CubeIDE_1.18.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld.exe: SC550_43.elf section `.text' will not fit in region `FLASH' D:/ST/STM32CubeIDE_1.18.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld.exe: SC550_43.elf section `TouchGFX_Framebuffer' will not fit in re
I built a LCD driver with stm32H750ZBT6 , afliliatlister operation, touchGFX can't load into MCU with ST-LINK , the error list as follows: (remark: i try to set as stm32CUBE IDE or CMake) stm32CUBE MX GCC setting: touchGFX list error message:Compilemake -f ../gcc/Makefile -j8make: ../gcc/Makefile: No such file or directorymake: *** No rule to make target '../gcc/Makefile'. Stop.FailedFailed
I've been working on a board bring up of a STM32U5G7 for a few days following https://support.touchgfx.com/docs/development/board-bring-up/board-introductionWhile the board is able to display the framebuffer and change colours, etc, when I finally complete the bring up process to include TouchGFX generation and TouchGFXDesigner, the project does not run out of the box and it's difficult to debug and tell what's missing. Instead, since the demos and examples from the STM32U5G9J-DK2 easily compile/run and that there are only a few differences between my board and the kit, would it be possible to modify/copy a DK based application to run on my board? The differences are:- MCU package U5G9 144pin vs U5G7 100pin- external flash not used I'd be happy to make sure the MCU pins are used correct and clock config, etc. but this way at least I know I'm not missing anything.
Hi ST community,I am developing firmware on the STM32H743 and I store the images and texts in BANK1 of an external Flash memory, specifically the 8MB MX25R6435F. To update my firmware, I write the new images, fonts, and texts to BANK2 (0x90400000) in the external flash and I utilize the swap memory of the STM32H7.Here is my linker script:/* Memories definition */MEMORY{DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128KITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64KRAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512KRAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288KRAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64KFLASH (rx) : ORIGIN = 0x8020000, LENGTH = 896K - 4 /* Last 4 bytes are used to store the CRC */CRC (rx) : ORIGIN = 0x80FFFFC, LENGTH = 4QUADSPI_BANK1 (r) : ORIGIN = 0x90000000, LENGTH = 4MQUADSPI_BANK2 (r) : ORIGIN = 0x90400000, LENGTH = 4M}/* External Flash Section */ExtFlashSection :{*(ExtFlashSection ExtFlashSection.*)*(.gnu.linkonce.r.*). = ALIGN(0x4);} >QUADSPI_BANK1FontFl
Hello, I am working with a custom board using an STM32u5g9vjt6q and a DSI display in video mode. The screen consist of multiple elements including scrollwheels, text boxes, arcs and boxes with borders and using the double buffer strategy Originally I had the project running on FreeRTOS and all of the elements would update correctly by calling invalidate on the items that needed to be updated.I have switched to running no OS for various reasons and now the only screen elements that update 100% of the time are the scrollwheels, I sometimes see a textbox wildcard flicker between the default value and the updated value but that is not very common. If I call View::invalidate(); from inside of screen1::handleTickEvent() all of the screen elements will refresh and be displayed correctly but this kills the performance of the device as expected and I know this is not the solution to my problem. I have been doing a lot of reading on this forum and I started to look into th
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.