Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
I am working on a gui using an STM32H747I-DISCO connected to an external 640x480 display. The external display does not have a DSI interface, so the DSI-related code in TouchGFX is commented out.The display works perfectly for static images, but heavily flickers during animations. To fix this, I tried to implement a double buffer, which you can see in the attached ioc image. This didn't fix the flickering, so I did a bit more digging.I placed a breakpoint in TouchGFXGeneratedHAL::setTFTFrameBuffer (see the breakpoint image) to check the address for each framebuffer swap. What I found was that the address was fixed to the second framebuffer, and did not swap back and forth between the buffers, which you can see in the attached debug variables image. I confirmed the first framebuffer wasn't being used by watching the framebuffers in memory, which showed me that the memory at the first framebuffer location is not being written to.How do I make the framebuffer switch as intended, and
Hi,I am beginner to TouchGFX , currently I am working on implementation of progress bar. requirement is I have to show progress bar based on user inputs. for example, if I have received 5 second as input, I need to show time increment and accordingly progress bar has to show progress. and at the end both timer and progress bar should complete the process at same instant.Any suggestion about what best way is to implement this.?Thanks in advance.Regards,jsalg.
Hi,For a device without touchscreen, I'm prototyping a GUI using a clickable wheel as user input. A red box is used as visual focus on widget. I tied the following code to deliver a programmatic click :void navScreenView::selectClicked(){ Rect clickedRect = (*focused)->getFirstChild()->getAbsoluteRect(); Application* app = Application::getInstance(); int x = clickedRect.x + clickedRect.width / 2; int y = clickedRect.y + clickedRect.height / 2; snprintf(debugStringBuffer, sizeof(debugStringBuffer), "Click: %d, %d", x, y); Application::invalidateDebugRegion(); ClickEvent ev = ClickEvent(ClickEvent::PRESSED,x ,y); app->handleClickEvent(ev); HAL::getInstance()->taskDelay(200); ev = ClickEvent(ClickEvent::RELEASED,x ,y); app->handleClickEvent(ev);} The coordinates x,y are correct, but passing the event to the application does not trigger anything.Any advice ?
Hi to all community.I am new with the touchgfx and the graphic ST microcontrollers.I have develop an application on STM32H7 MCU with touchgfx. The mcu use an external 16Mb flash memory to store the application, touchgfx, images etc...The graphic interface are ended but when I launch the debugger for test some changes in the application, some minutes are necessary because the CubeIDE reflash entire memory, application and graphics, and this is a bit frustrating.So I ask you if exist a system to flash the touchgfx and graphical elements one time when these are finished, and afterwards flash only application program for speed up the debugging.I use ST link and I have try to speed up the frequency to 24MHz but it doesn't get much better.Thanks
Hello,I'd like to customize one of the current available demoboard (NUCLEO-G071RB) changing the MCU with a compatible one which I have purchased (STM32G0B0RET6).I've mounted this pin-to-pin compatible MCU (according to CUBEMX) on the aforementioned NUCLEO board.I'd like to try and get running one of the TouchGFX examples that work with the additional display board X-NUCLEO-GFX01M2.I tried to change the MCU from STM32G071RB to STM32G0B0RET6 and "Generate code" again but I couldn't manage to get the project running yet. I've seen that basically all the peripherals are the same with the exception of TIM2 which should be changed to another timer (ex. TIM3).Is this the correct procedure? If not, what's the correct procedure that should be followed?Thank you.
I have an Error using a Custom Board with a STM32H743ZI controller.First a want to use the internal Flash and RAM_D1 for the TouchGFX App but i always get a Hardfault on LineFrontendHeap& heap=FrontendHeap::getInstance();__HAL_RCC_CRC_CLK_ENABLE(); is executedmy Toolchain is up to dateany ideas?
Hi everyone,A simple question, I'm using TouchGFX 4.22 with the example "Flex Button Example" for F746G and F7508.When the program is set to F746 is not possible look all functions of the UART module... See "DinaF746.png"But if the program is set to F7508 I look and acess all functions of the UART module... See "DinaF7508.png"What I do need set in TouchGFX or CubeIDE to solve this problem?Thank you for help.IGomes
Hi everyone,is it somehow possible to "flip" the screen for a 180 degree rotation?Either on TouchGFX, LTDC or DMA2D level?We are using CubeMX to generate the whole project and everything works smoothly, but we need to rotate the screen.Cheers,Patrick
Hi there!I am using a STM32F413ZH-based custom board, I was looking into the option of GUI applications and found TouchGFX. But I don't know how to use that and integrate it with my custom board. Please tell me how to integrate TouchGFX on my STM32F413ZH-based custom board. If it can't be used, then let me know about any other applications.
Am using STM32H745BIT6 controller with LCD TFT RGB parallel interface. My end application will consists of lot of graphics and also Animation.Can I use RGB parallel interface with 800x480 resolution. Am using 16bit SDRAM and color depth is 16bpp. Will there be any performance issue with this configuration and STM32H745BIT6 controller.The examples for EVAL board for STM32H745 show lower resolution as 480x272 with 16 bpp. Is there any specific reason for this?Please recomend different controller if STM32H745 is not sufficient for driving 800x480 16 bpp with 16 bit SDRAM.for LCD framebuffer ThanksAnuj
Posted on February 06, 2016 at 06:37hello there, I've seen on some forums that people are suggesting to use FSMC to interface LCDs. Many LCD drivers also make use of FSMC. So, I tried to find out what FSMC does. ST provides manual that explains all the interfacing info about FSMC. However, I want to know very basic of what FSMC does? Why do I need it? How is it different from normal access? If you could refer me to some link that explains how fsmc accesses external memory and role does the processor plays in all this? I'm using STM32F103ZET6. I want to use emWin drivers to interface SSD1289 LCD driver. But before that I want to have a basic understanding of how FSMC works. Thanks for your time! #ssd1289 #ssd1289 #ssd1289 #stemwin #stemwin #stemwin #stm32f1 #stm32f1 #fsmc
Hello, I'm using a dynamic graph for a project. Can I display 2 different sets of data on this graph? Using 2 separate graphs doesn't solve my problem since I need them to be on the same graph.
Hi,In TouchGFXGeneratedHAL.CPP u are using the HAL_LTDC_LineEventCallback. the issue is i use the two layers.Layer_1 for live video from camera and layer_2 for GUI. every time i generate code i must add this code below. the added code in bold,italic. is there any way to make it more automatic or u know other way around?uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const{return (uint16_t*)LTDC_Layer2->CFBAR;}void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr){LTDC_Layer2->CFBAR = (uint32_t)adr;LTDC_Layer1->CFBAR = (uint32_t)activeBuffer;/* Reload immediate */LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;}
I'm working with the up-to-date 4.21.1, but since 4.20 I get a lot of application errors while using the TouchGFX Designer. Happens really often while copy & pasting some elments. To be precise: while pasting TGFX objects like a text or an image. Then I have to restart the designer and I can continue (do the copy&paste without error) to work on my project.I'm reporting this here as suggested by the error message.Also, I can not reorder texts in the main list, but sometimes in the left group tree.
Hello,I have buzzer on my custom PCB and I want to do that it beeps every time when button is clicked(but only button). Do I need to add buzzer function on every button interaction or maybe there is easier way.? Maybe someone knows how to achieve this?
Hi,I am trying to set up an http server on STM32H750B-DK (on STM32CubeIDE) with LwIP. When I program it without implementing FreeRTOS I call the function MX_LWIP_Process in while function in main: * Function given to help user to continue LwIP Initialization * Up to user to complete or change this function ... * Up to user to call this function in main.c in while (1) of main(void) *----------------------------------------------------------------------- * Read a received packet from the Ethernet buffers * Send it to the lwIP stack for handling * Handle timeouts if LWIP_TIMERS is set and without RTOS * Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS */ void MX_LWIP_Process(void) { ethernetif_input(&gnetif); sys_check_timeouts(); Ethernet_Link_Periodic_Handle(&gnetif); }The IP address pings fine and the http server is set up. But when I enable FreeRTOS the declaration of this function does not happen:#if !WITH_RTOS /* Function defined in lwip
I want to hide the colored progress bar in circleprogress widget when there is no data. I can hide the whole widget but how can I keep the background image(a grey circle) in place. If i set the value to 0 there is still a small dot that remains. I assume the item name is: circleProgress[Your widget name]Painter But there is no visibility setting for that.
Hii,In the TouchGFX Designer, I have taken a TextArea and have added a wildcard, given 000 as initial value and 3 as buffer size. In the Typographies, I have given wildcard range 0-9.I am working with the STM32H745XIH6 Board. With the external peripherals like UART, ADC and TIMER I want to change the values in the TextArea according to the user input. How?
Hi, I have a question about the touch operation in the TouchGFX Designer.I want to enlarge the display by spreading two fingers like a smartphone browser, but I can't find it even if I check the demo screen.If it is possible to operate with two fingers, please point me to a page showing a usage example.
I have been trying to program the mentioned display. Whilst using TGFX 4.20.0 I can program an empty project then, generate code and upload from CubeIDE 1.9.0 without issue. Adding an image to the empty project and run target from TGFX works no problem BUT when generate code and run target from Cube ide it failsMemory Programming ... Opening and parsing file: st-link_gdb_server_a29604.srec File : st-link_gdb_server_a29604.srec Size : 495.69 KB Address : 0x08000000 Erasing memory corresponding to segment 0: Erasing internal memory sectors [0 1] Erasing memory corresponding to segment 1: Erasing external memory sectors [0 79] Error: failed to erase memoryThis is usingSTM32H_IPS_Riverdi_CM7_v3.stldr from project and STM32H_IPS_QSPI_Loader_CM7.stldr supplied by manufacturerI hope you can help with this issueThank youMark
Windows 10, CubeIDE1.6.1, TouchGFX4.16.1,FreeRTOSTrying to... (in Model.cpp)#include "FreeRTOS.h" #include "queue.h"#include "task.h"FreeRTOS.h: No such file or directorythe "TouchGFX/simulator/gcc/Makefile" is (I guess) probably where I need to add the "Core/Inc" and "Middlewares/Third_Party/FreeRTOS/Source/include" pathsI tried in the Makefile adding:project_path := $(call qs,$(abspath $(call sq,$(makefile_path)../../..)))core_path := $(call qs,$(abspath $(call sq,$(project_path)/Core/Inc)))freeRtos_path := $(call qs,$(abspath $(call sq,$(project_path)/Middlewares/Third_Party/FreeRTOS/Source/include)))ADDITIONAL_INCLUDE_PATHS := $(core_path)ADDITIONAL_INCLUDE_PATHS += $(freeRtos_path)ADDITIONAL_SOURCES := ADDITIONAL_LIBRARY_PATHS := ADDITIONAL_LIBRARIES := export ADDITIONAL_SOURCES ADDITIONAL_INCLUDE_PATHS ADDITIONAL_LIBRARY_PATHS ADDITIONAL_LIBRARIESbut somehow I create more problems for myself where the compiler lost the orginal source path for the compile. Compiling gui/src/model/
Hello,Using a STM32F746G-Discovery board and TouchGFX 4.20.0, the on-screen buttons of the "Button example" as distributed with the TouchGFX package do not respond after the board is reset via the reset button or on a power-up reset. When flashing the code and the ST-Link debugger resets the processor, it works fine, as well as when the processor is reset with STM32CubeProgrammer. Also works as expected under debugger control.The processor is running fine, as established through a simple LED flashing routine in the HAL_TIM_PeriodElapsedCallback ISR.Has this "feature" been seen elsewhere? Any ideas to the cause of this?
hello everyone, I try to run TouchGFX on STM32F2 series MCU (Cortex-M3) by using Cortex-M0 core lib. The project built successfully and run TouchGFX. The screen seem good. But I have a problem, after the animations like slider, button pressed etc. the objects doesn't invalidate properly. If I call "invalidate()" periodically, it is OK, all screen update succesfully.I am attaching the photo of my problem, Can using the Cortex-M0 core lib cause this problem?TFT driver : ILI9488LCD Interface: FSMCPartial buffer (3x1000byte)
I have to replace the touch screen gestures with hardware buttons іn "SwipeContainer" ;- sorry, but I couldn't find any native actions that can change the the pages in this container (in Designer4.22.0), so I tried to do it by my own.. Using "setSelectedPage" works pretty well, but it doesn't animate the pages.. So the question is, what's the best approach to make "swipe container" pages animated by the hardware keys?
Hello TouchGFX Community!It's not a question, but my findings.ST recommends to split tasks between two cores of STM32H7: CM7 for GUI, and CM4 for real-time tasks.In this configuration, we throw away all advantages of CM7 over CM4:- instruction cache- data cache- tightly coupled memory for data- tighlty coupled memory for instructions- advanced instruction set- MPULooking at this, I thought the price is too much and decided to run TGFX on CM4.However TouchGFX Designer does not support this approach and generates the TGFX code for CM7 by default. So it was needed to roll up sleeves, and after some time I managed to build the GUI for CM4.The price is not zero but affordable - CM4 runs TGFX at 30FPS (CM7 did it at 60FPS) in STM32H747I-DISCO, because its clock is twice lower.And CM7 has full fuel tanks for the real-time tasks.
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.