Get ready for the STM32 Summit 2026 | Online, November 3
Ask questions and find answers on STM32 microprocessors, including hardware, power, DRAM, flashing, interfacing, device tree, and peripherals.
Most recent activity
Hi all,I'm trying to get a USB Gadget device working in Linux on the STM32MP257F-DK board to expose a Mass Storage device to another system. I'm trying to use CN15 for this function but I can't get the bound gadget to show up on the other side of the USB connection.I'm using a fork of github.com/STMicroelectronics/linux?branch=v6.6-stm32mp where I've modified the usb3dr node of the dk.dts file with the following things:1. 836 &usb3dr { 837 status = "okay"; 838 839 dwc3: usb@48300000 { 840 phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>; 841 phy-names = "usb2-phy", "usb3-phy"; 842 usb-role-switch; 843 dr_mode = "peripheral"; 844 port { 845 dwc3_ep: endpoint { 846 remote-endpoint = <&typec_ep>; 847 }; 848 }; 849 }; 850 };2. 840 - phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>; 841 - phy-names = "usb2-phy", "usb3-phy"; 842 840 usb-role-switch; 843 - dr_mode = "peripheral"; 841 + role-switch-default-mod
I entered the lengths of the DDR traces from the ST official evaluation board into Excel, and the maximum length deviation is 3 mm. Is the trace routing on the evaluation board reasonable, and can I reuse it directly on my own board?
Hi,We use the USB OTG controller in host mode with its internal FS PHY.Our DT node is the following:&i2c4 { ... pmic: stpmic@33 { compatible = "st,stpmic1"; ... regulators { compatible = "st,stpmic1-regulators"; ... pwr_sw2-supply = <&vin>; ... vbus_sw: pwr_sw2 { regulator-name = "vbus_sw"; regulator-active-discharge = <1>; }; }; };};&usbotg_hs { compatible = "st,stm32mp15-fsotg", "snps,dwc2"; pinctrl-names = "default"; pinctrl-0 = <&usbotg_hs_pins &usbotg_fs_dp_dm_pins>; dr_mode = "host"; vbus-supply = <&vbus_sw>;};&pinctrl { usbotg_hs_pins: usbotg-hs-0 { pins { pinmux = <STM32_PINMUX('A', 10, ANALOG)>; /* OTG_ID */ }; }; usbotg_fs_dp_dm_pins: usbotg-fs-dp-dm-0 { pins { pinmux = <STM32_PINMUX('A', 11, ANALOG)>, /* OTG_FS_DM */ <STM32_PINMUX('A', 12, ANALOG)>; /* OTG_FS_DP */ }; };};This configuration was perfecly working with ST linux v5.10-stm32mp-r2.1.We bumped ST linux to v6.6-stm32mp-r1 and issues appeared with
Following the guide for the Developer Package, it describes creating a helper script for your custom board. Thhat works great and helps get you going. So, I generated a STM32CubeMX project and built it. Device Tree files are generated accordingly. STM32CubeMX gives them names of the format <device>-<stm32cubemx proj name>-mx. These names cannot be changed as the dts files include each other.The helper script lets you set names for all these files e.g.# Name of devicetree to use # Optee dt name optee_dt_name=$your_board_name optee_dt_programmer_name=$your_board_name # U-boot dt name uboot_defconfig=${your_soc_name}_defconfig uboot_dt_name=$your_board_name uboot_programmer_dt_name=$your_board_name # TF-A dt name tfa_dt_name=$your_board_name tfa_dt_programmer_name=$your_board_name # Linux kernel dt name # linux linux_dtb_name=$your_board_nameBy default, these do not match the names generated by stm32cubemx. Even if I change the entries to mat
Following the tutorial here, when I get to the step "To generate binary to flashing via Cortex-A", the helper script fails to build when given the 'programmer' argument. The problem appears to be incorrect configuration of the path to a device tree file. All other steps in the tutorial build correctly using the device tree files given, just not the programmer step fails.The output is shown below. In it you can see the following paths are supplied:EXTDT_DIR=/home/ashley/STM32MPU-Ecosystem-v6.2.0/Developer-Package/stm32mp2-openstlinux-26.02.18/sources/STM32MP215DK-AshMX EXTDT_DIR_OPTEE=CA35/DeviceTree/STM32MP215DK-AshMX/optee-osThe correct path to the dts file is ${EXT_DIR}/${EXTDIR_DIR_OPTEE}, but the path actually searched for the dts file is (refer line 58 in the log below):/home/ashley/STM32MPU-Ecosystem-v6.2.0/Developer-Package/stm32mp2-openstlinux-26.02.18/sources/STM32MP215DK-AshMX/stm32mp2/a35-td/optee/Full log is:sdk_compilation-stm32mp2-mx-my-custom-board
Platform:SoC: STM32MP257Sensor: GC05A2 (5MP)Interface: CSI-2 Issue:I'm working on camera integration with GC05A2 on STM32MP257. The raw image quality is acceptable, but after enabling AWB and CCM in the ISP pipeline, the output image shows severe noise (both luminance and color noise), especially in low-light conditions (<300 Lux) or shadow areas.Questions:Where is the noise reduction? Does STM32MP257 ISP have built-in hardware noise reduction (2D/3D NR)? If yes, how do I enable and control it through V4L2 or the driver?
Hello everyone,I have a custom board based on STM32MP157A (rev. Z) and I am trying to boot from emmc; I am able to boot sucessfully from SD card; I flashed the same image to the emmc with the ST MX Cube Programmer and, if get into u-boot from SD card, I am able to inspect the partitions and information of the emmc (see below), but whenever I set the boot pins to 010 I get no messages on the serial UART, while the emmc seems to be powered. STM32MP> mmc list STM32 SD/MMC: 0 (SD) STM32 SD/MMC: 1 (eMMC) STM32MP> mmc info Device: STM32 SD/MMC Manufacturer ID: 2 OEM: 544d Name: SA04G Bus Speed: 50000000 Mode: SD High Speed (50MHz) Rd Block Len: 512 SD version 3.0 High Capacity: Yes Capacity: 3.6 GiB Bus Width: 4-bit Erase Group Size: 512 Bytes STM32MP> mmc dev 1 switch to partitions #0, OK mmc1(part 0) is current device STM32MP> mmc info Device: STM32 SD/MMC Manufacturer ID: 45 OEM: 100 Name: DG400 Bus Speed: 52000000 Mode: MMC High Speed (52MHz) Rd Block Len: 512 MMC version 5.1
I'd like to move from mickledore to the current ST offering on scarthgap. We are using the STM32MP157D.We require a web browser, and WebKit worked well for us on mickledore using QT5.Since QT has been spun out to a plug-in and it is unclear how well-supported it is (ST's documentation seems lagging), I decided to go with Weston/Wayland and use a simple GTK/GDK app.Westion is working - the GPU `/usr/local/demo/bin/weston-st-egl-cube-tex` runs nicely. Simple apps using GDK are also working.Sadly, though, the app embedding a WebKit view has a hard-to-describe random flickering issue. It renders the page but then randomly overlays a white screen that occasionally flashes on and off. Anyone able to offer some experience:- Has anyone got a lightweight browser working on the STM32MP1 using the GPU and the recent ST scarthgap releases?- Or got QT6 working on STM32MP1. Did you use the ST's "QT plug-in"?- Any advice for configuring webkitgtk3 (found in meta-oe)? 
I would like to use MDMA on Cortex M4 to move data from DDR to SRAM in order to overcome the SRAM size limitation, especially in Ecosystem 6 secure context when a SYSRAM bank is dedicated to OPTEE.My idea is to move to DDR some data structures used by code running on Cortex M4 and, when needed by the code, to use MDMA to move such data from DDR to SRAM and then to unload such same structures from SRAM to DDR.I found that MDMA is the preferred way to move data DDR <-> SRAM, but it isn't supported by STM32 MCUs Embedded Software.https://wiki.stmicroelectronics.cn/stm32mpu/wiki/MDMA_internal_peripheral#Software_frameworks_and_driversDo you have any suggestion about how to proceed ?
ST Dev team have successfully created a web browser with Qt WebEngine and deployed that into the MP257 processor.The browser has been made in kiosk mode. There is no official benchmark about that scenario.My question is how well supported is the MP257 from Qt6 WebEngine? By looking at the Qt WebEngine features https://doc.qt.io/qt-6/qtwebengine-features.html It seems that the Qt WebEngine have lots of stuff in the box. Are all features from Qt WebEngine possible to enable inside a web browser for MP257?I'm more interested in WebRTC, HTML5 DRM, Hardware acceleration, WebGL, WebSockets. DOM Extensions, Vulkan support API.This is a question about hardware, rather than software. My goal is to create optimized kiosk mode web browser of specific dynamical web pages.I'm targeting web pages such as Netflix, GeForce Now, Spotify etc. I don't have any high requirements on resolution. Max 1080p, which is supported by MP257.
I am stuck trying to run STM32MP215DK M33 firmware examples on an (unmodified) ostl distribution I built.I went through the getting started tutorials no problems, now starting to experiment with customisation, but have got myself stuck. Some advice would be appreciated. This STM32MP ecosystem is quite overwhelming to the uninitiated, especially once you add in trusted firmware.As per this page, I loaded the image FlashLayout_sdcard_stm32mp215f-dk-ca35tdcid-ostl-m33-examples-optee.tsv. I have been playing with building and debugging the various example projects for M33.When trying to alter the M33 examples, I came up against the hardware firewall. It became clear that I was going to need M33 access to ports and peripherals that were currently allocated to the A35 core. I still haven't worked out how to solve that yet. But ultimately a custom kernel layer will be required, so I started looking into that.As per this page, I built the default linux
Hello,I am testing a custom board based on STM32MP257FAI3 with two DDR4 MT40A512G16And STM32DDRFW-UTIL cann't pass through PHY initialization. I found that CubeMX 6.17.0 still allows DDR A19 pin mapping, despite the pin A19 isn't assignable for both DDR3 and DDR4. (STM32CubeMX 6.12.1 released). So I've assigned BA0 signal to it on PCB. And I think this cause STM32DDRFW-UTIL to be failed.Is there any way to resolve this programmatically?
Hi,Can I use only M33 core as a standalone controller on stm32mp257 evaluation board without need of linux operating system and DDR
I spotted that the documentation and code examples do not match for port pin assignments for LED2 and LED 4.The user manual manual does not match the schematics:Code examples do match the schematics, so just a documentation error I think.EDIT: There is definitely some sort of misalignment here. The Linux device tree (stm32mp215f-dk.dts) puts the blue LED on PZ3. And when controlled on/off or heartbeat through Linux, the blue led labelled LD2 on the dev kit is controlled. So this seems to match the user manual! gpio-leds { compatible = "gpio-leds"; led-blue { function = LED_FUNCTION_HEARTBEAT; color = <LED_COLOR_ID_BLUE>; gpios = <&gpioz 3 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; default-state = "off"; }; };I can only assume the LED labelled LD4 on the dev kit is wired to pin PF10?
HiI'm trying to configure a camera chip (Nextchip nvp6324) that outputs mediaformat MEDIA_BUS_FMT_UYVY8_2X8.There are examples to setup IMX335 sensor to a CSI-2 interface, but how to configure this format ? BR Raimo
Hi Team,I am working on a custom STM32MP255 board with OpenSTLinux (Yocto, kernel 6.6).I want to use USART6 only in Linux (no need in TF-A or U-Boot).Console is on USART2 (ttySTM0). USART6 is intended for RS232 communication.Device Tree Configuration (Linux)Aliases aliases {serial0 = &usart2;serial1 = &uart5;serial2 = &usart1;serial6 = &usart6;ethernet0 = &eth1;};Pinctrl configuration usart6_pins_mx: usart6_mx-0 {pins1 {pinmux = <STM32_PINMUX('F', 5, AF6)>; /* USART6_TX */bias-disable;drive-push-pull;slew-rate = <0>;};pins2 {pinmux = <STM32_PINMUX('F', 4, AF6)>; /* USART6_RX */bias-disable;drive-push-pull;};};usart6_idle_pins_mx: usart6_idle_mx-0 {pins1 {pinmux = <STM32_PINMUX('F', 5, ANALOG)>; /* USART6_TX */};pins2 {pinmux = <STM32_PINMUX('F', 4, AF6)>; /* USART6_RX */bias-disable;drive-push-pull;};};usart6_sleep_pins_mx: usart6_sleep_mx-0 {pins {pinmux = <STM32_PINMUX('F', 5, ANALOG)>,<STM32_PINMUX('F', 4, ANALOG)&
I'm running a build with meta-webkit on the scarthgap branch for the STM32MP257-EV1. I'm trying to get a web browser working for a custom web page and the performance is pretty poor and I'm not quite sure why. It seems like there's a lot of people doing a similar project but not a lot of hard benchmarking so I'm partially hoping we can make this thread to provide help for people in the future and also maybe I can figure out why my build is running so slow.Here's a more minimal example that anyone should be able to test.If I run cog https://webglsamples.org/aquarium/aquarium.htmlset it to 500 fish, and then look at top. I get about 79% cpu usage for wpewebkit and the output of /sys/kernel/debug/gc/load is:The previous 100ms HW load device : 0 core : 0 load : 62.26%The screen connected via LVDS has a noticeable lag.If I set the fish count to 100 then there's no lag. I know using a web browser on the MPU is pushing it's capabilities but it would be awesome if someone could confirm
Hi, I am currently working on a project that requires us to install a browser on our board. We are using an STM32mp25, which is using the Mickledore image. I am finding that the meta-browser layer is not compatible with Mickledore, and if I'm not mistaken meta-browser only runs on Scarthgap. What I've tried to do is switch my layers to the Scarthgap branch, and unfortunately what I find is that from my conf/local.conf is that the stm32mp25 is not a recognized maching (MACHINE = "stm32pm25"), meaning that the stm32mp25 is not supported on Scarthgap. Has anyone successfully installed a browser on the stm32mp25 (eval board)? Any help would be greatly appreciated! For reference I was following along with this demo https://www.digikey.com/en/maker/projects/intro-to-embedded-linux-part-2-yocto-project/2c08a1ad09d74f20b9844e566d332da4
Hi, I am working with the STM32MP25 and trying to use the I2C peripheral from the Cortex-M33 coprocessor.The STM32MP25 includes an Arm Cortex-A35 core running Linux and a Cortex-M33 core for real-time applications. I am able to successfully load and run a basic firmware on the Cortex-M33 using remoteproc. However, when I enable and initialize the I2C peripheral in the M33 firmware, the system hangs and eventually restarts. After investigating, I learned that the RIFSC configuration must be updated to grant the Cortex-M33 access to the I2C peripheral. I applied a patch to modify the RIFSC settings accordingly, but the issue persists and the peripheral is still not accessible from the M33.I would like to know:Are there any additional steps required (beyond RIFSC configuration) to allow Cortex-M33 access to I2C?Is there official documentation or reference material explaining how to properly assign peripherals to the coprocessor using RIFSC?Are there any examples or recommended workflows f
Following the tutorial here, at step 8, I get to the part where you load firmware onto the dev kit, but I always get an error "No ST-Link detected". As far as I am aware, programming should be done over the USB cable, or UART, not ST-Link?The board is running Linux OK, UART terminal is working, so is IP over USB cable. The run configuration I have is show below. What am I doing wrong?I checked with STM32CubeProgrammer and there are no programming interfaces available over USB or UART, and no ST-Link..
I'm planning to use ImGui as framework for creating a GUI application on the MP257 processor.The ImGui is bloat-free e.g it only uses the GPU hardware (OpenGL, Vulkan, etc...) to visulize the graphics such as buttons, menu, labels etc.Will an application like this work smoothly in MP257?
I am working on a custom board with STM32MP133A cpu and Kingston EMMC08G-ML36 EMMC. The board boots fine from the EMMC, however if the board resets due to kernel panic and/or watchdog timeout it fails to boot from EMMC and enters DFU mode (where it hangs indefinitely). It looks like that after unexpected reset EMMC stays in 8-bit bus width and boot-rom fails to load the TF-A. The current workaround is to set bus-width to 1 in both u-boot and linux device trees. Is this boot-rom behavior described somewhere?Is there any way to reliably reset bus-width from 8 to 1 in case of unexpected STM32MP133A reset? Or to get out of DFU mode after some timeout, although in this case bus-width still has to be reset to 1 somehow?
Hello,I’m working with an STM32MP255 and want to access GPIOs from the Cortex-M33 coprocessor (not from the A-core/Linux side). I’m trying to understand the correct workflow and configuration steps so M33 firmware can drive/read GPIO pins. Specifically:1. Are there any reference examples or official documentation showing how to assign GPIO pins to the Cortex-M33 coprocessor (M33 execution context) using device tree and RIFSC configuration on STM32MP255 / STM32MP2 devices?2. Is there a step-by-step for RIFSC/firewall, resource assignment, or device tree overlays that shows how to move ownership of a GPIO from the Linux/A-core domain to the M33?3. I’m using STM32CubeIDE to build the M33 firmware. Under SystemCore → GPIO there is no checkbox to select the Cortex-M33 execution context for a GPIO. Is that expected? If so, how should I configure ownership (is it a device tree / RIFSC setting rather than a CubeIDE option)?
Due to the high cost of RAM. I wonder if ST have plans or other information about which 4GB RAM vendors fits MP25x products?I know that ST have information about other RAM vendors on their wiki. Only one 4GB vendor is mention there.I bought the 4GB RAM MT53E1G32D2FW-046 WT:C (single rank) from here when it cost 20 USD.https://www.aliexpress.com/item/1005009146059053.html but its seems to only having the DDR density to 8bits (2 GB). Perhaps it was only a 2GB or MT53E1G32D2FW-046 WT:B (dual rank)I'm still looking for other RAM vendors that can offer 4GB solutions for the MP25x. Question:Can ST write a criteria what a RAM memory need to have to fit MP25x? Do the RAM need to follow a specific RAM standard? What do I need to know to know if the RAM memory fits the MP25x?
Hi everyone,I am encountering an issue while trying to flash OpenSTDroid onto my STM32MP257F-DK board.I downloaded the Starter Package from the official website and used STM32CubeProgrammer for the installation. However, the flashing process consistently fails during the final stages.Could anyone provide the correct flashing procedure or suggest what might be causing this error? Below are the details of my setup:Starter Package Source: STM32MP2DroidSta | Product - STMicroelectronicsSTM32CubeProgrammer Error Screenshot: Thank you in advance for your help!
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.