Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
Due to lots of image files for UI, I need to spend around 3~4 minutes programming the external flash. Can I specify a code area and an image area for the extenal flash? Then if image files are not changed, can I just update the code area?Or is there any way to shorten the programming flash time for a project with TouchGFX?
Hey There,I am working on a project that will involve using a STM32H743VIT6. Its quite a complex board so almost all of the pins one the MCU have been occupied. Because of this I have to drive the 240x320 LCD-TFT with SPI ( Driver is ILI9341). I was hoping to use the ChromeART graphics accellerator to do this to relieve the load on the MCU. However I just came accross this https://support.touchgfx.com/docs/development/hardware-selection/hardware-components/hardware-selection-mcu which only lists Parallel, LCD-TFT and MIPI DSI as the ChromART peripherals for the STM32H7 series. Would there be any way of redirecting the output of one of these peripherals so that it would work with an SPI channel?ThanksRicky
Hi, I am quite new here so sorry for this simple question.I have STM32 F746G discovery board and I generated project through TouchGFX designer and imported it to Cube IDE, but it generated main.c file.The project is C++ project, but when I try to rename main.c to main.cpp it will generate errors during compilation. I have no idea why I am getting these errors. Thanks in advance!I have no idea why it is working with .c and not with .cppundefined reference to MX_TouchGFX_Init()undefined reference to MX_TouchGFX_Process()
I am using TouchGFX ButtonWithLabel widget to have text within my buttons. It requires Resource texts and the function setLabelText() has TypedText as an argument. I want to replace the label with my own custom string which can change during runtime and is not predictable (can't use resources). Is there a way to implement a button with text over it which can be changed anytime like a wildcard?
Hi, I Have recently uploaded a simple Led Blink code on my STM32F469, since that the screen is always black and doesn't show anything.I want to know how to go back to the default code that was on this board in order to make the screen work normally as it was,Thanks
After a month of headbanging I have finally produced picture on the STM32F469I-DISCO with DSI 800x480 screen that had no noise both during animations and not (unlike my previous attempts)My config:Windows 10STM32CubeIDE 1.6.1TouchGFX 4.16.1Using BSP files stm32469_discovery.c/stm32469_discovery_lcd.c/... for SDRAM, LCD (and whatever their dependencies are, just a few files with definitions mainly)So, I have finally produced a full 800x480 picture with animation, that looks good, except that:3000ms animation takes some 12s to complete (counted in mind, estimate), barely dragging, but still smooth, just takes too longI have specific LTDC frequency (27429kHz, default from BSP file) and porch values (randomly found to work), which I cannot change at all, even a bit. If I change anything at all there, the picture goes crazy in different ways.The screen is strongly flickering, seemingly with each frame.If I reduce porch values, I get higher framerate, but the image messes up - I get some dia
I'm still struggling to get STM32F469 to run TouchGFX. Something REALLY weird happened yesterday, and I wasn't able to recover Disco board since.I have 2 projects in STM32CubeIDE:Project 1 turns on the screen and has some GUI - I backed up that project to always have something with working screen.Project 2 is extension of Project 1, was a copy of project 1, which I developed further, also turns on display and has working GUI.In my project 2, I have attached external flash loader and ticked the box "initialize". Ticking that box seems to have killed my disco board (before I ticked that box, I had no problems even with external loader, everything worked correctly. I don't exactly know what initialize does, it's not explained anywhere, so I figured whatever it initializes, I need it. But it bricked my disco board). How? No clue. This is what happened after that:Weird thing 1: No matter what project I flash, I get blank screen. Known working project with GUI - project 1 - Also shows black
Hello, is there a way to make the SlideMenu Container swipeable, reacting not only on the stateChange button, which starts the animation, but also on a swipe an move to to the current position of the touch. The idea is to make a slidemenu behaving like the for example the android quick settings menu (swipe down from the top of the screen)What is the better way to achieve this? Copy or inherit the SlideMenu Class and add the swipeable functions in source code, similiar to the swipeContainerOr is there a possibility to add this through Triggers & actions or Dragable Mixin in the TouchGFX DesignerThanks!Seko
Hello,To save space on the section "ExtFlashSection" with the dev board STM32F469I-DISCO, I'm trying to use the L8_RGB565 format for my backgrounds. I'm doing this by changing the "Image Format" of all background on the "Images" section of TouchGFX Designer. This is working when I launch the Simulator but when I try actually seeing it on the board, the colors are weird like so:Simulator:STM32F469I-DISCO:How can I solve the issue ?Thanks in advance,DELETRAZ Tristan
Hi Guys,Iam currently developing a GUI application using the Simulator most of the time. Now i need to add UART communication to the project, and want to have this also available within the Simulator. Therefore i want to use some kind of virtual SerialPort driver for Windows.Is there a way/tutorial of how to access that SerialPort from within the Simulator?How can i accomplish that?Regards,Steffen
HiWhat is the difference between the Click, Touch, Toggle buttons?Andrzej
Hi @Martin KJELDSEN Hi @Alexandre RENOUX I have general questions about the required stack size for the touchgfx task. I'm observing that required stack size of the touchgfx task varies even when the same screen is displayed. To my understanding it should be always the same. Is that correct?I observe this behaviour on screens which uses ScrollList or a scrollable container. In some cases the stack size increases when scrolling, but not every time and it is in my opinion independent from slow oder fast scrolling.The measured maximum required stacksize is about 14kByte. The maximum allowed stacksize for the touchgfx task is 16kByte. But in very seldom cases, I'm getting a stackoverflow of touchgfx task and I can not reproduce this reliable.Is it possible to calculate the maximum required stacksize? Or is it possible to readout this information somewhere in the system? (e.g. MVPHeap? Simulator?)Does the transition have an impact on the stacksize, e.g. which screen was the last
I have concern on the usage of malloc() in the generated USB Host MSC library.In file usbh_msc.c, take a look at the usage of USBH_malloc)_:static USBH_StatusTypeDef USBH_MSC_InterfaceInit(USBH_HandleTypeDef *phost) { ............. MSC_HandleTypeDef *MSC_Handle; ......... phost->pActiveClass->pData = (MSC_HandleTypeDef *)USBH_malloc(sizeof(MSC_HandleTypeDef)); MSC_Handle = (MSC_HandleTypeDef *) phost->pActiveClass->pData; if (MSC_Handle == NULL) { USBH_DbgLog("Cannot allocate memory for MSC Handle"); return USBH_FAIL; } }where it is defined as following on usbh_conf.h:/** Alias for memory allocation. */ #define USBH_malloc mallocMy questions:Why it uses dynamic location malloc()? To my understanding for real time application this is risky.Why currently the malloc() return NULL memory allocation? I have defined my heap size 0x2000 in the CubeMX project config which should suffice to serve the requsted 256 byte (i.e. sizeof(MSC_HandleTypeDef)).Why in the code
I'm trying to implement a screen saver/sleep mode onto an application so if the screen hasn't been touched for a period of time the device will enter a sleep mode (turn screen off, save power, retain state of the model). Then only when the screen is pressed should it wake up and return to normal operation.Is this possible? I cannot find anything describing how to do this. Thanks!
..
@Martin KJELDSENHi, I did my best to see a farsi/arab word named "محمد" on screen but nothing showed up for this specific word! I also used recommended font but I'm running on empty!!! would you mind ? thanks.
Keyboard is such a common functionality. Is there a widget available now in TouchGFX?
HiI did buy a https://www.waveshare.com/wiki/OpenH743I-C and they provide some sample codes...They are all made in STM32Cube_FW_H7_V1.3.2 and works fine when i do compile in Stm32cubeide.BUT ...when i do say MIGRATE to STM32Cube_FW_H7_V1.8.0 i got problems with LTDC, SDRAM and FMC.Nothing happend on the screeen and it seems like i got hardware failure when trying to write to 0xD0000000 whitch and the FMC bank 2 as the SDRAM are connected to.Do anyone have a glue ...WHat have changed in HAL drivers files from 1.3.2. to 1.8.0 ?ThanksHjalmar
Hi,I'm working with my first TouchGFX project and also this is my first project with STM32H7 (I have been working with F1 and F4).I have custom made PCB with STM32H753IIT6 rev. V, 16-bit SDRAM, 24-bit RGB 800x480 LCD without touchscreen. I'm using STM32CubeIDE 1.6.1 and TouchGFX Generator 4.16.1.I got working LCD with external SDRAM framebuffer, but I can't get working TouchGFX. When I add TouchGFX code, I'm getting HardFault with Imprecise data access violation (IMPRECISERR). I also tried to use internal RAM, to exclude some potencial problems with external RAM. I have D-cache, I-cache, MPU disabled. CPU runs at 400Mhz.I tried to fallow this instruction: https://support.touchgfx.com/docs/development/board-bring-up/board-introduction, but without external FLASH section. I also tried to use with and without FreeRTOS and with and without Chrom-ART.Can it be something with cache or MPU? I'm new in Cortex M7 cache systems. Maybe someone can point me in to good tutorial how to setup MPU?Tha
Hi,I am using STM32L4 series controller with FREERTOS configuration, i found that sometimes my code gets stuck into "for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )" under "vListInsert" function.I am using timer for VSync, which having priority of 6 and configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY to 5.There are only tow number of task,Main task - Priority 2GUI task(TouchGFX GUI task) - Priority 3Please find attached snap-shot of debugging window.High priority task(TouchGFX GUI task) gets blocked by "for" loop forever, system never get chance to other other task and whole system hanged up there.Could you help me out with this?Thanks!!!
HiI want to draw 100 lines and use it as background. They will not change often so I can save it in line_buffer and use blitCopy to paste it to framebuffer below my graph.Is there any way to redirect line drawing to line_buffer or any other clever way to do it?Best regards Matjaz
HiI have a counter in main.c. I have two screens A and B. The meter reading is sent to screen B and displayed. When the counter reaches 0 I want screen B to switch to A. How to set it up in GFX? greetingsAndrzej
Hey! I've been struggling to understand TouchGFX engine. I tried Discovery board and examples provided by TouchGFX Designer - everything works out of the box. However playing with high level app software on discovery boards won't help me on the product boards, so I tried build project from scratch and failed. After that I reduced my task to pick small I2C B/W display, working LCD driver and draw a square on it with TouchGFX framework. Just to see that engine "ticks" as expected. Still no luck. Things I tried so far:follow https://support.touchgfx.com scenario on SPI interfaceNUCLEO-G071 board examplesome guy's blog who was able to run TouchGFX with SPI displaywithout/with RTOSMaybe anyone saw EXACT steps on how connect TouchGFX framework to hardware. Like what signals/interrupts framework needs, which file to put it (ex. step 1: you should provide this instruction here for this and this flag there for that). I guess I'm talking about "Touch AL" layer which seems to be the hardest part.
Thank you for helping.There are 10 buttons.I am changing the value of the text when I press the button.10,20,30,40,50,60,70,80,90,100There are 10 patterns of, but the text is as follows only in the case of 60 and 70.? 0Other than that, the numerical value is displayed normally.The following code is written in the handler when the button is pressed.dimmerValue = 60;Unicode :: snprintf (textDimmerBuffer, TEXTCOUNTER_SIZE, "% d", dimmerValue);textDimmer.invalidate ();Why?Thank you.
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.