Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
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?
I followed the steps in this demo workshop to upload a simple program to toggle LEDs to the Nucleo-N657X0 board. The project is in FSBL. I can run the code in debug mode and upload the signed program to the external flash on the Nucleo-N657X0 board with STM32CubeProgrammer. However, when I tried to run the code with the 'Run after programming' option, I got the warning that the core is locked up. Besides, the Option Byte tab and the Erase tab are gone when the ST-Link is connected (See figure below), so the commonly suggested fix of modifying Option Byte is not possible.. My board is NUN657X0Q$CR1 (MB1940). I'm using STM32CubeProgrammer v2.20.0. The CubeIDE is v1.19.0. The firmware is STM32Cube FW_N6 V1.2.0. The SigningTool is v2.20.0 as the programmer. I wonder if there a register that I can check to see the state of the MCU? Is it something to do with the Secure Programming? Any suggestions and comments are greatly appreciated!
Background: I am using the STM32H747I-DISCO board and the BSP SDMMC example from the ST Repository as my starting point. I can provide my code if necessary but wanted to keep post as short as possible. I have looked at AN4838, AN4839 and AN5200 ST Micro Documents. They are detailed but not getting me to my answer fast enough. My Goal:I am trying to understand the detailed reason(s) why I need to enable the D-Cache when using FatFS calls with the SDMMC peripheral on the STM32H747I-DISCO board to avoid a timeout and also why I-Cache does not necessarily need to be enabled. My Understanding to this point: The CLIFF NOTES of what I think I understand (between the ST documentation, AI hallucinations and true answers): Enabling the D-Cache reduces AXI bus contention since the IDMA in the SDMMC peripheral needs AXI bus to move data from the FIFO to SRAM on a very tight timeline, mandated by the SDMMC peripheral. When you enable the D-Cach
It appears that the STM32WLxx FW 1.4 package includes a LoRaWAN stack that implements AES in software. Is there a technical reason that the AES accelerator in the STM32WLxx is not used? I can imagine things like:AES hardware functionally uses more power, or increases latency waking from STOP2, than the Semtech implementation.AES hardware does not provide the functionality required by LoRaWAN (at first glance, this does not appear to be the case).It's just too organizationally difficult to fork the Semtech code to use the AES hardware, or there is some licensing wrinkle (I can't imagine such a thing).If there's no reason not to use the AES hardware, I'd like to explore doing so.
Hi everyone[PN]: STM32F303RE, X-Nucleo IHM17M1, Faulhaber 0620-006B[VERSION]: 6.4.1[TOOL]: MC Workbench setup[DETAILS]: Hi everyone. I'm currently trying to configure the aforementioned hardware for motor control. My question is in regard with sensored startup. In sensorless mode, the open loop motor startup is configured in the "sensorless startup parameters" window in "Speed sensing config" settings. However, when in sensored mode (hall effect), there is no option to do configure the startup behaviour of the motor. I have tried both 6Step and FOC, and in both modes the motor fails to startup, but operates normally once I give it a "nudge". At least for my application, it seems like an open-loop startup is still required. Is there any way to accommodate this, or do I have a misunderstanding of the implementation in some regard.
Hi all,I'm struggling to get SPI working on my STM32U5G9J. I have an nordic master device outputting 6 bytes of data every 500 ms over SPI and plugged into the proper pins, double checked and confirmed on analyzer.stm32u5g9j_dk2.overlay/ { aliases { spi-slave = &spi1; }; }; &spi1 { status = "okay"; pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pb5 &spi1_nss_pb0>; pinctrl-names = "default"; /delete-property/ cs-gpios; fifo-enable; };main.c#include <zephyr/kernel.h> #include <zephyr/logging/log.h> #include <zephyr/drivers/spi.h> #include <zephyr/drivers/gpio.h> #include <zephyr/sys/util.h> LOG_MODULE_REGISTER(main); #define SPIOP (SPI_OP_MODE_SLAVE | SPI_WORD_SET(8) | SPI_LINES_SINGLE | SPI_TRANSFER_MSB) static const struct device *spi_in_dev = DEVICE_DT_GET(DT_ALIAS(spi_slave)); static const struct spi_config spi_in_cfg = { .frequency = MHZ(1), .operation = SPIOP, .slave = 0, }; int main(void) { if (!dev
Hi,I have an STM32g473 with 120kb or RAM, running at 169,75MHz.I have some image data stored starting at 0x2000_0000 which comprise of a palette of 235 colors in 00rrggbb format (1 word per color), follower by 304 lines of 370 pixels (one byte each, which is used as an index in the palette to get RGB value.)The data are copied in RAM to avoid wait states when loading them from flash, which mean most is in SRAM1 but the last 85 lines are in SRAM2 and MCC SRAM. The code is in flash.The first line of data display correctly, but the last 85 lines get one extra cycle per pixel (most probably due to reading the data).I could not find anything in the RM0440 that explains where this one cycle penalty come from. The only peripheral I use in addition to SRAMs and Flash (for the code) are the DACs and one GPIO (the gpio is not accessed during the loop that sends the pixels and get the penalties)Can someone help understanding this?
Hello ST Community, I am working on STM32N6 with an IMX335 camera sensor, ThreadX + USBX, and trying to stream live camera video over USB Type-C (UVC) to an external screen / PC. Current status: - Camera + ISP + DCMIPP pipeline is working correctly - Live video is already displayed on the STM32N6 board screen - I want the same live video to be streamed via USB Video Camera / ISP configuration: - Sensor: IMX335 - Sensor output: RAW10 - ISP enabled and processing the RAW data - Frame size currently: 800 × 480 - Pixel size in memory: 2 bytes per pixel - DCMIPP is writing frames to memory using DMA My main confusion is: What is the exact output format from the ISP to memory?Is it RAW, RGB, or YUV (YUY2 / NV12), and how do we confirm this from the HAL / ISP configuration? USB UVC configuration I am using USBX Device Video (UVC) generated from CubeMX. CubeMX gives two main options for video streaming format: UNCOMPRESSED MJPEG UNCOMPRESSED: I understand this usually means YUY2 (YUV422) for U
I am using software Independent watchdog at STM32H735IGK and i want to freeze it when entering standby mode.I set option byte FW_IWDG_SDBY unchecked but unfortunately it is not working and my program keeps getting out from standby mode.My code:At init:MX_IWDG1_Init(); While the program is running:__HAL_IWDG_RELOAD_COUNTER(hiwdg); When entering standby: HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); HAL_PWREx_ClearWakeupFlag (PWR_WAKEUP_FLAG_ALL); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); __HAL_PWR_CLEAR_WAKEUPFLAG(PWR_FLAG_WKUP1); // E1 __HAL_PWR_CLEAR_WAKEUPFLAG(PWR_FLAG_WKUP4); // INT //Configuring wakeup pins PWREx_WakeupPinTypeDef sWakeupPin1; sWakeupPin1.WakeUpPin = PWR_WAKEUP_PIN1; sWakeupPin1.PinPolarity = PWR_PIN_POLARITY_LOW; // Flanco de bajada sWakeupPin1.PinPull = PWR_PIN_PULL_UP; HAL_PWREx_EnableWakeUpPin(&sWakeupPin1); PWREx_WakeupPinTypeDef sWakeupPin4; sWakeupPin4.WakeUpPin = PWR_WAKEUP_PIN4; sWakeupPin4.PinPolarity = PWR_PIN_POLARITY_LOW; // Flanco de bajada
I'm referring to RM0481 Rev 4 and I'm currently working on my SDMMC driver. For one reason and another, I need to start a data transfer for multiple read/write commands, but without sending the command again (because it has already been done so).The RM states this about the DTEN (Data Transfer Enable) bit: Ok. Maybe I'm missing something, but isn't the whole point of SDMMC is to communicate with SD, SDIO, and eMMC cards? The marketing people said so: What gives? Can I use or not use the DTEN bit? Or is it just leftover legacy from older versions of the SDMMC IP?
The UCPD / CC circuit is one of the few that connect an MCU pin to the PCB connector. There does not appear to be any specific information on how to protect this pin. Thus, I assume the same rules as other pins apply. That means 5V or even 3V being applied to this pin when the MCU is unpowered would be bad. Is there any recommended protection scheme against this? Is an inline resistor sufficient?
HI, I have a strange issue with our STM32H747 board using the IS42S16400J SDRAM chip.We have been reading the "How to set up the FMC peripheral to interface with... - STMicroelectronics Community" page and this all seems OK.The differences between the system described and our board is that we have 8 MB RAM instead of 32 MB and we do not use the byte lane select signals (LDQM and UDQM from the SDRAM chip are routed to ground). When writing to SDRAM, we see (random) writes to the other 32 bits word within the same 64 bits. This is true for both 16 and 32 bits write from the CM7 core. So writing 0x12345678 to address 0 in the SDRAM results in a random value being written to address 4. Same applies when writing to address 4 - there I see a random value appearing at address 0. If I first write 0x12345678 to address 0 and then 0xaa55aa55 to address 0x14, I see the value 0x12345678 being writting to address 0x10.This is almost as if the processor performs a 64 bits write with the lower o
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 there at @Pavel A. I've implemented USBCDC as a device In stand alone mode successfully I intend on implementing CDC host stand alone that is to say without X-thread RTOS.The generated files from cube MX don't have Read_run and Write_run functions for stand-alone when implementing the host side which makes me wonder if it is achievable you to have USBx as a host in stand alone.
Hi everyone,I am working on a custom board based on the STM32F429I MCU (RMII mode) and I am trying to integrate LwIP with a DP83848 PHY.At the moment, I am unable to get Ethernet working. The issue appears during PHY initialization — the code blocks while trying to communicate with the PHY over MDIO.Project ContextMCU: STM32F429IPHY: DP83848 (RMII mode)Middleware: LwIPDevelopment tool: STM32CubeIDE (project originally generated with CubeMX, but I cannot re-generate it now due to version mismatch)ETH driver: HALI have tried:Using the LwIP stack with the HAL ETH driverAttempting raw Ethernet (without LwIP)In both cases, the system gets stuck during PHY initialization.Observed BehaviorThe code freezes when accessing PHY registers (MDIO communication).When debugging, execution appears to stop when checking or configuring the ETH clock.The PHY does not respond to register reads.Suspected CauseI suspect either:The RMII clock (50 MHz reference clock) is not correctly generated or routed.The P
Hi All, I have been using SPI1 over DMA2 on Zephyr RTOS recently to read my external flash. I had done similar thing on Bare metal / FreeRTOS based program. Both of them work fine. However, there is a problem in Zephyr based implementation of its driver compared with what i developed on Bare Metal. I configure the SPI1 to use its full possible clock 42MHz on both platforms. On my bare metal platform it runs at full 42Mbps but on Zephyr it starts giving read errors. However, if i reduce the clock to < 42MHz (to which zephyr driver forcelly rounds it down to 21MHz) it works fine.Here is my dts node of spi1 for my development board: &spi1 { pinctrl-0 = <&spi1_sck_pb3 &spi1_miso_pb4 &spi1_mosi_pb5>; pinctrl-names = "default"; clock-frequency = <42000000>; // 42MHz dmas = <&dma2 2 3 (STM32_DMA_PERIPH_TO_MEMORY | STM32_DMA_MEM_INC | STM32_DMA_PRIORITY_HIGH) STM32_DMA_FIFO_1_4>, <&dma2 3 3 (STM32_DMA_MEMORY_TO_PERIPH | STM32_DMA_M
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?
I am using below component toolsMCU: STM32H750IBT6IDE: STM32CubeIDE Version: 1.20.0GUI: TouchGFX Version: 4.26.0SDRAM: IS42S32400J-6TLIFLASH: MT25QL512ABB8ESF-0SIT (QUADSPI) I have made my own external loader that proves works for the QUADSPI IC using this video: https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-moocs/external_QSPI_loader.html Thank you in advance!
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'm trying to establish communication with FDCAN and view the signal via PCan View, but nothing appears on the screen. There are no errors in the connections. These are the codes: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2026 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ---------------------------------------------------------
Hi all,I am currently trying to merge the STM32N6 VENC_SDCARD Project with my Codebase that is based on the STM32 Modelzoo Object Detection (https://github.com/AlexGraefe/STM32N6CameraEvaluation). However, naively copy-pasting the code does not work. For most resolutions, the generated h264 streams are wrong and for the others, the code crashes at weird places e.g., when leaving a function. As the only difference between my code and the VENC_SDCARD example is the linker script, I was wondering if wrong memory allocations might be the reason for this. The heap in the object detection example is placed on AXISRAM1, which might too small. However, I am unable to place the heap onto other parts of the RAM (internal or external), without the program crashing directly upon startup.Copying the linker script provided by VENC_SDCARD also does not work as then, I run into compilation errors stating the code uses too much RAM (as buffers for images are placed in different regions).Moreover,
I use STM32F407 with internal PHY What external elements need I for connecting USB flash to MCU?
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) {
HiCan anyone please show me an example of a working USB CDC Host sending the SetControlLineState command? This hasn't been implemented in the STM32 HAL drivers/middleware but it should be a simple thing to add.SetControlLineState is used to signal the Host is ready to receive data from the CDC device. I tried adding and calling my own routine after the USB enumeration completes:USBH_StatusTypeDef USBH_CDC_SetControlLineState(USBH_HandleTypeDef *phost) { phost->Control.setup.b.bmRequestType = USB_H2D | USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE; phost->Control.setup.b.bRequest = CDC_SET_CONTROL_LINE_STATE; phost->Control.setup.b.wValue.w = 3U; phost->Control.setup.b.wIndex.w = 2; phost->Control.setup.b.wLength.w = 0; return USBH_CtlReq(phost, 0, 0); }The transmitted data appears to be correctly formed but the phost->RequestState appears to get stuck on CMD_WAIT expecting a reply from the device which I understand is not part of the CDC proto
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.