Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
Hello,I have taked a look at this post: I’m trying to do same at a H533 project: a non secure App (without trust zone), I have the same issue, the example works well, but when I try to use without secure image the example doesn’t work. Will be great to have support from ST.Kind regards
I'm using an STM32G431 and MCSDK 6.4.1. It's a 340 VDC BLDC motor with two pairs of magnets, running in FOC mode with HAL sensors. The motor works well most of the time, but it often starts in the wrong direction and then returns to the correct direction after a few revolutions. This happens when trying to move forward or backward. Sometimes the motor goes into "hard commutation"—the current is higher at about half the normal current, and a sound indicates that the rotation isn't as smooth as usual. I tried adjusting the HALL_PHASE_SHIFT setting in 15-degree increments and settled on the smoothest rotation in both directions. Debugging the HAL sensors showed stable sector readings in both directions and no interference in these signals.What else can I try to make rotations reliable? Would an oscilloscope help?
TouchGFX Designer: 4.26.0I cannot share the project to reproduce the bug unfortunately.I removed several custom containers in the Container tab. In several places in the Screens tab a yellow dot appeared for some now incomplete screen interactions (expected behavior). However, when generating sources/saving the project I got the following error```txt2026-07-16 14:45:05,342 [1] ERROR TouchGFXDesigner.App: Object reference not set to an instance of an object.System.NullReferenceException: Object reference not set to an instance of an object. at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(TriggerCustom t) at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Interaction i) at System.Linq.Enumerable.IListSelectIterator`2.ToList() at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Screen s) at System.Linq.Enumerable.IListSelectIterator`2.ToList() at TouchGFXDomainModel.LoadSave.Serial.ToSerial.Convert(Application a) at TouchGFXDomainModel.LoadSave.Serial.ToSeri
I have an application that I must rotate motor for 3000 radian every 10 seconds, is it possible to use TC_SetCtrlPositonAngle function to set theta to 0 after every movement so that it does not overflow.
I am developing a device based on an STM32F746VET6 with two Ethernet ports. To implement this, I chose the KSZ8863RLL, as it provides two external Ethernet PHY ports and an RMII interface to the STM32.At the moment, Port 1 and Port 2 are both working correctly at 100 Mbps full duplex. I can successfully transmit and receive data through both ports. However, I cannot get Port 3 (the RMII CPU port) to establish a link.I'm a bit confused about the correct RMII interface connections. I am using Clock Mode 5, and my understanding is that the external 25 MHz crystal is internally multiplied to 50 MHz, with REFCLKO_3 providing the 50 MHz reference clock to the STM32. Is that interpretation correct?This is how I originally routed the RMII signals: After reading through the datasheet and application notes, I also came across the following information:Based on that, I bodged my PCB to match the recommended connections, but I still cannot get a link on Port 3.Has anyone successfully used the KSZ8
Hi everyone,I'm trying to program an STM32F0 MCU using an ST-Link/V2 through a TXB0108 voltage level translator module.My setup is as follows:ST-Link/V2 SWCLK, SWDIO, and nRST connected to the A-side of the TXB0108 STM32F0 SWCLK, SWDIO, and NRST connected to the B-side Both sides are powered appropriately according to the voltage translator requirementsHowever, when I connect the translator module, I observe that the nRST pin from the ST-Link/V2 drops to 0V. If I disconnect the TXB0108 and connect the ST-Link directly to the MCU, the nRST line remains at the expected VTref level (3.3V).I'm trying to understand what could be causing this behavior. Some questions I have:Is the TXB0108 suitable for SWD programming signals, especially the nRST line? Could the auto-direction sensing of the TXB0108 be interfering with the ST-Link reset signal? Are there any known issues with using TXB/TXS translators on SWD interfaces? What measurements or checks would you recommend helping isolate the probl
Hello,I am evaluating sensorless FOC on a NUCLEO-G474RE combined with the EVLDRIVE102BH power board using the STM32 Motor Control SDK (MCSDK).While configuring the project in MC Workbench, I noticed that the HSO (High Sensitivity Observer) option is disabled/unavailable for this hardware combination.From my understanding, HSO requires both current sensing and phase-voltage measurements. The STM32G474RE appears to have sufficient ADC resources, and the EVLDRIVE102BH includes phase-voltage sensing circuitry. Because of this, I am trying to understand what prevents HSO from being available for this setup.Could anyone familiar with HSO support help clarify the following?Why is the HSO option disabled when selecting NUCLEO-G474RE + EVLDRIVE102BH in MCSDK? Is the restriction due to: Hardware limitations of the NUCLEO-G474RE or EVLDRIVE102BH? ADC/channel allocation requirements? Phase-voltage sensing implementation requirements? MCSDK board support restrictions? ST validation/support pol
Hi Team,I'm designing a custom board around the STM32N657X0H3Q and evaluating whether I can replace the reference MX66UW1G45GXDI00 (Macronix, used on the STM32N6570-DK) with the ISSI IS25WX01G-JILE (24-ball LFBGA, 1Gb, 1.7–2.0V Octal DDR NOR flash 166MHZ) as the external boot flash.My questions:Does the STM32N6 stage-0 (ROM) bootloader have hard-coded protocol/timing parameters tied specifically to the Macronix MX66UW1G45G, or is there a way to configure it for a different vendor/command set (e.g., via OTP, option bytes, or FSBL configuration)? Is JEDEC manufacturer ID checked/enforced anywhere in the boot chain (ROM bootloader, FSBL, or STM32CubeProgrammer external loader) in a way that would reject a non-Macronix part? Has anyone successfully booted an STM32N6 from a non-Macronix Octal DDR/OPI flash (e.g., ISSI, Winbond) by writing a custom BSP/XSPI driver, or is the boot ROM's dependency on the Macronix command set a hard blocker regardless of driver customization? Has the IS25WX01G
Hello ST community,Is there a way to find information about how many bytes I've written to the flash memory of a certain memory area at some memory address (not starting at 0x0800000, but at 0x0802000)?When I first power up, the byte counter is initialized to 0, and as I write bytes from address 0x0802000, I count the number of bytes, and at that point, I get the information about the number of bytes written.But my goal is to know how many bytes I've previously written when I power cycle the STM32H7 MCU. Is there an option that counts the number of bytes written to the flash memory and automatically stores that information somewhere in the memory?If so, which memory and at what address?Thanks to anyone who can help me.Regards
Hi ST team,We are using STM32L071 for the system bootup application. We are observing that for few of the boards - NRST was asserting due to which ST MCU fails to boot. Our initial suspect was on 3.3V Power rail. We did an experiment as below:- When the injected residual voltage reaches approximately 0.25V on the 3.3V rail, the U1501 fails to start up.- When the residual voltage is below 0.20V or above 0.30V, the U1501 starts up normally.What might be the possible reason for NRST pin getting low? Please find the schematics and probed NRST pin.
Hello, I connected an ILI9488 480x320 display on a STM32U5 using FMC in 16-bit mode.I transfer the framebuffer to the display using GPDMA in 2D mode, and all works fine.But only as long as I transfer the entire framebuffer or a rectangular region that takes the full width of the screent, where rect_y >= 0 and rect_height < =DISPLAY_SIZE_Y and rect_x = 0 and rect_width = DISPLAY_SIZE_X. This way one line in the frambuffer follows the next line, an easy task for the GPDMA, where 2D mode is inrelevant.Things don’t work out well when I want rect_x > 0 and rect_width < DISPLAY_SIZE_X, so a random rectangle somewhere from the framebuffer. This way for each new line the GPDMA needs to skip (DISPLAY_SIZE_X - rect_width) pixels to arrive at the next data in the framebuffer. I haven’t been able to configure that. The output image gets extremely slanted and extremely resduced in vertical size if if I make the rectangle 4 pixels more narrow than the display horizontal resolution.I hope
Using the latest CubeMXIDE, CubeIDE, and drivers.Custom hardware driving an ILI9341 through SPI1 Driver (attached) writes column and page registers, writes RAMWRITE command, and then transfers in one of three methods: blocking, IRQ, and DMA.blocking works fine, so the hardware and commands are proper.IRQ and DMA do not work. Working specifically on DMA at the moment.Software for the driver next: case ROTATE_180:{// checked valid// new design driver, landscape mode, draws left to right// note: DISPLAY IS IN native landscape MODE// range is 0-319 and 0-239// reverse X if not commented out// data.x0 = 319-data.x0;// data.x1 = 319-data.x1;// reverse Y if not commented out// data.y0 = 239-data.y0;// data.y1 = 239-data.y1;minmax (data.x0, 0, 319);minmax (data.x1, 0, 319);minmax (data.y0, 0, 239);minmax (data.y1, 0, 239);if (data.x1 < data.x0) swap(data.x0,data.x1);if (data.y1 < data.y0) swap(data.y0,data.y1);#ifdef _LVGL// com_addr[0] = ILI9341_PASET;// com_data[0] = (319-data.x1) &
Hello,I am trying to extend DTCM to 256K. I followed FLEXMEM Configurations example but I get HardFault as soon as I try to access DTCM in 0x30020000 - 0x30040000 address range. Could someone please provide working example of how to extend DTCM to 256K?
is their official library for the BNO085 whil using with stm i found the one to used with ardiuno but not one for stm https://github.com/adafruit/Adafruit_BNO08x/blob/master/src/Adafruit_BNO08x.cpp
I’m starting to work with the STM32F411E‑Discovery board and I’d like to use it for real‑time audio filtering. I’m using the onboard MEMS microphone together with the mini‑jack audio output.I’m currently struggling with configuring the clock settings correctly — I’m observing a variable timing drift between the microphone input and the audio output.Could you advise on the proper clock configuration for this setup, or point me to an existing project or example that demonstrates real‑time audio processing on the STM32F411E‑Discovery?
MCU: STM32H753IITxPeripherals: FDCAN1 and FDCAN2Baud: Nominal 1 Mbps, Data 2 Mbps (FDCAN_FRAME_FD_BRS) Question:Can FDCAN RX/TX use DMA on STM32H7 (like UART/SPI), or is Message RAM + interrupt/polling the only supported path?What I understand so far:- FDCAN stores frames in shared Message RAM (RX FIFO0/FIFO1 / TX FIFO)- CPU reads with HAL_FDCAN_GetRxMessage() after interrupt or by polling- I do not see HAL_FDCAN_Receive_DMA() / Transmit_DMA() in the H7 HAL What I need:1) Official confirmation: DMA for FDCAN frame RX/TX on H753 — supported or not?2) If not supported, recommended approach for higher load (40 slaves, periodic SCAN):- interrupt + FreeRTOS queue, or- polling in a task, or- something else?3) If any DMA/MDMA trick is possible for Message RAM copy, is it recommended by ST? Thank you.
Hi, I have a bldc motor with encoder, the output current waveform is not sinusoidal. i have used motor profiler to measure rs=0.2mOhm and ls = 0.6mH. what should I do. I also cant tune the pid so that the rpm of motor will be constant under load.
Greetings! A custom H523-based board has a 4-header connector [3.3V, SWDIO, SWCLK, GND] that I used with an external STLINK-V2 dongle connected to my laptop. Is it possible to debug this board using STLINK-V3 on my NUCLEO-U545RE-Q? Section 7.3 of the manual, Embedded STLINK-V3EC, does not mention this. Thanks.
Hello,We are currently designing a board using an STM32H563VI and an ADIN1200 Ethernet PHY. The design is still at an early stage, and no prototype hardware has been built yet, so we can still change the interface from RMII to MII if necessary.The planned RMII conditions are as follows:* RMII reference clock: 50 MHz* I/O voltage: 3.3 V* STM32 GPIO speed: OSPEEDR = 10 (High speed)* I/O compensation cell: Enabled* ADIN1200 minimum setup time: 4 ns* ADIN1200 minimum hold time: 2 ns* Application ambient temperature range: −20°C to +50°CAccording to the STM32H563 datasheet, the maximum delay from the RMII_REF_CLK rising edge to TXD[1:0]/TX_EN valid is 15.5 ns. Therefore, the worst-case setup margin appears to be:20 ns − 15.5 ns − 4 ns = 0.5 nsThis calculation leaves only 0.5 ns of margin before considering PCB trace skew, capacitive loading, and the difference between the STM32 timing measurement threshold of 0.5 × VDD and the RMII/ADIN1200 timing thresholds.This is my first time designing
I am using STM32L431RCT6 controller, configured RTC with external LSE (32.768 KHz), for which my controller is not working, not booting up for normal process, everything is stopped. But when i switch from LSE to LSI, everything works fine. Why does this happen? Also changed the LSE low drive capability to high, still having the same issue.
Dear ST Support Team,I am developing a custom bootloader for the STM32L071CBY6TR (128 Kbyte, dual-bank Flash) and I have a question regarding the exact behavior of the Flash controller that I could not fully clarify from RM0367.Context:- My bootloader occupies the first 32 Kbytes (0x08000000 - 0x08007FFF), entirely within Bank 1.- My application occupies 96 Kbytes starting at 0x08008000, which means it spans across the Bank1/Bank2 boundary at 0x08010000: the last 32 Kbytes of Bank 1, and roughly 64 Kbytes of Bank 2.RM0367 states that read operations from one bank can be performed while write or erase operations are performed on the other bank (cross-bank read-while-write). However, I could not find documentation describing the behavior when a write/erase operation is performed on one bank while code execution (instruction fetch) continues from a *different page within the same bank* — which is exactly my bootloader's situation when it needs to erase/program the tail portion of Bank 1 t
Hello wonderful ST Community!Before I get into the question, a bit of background on this project. I'm creating a button panel HID gaming device for the space sim Elite Dangerous. Using its somewhat limited API I'm hoping to feed info about the game state back to a 9 inch screen on the HID device through USB CDC running composite with HID. Before I start getting into hardware dev I want to create a sim of the GUI to test two things:- size of display needed to show what I want to show- getting data out of the game (will be done with a USB CDC app/driver/python (I have not quite got this far) running on the host computer)It would be amazing to test these two aspects using the GFX simulator. I known it's theoretically possible to send data through some medium such as sockets but how does this work in practice?Is there some good documentation around how the simulator works and how I can feed data into my sims?I've been investigating using VSCode since GFX already has compatibility, but how
I need to transfer files from my hardware (STM32H723 based) and a PC, using an USB port, just like an USB disk; my hardware uses a FT234XD USB interface chip (UART connection) and an EEPROM where I save the data.Anyone may help me to understand how to do it ? Thank you
Hiya. I’ve been trying to implement a double buffer with the GPDMA for a week now. I’m trying to capture an image using DCMI. I can get it to work with a single buffer, but I have not been able to get it to work with two LL nodes and two buffers.I want the GPDMA to go between bufferA and bufferB, so I can process the alternate node i.e., if the DMA is loading into buffer B, then I process A. A simple ping-pong.I’m not sure how I’m supposed to alter my current approach with a single buffer to two. This is what I have for my linked list setup in MX_DCMIQueue_Config.... pNodeConfig.SrcAddress = 0; pNodeConfig.DstAddress = (uint32_t)bufferA; pNodeConfig.DataSize = DB_SIZE_WORDS; /* Build DCMI_Node1 Node */ ret |= HAL_DMAEx_List_BuildNode(&pNodeConfig, &DCMI_Node1); /* Insert DCMI_Node1 to Queue */ ret |= HAL_DMAEx_List_InsertNode_Tail(&DCMIQueue, &DCMI_Node1); /* Set node configuration ################################################*/ pNodeConfig.DstAddress = (uin
What is the MSL Level for part STM32G030F6P6 in a TSSOP package?
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.