Discuss STM32 and TouchGFX implementations, including configuration, debugging, and optimization.
Most recent activity
Will this peripheral ever be documented in detail? i.e. registers, interrupts, etc.Or even a lightweight/low level library would be acceptable.We may choose STM32U5 for a product but not if we are forced to use TouchGFX for good performance.
Hello everyone,I’m working on a project with an STM32H750B-DK board using TouchGFX and LWIP (Ethernet). After configuring LWIP in CubeMX and generating the code, I encountered a compilation error that took me a while to understand. I’d like to share the problem to help anyone who might run into the same issue.The ErrorIn file included from ../Application/User/gui/NetworkTask.cpp:13: ../../TouchGFX/gui/include/gui/model/ModelListener.hpp:13:23: error: macro "bind" requires 3 arguments, but only 1 given 13 | void bind(Model* m) | ^ In file included from ../Application/User/gui/NetworkTask.cpp:11: ../../Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h:616: note: macro "bind" defined here 616 | #define bind(s,name,namelen) lwip_bind(s,name,namelen) | Similar errors appeared for Model.hpp.
I am trying to build a fresh project using STM32CUBEMX to run STM32H750B-DK -FMC-QSPI-LTDCProject is sucessfully build and all the respected files are generated, Now I copy the Linker file from the existing project(Touchgfx Sample project for STM32H750B-DK which is running fine) But after the modification I am getting ExtMem/bootloader.o is not compiled even if I have added the files in the respective directry. arm-none-eabi-gcc "../Core/Src/syscalls.c" -mcpu=cortex-m7 -std=gnu11 -g3 -DDEBUG -DUSE_PWR_LDO_SUPPLY -DUSE_HAL_DRIVER -DSTM32H750xx -c -I../Core/Inc -I../LIBJPEG/App -I../LIBJPEG/Target -I../TouchGFX/App -I../TouchGFX/target/generated -I../TouchGFX/target -I../Drivers/STM32H7xx_HAL_Driver/Inc -I../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy -I../Utilities/JPEG -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/LibJPE
..
On an STM32U5G7VJTX I'm using a custom board with an ILI9488 480x320 display in 16-bit mode on the FMC.I am using NemaGFX version 3.5.0 for the STM32U5x9 as I don't have STM32U5x7.Drawing lines for a test works fine as long as I skip the nema_cl_wait() function, which hangs forever.To give GPU2D time to finish the work, I replaced nema_cl_wait() with a short loop that takes enough time. But that's obviously not a good idea, as some tasks can take longer or shorter.On the STM32U5G9J-DK2 Discovery kit the same GPU2D stuff runs just fine!Is this because the GPU2D in the STM32U5G7VJTX isn't exactly the same as in the STM32U5G9ZJT6Q?I've experimented with the GPU initialization in nema_hal.c, but without solving this issue.Does anyone have any ideas?/** * @brief Draws a line * [in] x1 * [in] y1 * [in] x2 * [in] y2 * @return None */ void Draw_Line(float x1, float y1, float x2, float y2) { /* Create GPU Command List */ Display.NemaGFX.cl = nema_cl_create_sized(8192);
Hello STM32 enthusiasts,While testing NemaGFX v1.3.0 for the STM32H7RS (M7), I discovered some differences compared to NemaGFX v3.5.0 for the STM32U5x9 (M33).1. nema_clear(color); Doesn't work, I had to come up with some solution: nema_matrix3x3_t m; NEMA_VG_PAINT_HANDLE paint; uint32_t color = nema_rgba(0xFF, 0xFF, 0x00, 0xFF); /* Fill the screen with a color */ #if defined(STM32H7S7xx) /* Use this on STM32H7RS */ paint = nema_vg_paint_create(); nema_vg_paint_clear(paint); nema_mat3x3_load_identity(m); nema_vg_set_fill_rule(NEMA_VG_FILL_NON_ZERO); nema_vg_paint_set_paint_color(paint, color); nema_vg_draw_rect(0, 0, DISPLAY_SIZE_W, DISPLAY_SIZE_H, m, paint); nema_vg_paint_destroy(paint); #else /* Does not work on STM32H7RS */ nema_clear(color); #endif2. nema_bind_src_tex / nema_blit Does not work with the NEMA_AL88 format, but luckily it does work with the NEMA_ARGB8888 format.// Format = NEMA_AL88 /* Doesn't render any output using AL88 bitmaps */ Format = NEMA_ARGB88
Does anyone have a component to display audio spectral graphs, specifically for the STM32N6570 Discovery?
Hello,I am testing a demo of my TSD TSS012004A-AD board.It has 36KB internal RAm and 256KB internal FLASH.My configuration on touchGFX like below:And my linker result is like below:As you can see there is still %55 empty on my internal FLASH and very little SPI_FLASH is used, I would like to use only internal memory. Why this 13388B is not used on FLASH, even I force to use internal flash section on touchGFX settings. Thank you,
Dear All,I am working on a project based on the STM32U5G9NJH6Q MCU.I have made a project using CubeMX v6.14. I am working on CubeIDE and I am using TouchGFX 4.25.0 for the GUI of my application.I have used the STM32U5G9-DK2 to verify my GUI design, using hardware accelerated vector fonts. On the DK everything seems to be working fine.But on the custom PCB I am working on, I see this:The larger font on the screen is a vector font, whereas the smaller fonts are bitmap, so I am using a mix of the 2.If I do not use hardware accelerated vectors (use software accelerated vectors instead) then the problem disappears, but the GUI is slow. My linker script looks like this: /* ****************************************************************************** ** ** @file : LinkerScript.ld ** ** @author : Auto-generated by STM32CubeIDE ** ** @brief : Linker script for STM32U5G9NJHxQ Device from STM32U5 series ** 4096KBytes FLASH ** 3008KBytes RAM ** ** Set heap size, stack size and stack lo
I have an STM32H7S78-DK and I have used TouchGFX to create a GUI just fine. I am currently trying to use the fanout or the Arduino headers to communicate through SPI or UART to another board. The first thing I tried was using the SPI through the fanout board as it's soldered for the SPI4 by default with the fanout board. I used the female headers on the fanout board that corresponded with MOSI, MISO, etc for the SPI. I configured SPI4 in STMCubeMX and generated the code in STMCubeIDE. I just tried to send an array with Hello in the array in the form of hex values. However, I saw nothing coming out of the pins when I hooked it up to a logic analyzer. I then thought maybe I was using the wrong header and soldered some male pins next to the female pins which said CN12 which corresponded to what it said in the fanout boards documentation. I thought maybe the microbus female headers were not the right ones to use. Generated all the code and tried again an
In this IOC, touchgfx can only be placed in the "boot" sub-project. It cannot be placed in the "app" sub-project.
Framebuffer is RGB565,Can I make a dynamic bitmap of ARGB8888? I made one by cacheable container and display the dynamic bitmap by a texturemapper but the image came out is not correct,something did appear on screen,but size and color not right. but if I change bitmap type to rgb565,the image show correctly,but with black background and no alpha ,not what I wanted. There is enough cache,I confirm the dynamic bitmap is created successfully on both type.I tried to display the dynamic bitmap by a Image widget,but the result is the same.In this forum,I can see a solution,to register a LCD32bpp class and set it as Auxiliary LCD in the hal.But I didn't found any thread on this subject.How to use off screen rendering of a textarea in a... - STMicroelectronics CommunityCan I get any help from any @st_it guys?
Hello ST/TouchGFX team,Our team have been using scroller widgets to display data that is lazily loaded from a persistent database. It works well, but since these widgets use 16-bit indexes, it limits the amount of rows that can be displayed to 32k. Given the way these widgets work, it's only necessary to keep the visible items in memory and the index is kept only as the first visible item's offset, increasing the index size would have minimal if not negligible memory impact, and since TouchGFX only runs on 32-bit ST MCUs, any arithmetic operations are done in 32-bit anyway so there should be no performance impact.In fact, we've been able to hack a solution to this by modifying the provided framework headers and source files to these widgets. The only issue is that the TouchGFX generator is hardcoded to create the updateitem callbacks with int16 signature and there is no way to change this except for modifying the base classes -- which are overwritten every time the project is rege
Hey, I am running into issues with a custom PCB based on STM32H743IIT6.Using IS42S32400J-6TLI as SDRAM, with an LCD screen. Using TouchGFX and DMA2D deactivated.A hard fault is encountered after entering Model:Tick()Hard Fault Error Detected at: Debug stack view: LTDC:SDRAM - only 16 data bits used:TouchGFX: MCU: Any suggestions what could be causing this Hard Fault error?
Hey,I am using STM32H750IBT6 with MT25QL512ABB8ESF-0SIT QSPI flash IC for external memory and IS42S32400J-6TLI as SDRAM, on a custom PCB with an LCD screen. Using TouchGFX.QSPI pinout is as follows:I've edited the FLASH_Id script - added as a .c file as an attachment.I would prefer to not use a bootloader, but if that is the only way or quickest way to get this working then please let me know. I have looked at using external loaders but as the pin out of my QSPI is slight different, external loaders will not be compatible. My code compiles but it does not flash: Under 'ASSETS_FLASH', ExtFlashSection does appear as expected after loading images onto TouchGFX. If you have any suggestions why I can not flash the external QSPI flash IC, please let me know. Additionally, within STM32CubeProgrammer I can connect to the MCU. I can successfully mass erase the flash too. Thank you for any assistance in advance!
I am running into issues with a custom PCB based on STM32H743IIT6.Using MT25QL512ABB8ESF-0SIT QSPI flash IC for external memory and IS42S32400J-6TLI as SDRAM, with an LCD screen. Using TouchGFX. I am getting this error. Any ideas what could be causing it? Thank you in advance!
I am experiencing a segmentation fault when clicking a toggle button inside a ScrollList container.I have a ScrollList (alarmsSelector) populated with a custom container type called alarmsItem. Each alarmsItem contains a toggle button. When clicked, the button should invoke a callback defined in the parent view (alarmSettingsView).The callback is initialized in the view constructor as a member variable:alarmSettingsView::alarmSettingsView(): settingsChanged(false), saveAlarmsChangesOption(SAVE_ALARMS_CHANGES), alarmsItemAlarmSelectedCallback(this, &alarmSettingsView::alarmsItemAlarmSelectedCallbackHandler) { }In the view// alarmSettingsView.hpp protected: touchgfx::Callback<alarmSettingsView, const int8_t> alarmsItemAlarmSelectedCallback; void alarmsItemAlarmSelectedCallbackHandler(const int8_t itemIndex);The callback is assigned to each visible item inside ScrollUpdateItem:void alarmSettingsView::alarmsSelectorScrollUpdateItem(alarmsItem& item, int16_t itemIndex) {
Hi, I've installed TouchGFX designer 4.26.0 on my laptop and i see a difference in behaviour to the previous versions.The problem is that we want to update our IAR project ewp file as we change or add new items in our designer. However we have issues when we do. At the moment our designer makes the following change<option> <name>IlinkAdditionalLibs</name> <state>$PROJ_DIR$\psi_board_lib.a</state> <state>$PROJ_DIR$/../../lib/touchGFX/touchgfx/lib/core/cortex_m7/IAR9.x/touchgfx_core.a</state> </option>changes to <option> <name>IlinkAdditionalLibs</name> <state>$PROJ_DIR$\psi_board_lib.a</state> <state>$PROJ_DIR$/../../touchgfx/touchgfx/lib/core/cortex_m7/IAR9.x/touchgfx_core.a</state> </option>That would not be a problem if the new folder "$PROJ_DIR$/../../touchgfx/touchgfx/lib/core/" was not empty after every build.I've tried to set the files back into that folder but every tou
TFT-LCD driver:void touchgfxDisplayDriverTransmitBlock(const uint8_t* pixels, uint16_t x, uint16_t y, uint16_t w, uint16_t h) { static uint16_t old_x0=0xFFFF, old_x1=0xFFFF, old_y0=0xFFFF, old_y1=0xFFFF; IsTransmittingBlock_ = 1; uint16_t x1 = x + w - 1; uint16_t y1 = y + h - 1; // Set columns, if changed if (x != old_x0 || x1 != old_x1) { parameter[0] = (x >> 8) & 0xFF; parameter[1] = x & 0xFF; parameter[2] = (x1 >> 8) & 0xFF; parameter[3] = x1 & 0xFF; send_cmd(DCS_SET_COLUMN_ADDRESS, parameter, 4); old_x0 = x; old_x1 = x1; } // Set rows, if changed if (y != old_y0 || y1 != old_y1) { parameter[0] = (y >> 8) & 0xFF; parameter[1] = y & 0xFF; parameter[2] = (y1 >> 8) & 0xFF; parameter[3] = y1 & 0xFF; send_cmd(DCS_SET_PAGE_ADDRESS, parameter, 4); old_y0 = y; old_y1 = y1; } send_cmd(DCS_WRITE_MEMORY_START, NULL, 0); send_data((uint16_t*)pixels, w * h); } int touchgfxDisplayDriverTransmitActive(void)
Hi, I would like to capture a TextArea's content and use it with TextureMapper for scaling animation and a blurry filter effect on the bitmap data.However, there is noise for the TextArea background in HW, but the simulator result is perfect. The reasons for using TextureMapper with Bitmap Data:the TextArea content will be updatedthe screen background will be updatedfilter effect function will be applied to the TextArea's contentAble to implement the scaling & fade animation How to create a Bitmap Data with Font/image's content without a noisy background?----------------------------------------------------------------------------STM32U5G9-DK Result (noise for the Background):Simulator Result (expected):----------------------------------------------------------------------------The Dynamic Bitmap creation (Reference to advanceAnimationContainer.cpp in Text Animation Demo):TestFont1Bitmap = Bitmap::dynamicBitmapCreate(Container.getWidth(), Container.getHeight(), Bitmap
Hi all!I have been working on the stm32h750b board and when i tried to flash a sample example project named TouchGFX for STM32H750B-DK board with external loader MT25TL01G_STM32H750B-DISCO.stldr in the debug session. I'm experiencing these.1. the IDE goes not responding 2. after some time it says download verified successfully.3. But the screen is white, and the board is in reset condition till i press the reset button. Please help me with how to proceed further. I need to make the GUI program TouchGFX be seen on the board. The example code was from the example selector in the stm32cubeIDE named TouchGFX@STea Regards,Siva
Hi everyone,I am working on a TouchGFX project using the STM32H750B-DK Discovery Board. The project works perfectly fine (UI is shown, everything runs smooth).The Issue:As soon as I enable a Timer in CubeMX (e.g., TIM15 or TIM3 in Input Capture mode) and regenerate the code, the display stays white after flashing. The application seems to crash or hang completely during initialization.Observation:Even if I disable the Timer in CubeMX again and regenerate the code, the display remains white.It seems that the first modification permanently breaks the project configuration (likely LTDC, QSPI, or MPU settings), and I have to restore a backup to get it working again.Has anyone experienced this behavior where simply touching the configuration breaks the board initialization permanently?Thanks for any help!
Hello everyone, I'm seeking advice on video playback implementation using TouchGFX 4.25 with a Riverdi RVT121HVSFWN00 display (12.1" LCD with STM32H7 MCU). **Current working setup:**- TouchGFX version: 4.25- Display: Riverdi RVT121HVSFWN00- Current video configuration: 480x272 resolution- FFmpeg command that works:ffmpeg -i video2.mp4 -s 480x272 -vcodec mjpeg -q:v 1 -pix_fmt yuv420p -color_range 1 -strict -1 -an output.aviThis works perfectly with the Video widget alongside other UI elements (backgrounds, buttons, etc.) When I try to increase the video resolution to 800x800 pixels, I only get a black screen. No video is displayed. **What I've tried:**1. Modified FFmpeg command for 800x800:ffmpeg -i input.mp4 -vf "scale=800:800:force_original_aspect_ratio=decrease,pad=800:800:(ow-iw)/2:(oh-ih)/2" \-c:v libxvid -qscale:v 5 -c:a libmp3lame -b:a 128k output.avi```2. Also tried various combinations with `mjpeg` codec and different pixel formats **My questions:**1. Are th
Hi All,Im trying to play a video on my custom device board based on the STM32H750B-DK paired with 128MB SDRAM hooked-up to an 1024x600px LCD.When i preload a video into the videoWidget in touchgfx designer and flash it to the board the video plays fine and smooth at 25FPS.Im using hardware decoding, double buffered.Now id like to playback some dynamic content that i will load into the SDRAM that placed at the base of the SDRAM (32-bit aligned).MPU is setup.i set the video widget to the data in SDRAM video.setVideoData(bufferSDRAM, bufferSDRMALenght);But when I start the video player I do see the video but the image is jittering around and not stable.its like every second (guessing here, could be random) frame is slightly offset a bit down and to the right. Ive also tried a chunked data reader using a custom reader object which serves chunks by copying parts from SDRAM to a smaller buffer in internal ram.This created a smooth playback without the jitter but the video playback
I have some text that should not be translated.If a translation field in the table is empty, is there a way to make it automatically display the text from the first translation box, instead of having to copy and paste the same text into every box?
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.