Join discussions in the Product Forums. Ask questions, learn from your peers, and share insights on ST solutions to accelerate your design journey.
Most recent activity
Hello,in our application, running on a H533RET6 and with no TZ enabled, we need to close debug ports in production.I preliminarly did some tests using CubeProgrammer: I generated password-based credentials (obk+bin files, which as far as I understand from AN6008 is the only option when not in TZ) and successfully managed to lock the device by moving from PRODUCT_STATE Open (0xED) to Provisioning (0x17), supplying the .obk file and then lock the device (PRODUCT_STATE = 0x72). After verifying that debug ports were closed, I unlocked the device by making a discovery and providing the bin file, with the device returning into Open state. Note that the first 3 32-bit words of my obk file are:0x00, 0x01, 0xfd, 0x0f, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00Showing that the address base is the secure OBK base address and that the encryption is on (as it should be in my device, again as far as I understand).So far so good, but know I would like to move at least the encryption process
Problem SummaryWe have developed a three‑phase servo motor drive using STGAP2SICS isolated gate drivers and IPW65R190C7XKSA1 MOSFETs.The inverter works perfectly at low DC input voltage (25–40 V DC).However, when we apply 230 V AC (rectified ~320 V DC) and send control signals to the U, V, W inputs, MOSFETs Q1, Q2, Q9, and Q10 fail immediately, even under no‑load condition.Motor SpecificationsVoltage: 230 VPower: 2000 WRated RPM: 2200Gearbox Ratio: 5.067:1Test ConditionsParameter Low Voltage Test High Voltage Test Input Source25–40 V DC230 V AC (rectified)Output Frequency10 Hz36 HzModulation Index0.50.5Measured Current~2 A7–9 A (unexpected, no load)Dead‑time300 ns300 nsStart MethodInstant StartRamp‑upGate Driver IC UsedSTGAP2SICSNTRSymptomsOnly the U‑phase high‑side and low‑side MOSFETs fail (Q1, Q2).Same issue happens in the W‑phase (Q9, Q10).MOSFETs fail instantly as soon as the PWM is applied at high‑voltage input.No load connected to the motor during testing.AttachmentsFull schemat
My ST32N6 Discovery apparently works very well, however, when I enter the AI demo, the camera screen goes black, and two red LEDs light up on the RGB LEDs next to the connector.If I remove the camera, the DEMO alerts that there is no camera.There is no LED on the camera module to indicate its status.Are there any tests I can do to check if the camera is damaged?Unfortunately, I can no longer return it, as it has been more than 60 days since I received it and only today was I able to take the time to do a more in-depth study of the camera.
I'm trying to enable USART transmission (TX only for now) via DMA, but when I call HAL_UART_Transmit_DMA, the transfer doesn't seem to start at all and HAL_UART_TxCpltCallback is never called.I've configured everything through CubeMX: enabled USART with DMA, enabled FreeRTOS, and enabled interrupts. Without DMA, transmission works fine using HAL_UART_Transmit, but when I switch to HAL_UART_Transmit_DMA, nothing happens.I can't figure out what the problem might be. Does anyone have any suggestions?Here's my main code:/* 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 fi
Dear Sir/Madam,We used the STM32F072C8T6 processor in a project we carried out for the railway sector, and as stated in the link below, we currently need a SIL certificate to be able to submit it to the auditing firm.Link: https://www.st.com/resource/en/product_presentation/stm32_stm8_functional-safety-packages.pdf
With CubeIDE 1.x iterative development is simple1 Start CubeIDE and create new project. It is possible to select C++ project option at project start (without any effect)2 With Device Configuration Tool create initial perifery config. It is possible to open second windows for it and have two separate windows side by side. Generate code.3 Switch to first window and work with generated code4 If need new device, switcn to second window, add new device, config it and generate code.5 In first window regenerated code is created in sync with Configuration Tool. Convenient and logical steps. Great work!How iterative development can be done with CubeIDE 2.0?
Hi, I'm using SPC560D-Discovery and want to boot it via UART: I've closed J12 and J13 according to the UM1681 and then powered on the board. Since SPC5FlashProgrammer is not supporting SPC560D I connect and send messages manually with Python. According RM0045 I've set UART for 19200 baud rate (SPC560D has 16MHz osc) and sent the password, but the uC answered me with every second byte and I definitely see that with logic analyzer: 13:42:46.503 -> FE EF FA CE CA FE BE EF | I've sent 13:42:46.518 -> FE FA CA BE | response from board While according to the RM0045 it should echo the whole password. Same happens when the address is sent: it echoes only every second byte.Should I use other baud rate or should I start with some message for auto baud? How can I understand that now uC in auto baud mode?
What I want to achieve:During startup all code is verified, starting with SMiRoT (as root-of-trust) then SMuRoT, then SecureManager then non-secure application.If the application has been modified (vberification fails) the startup shall end in system bootloader.Unfortunately, this does not work as our tampered/modified non-secure application is still started/executed instead of jumping into bootloader.Secure manager is installed with the provisioning script. We have modified the BOOT_UBE setting via TrustedPackageCreator from 0xB4 (OEM-iRoT - user flash) to 0xC3 (ST-iRoT - system flash) and re-generated Option_Bytes.csvWhat I see is that when connecting the STM32CubeProgrammer, the value for BOOT_UBE still shows 0xB4.And in the log during SFI flashing (provisioning.py -v --sfi-flash) it shows this:DEBUG - Warning: Option Byte: BOOT_UBE, value: 0xB4, was not modified.DEBUG - Warning: Option Bytes are unchanged, Data won't be downloadedDEBUG - Time elapsed during option Bytes config
Good day I am currently trying to run the end_node sample located on the STM32Cube_FW_WL_V1.3.1 package. I would like to know if i can have some guideline on how to use LmHandlerDeviceTimeReq(). Which class do i need to use?What lora server allows the time request?How do i check if the MAC request is even sending? Should I see this on the Logs under my application located on the server?The request currently is not updating my system time. The request is currently being done in a callback after a successful join. static void OnJoinRequest(LmHandlerJoinParams_t *joinParams){/* USER CODE BEGIN OnJoinRequest_1 */if (joinParams->Status == LORAMAC_HANDLER_SUCCESS){APP_LOG(TS_ON, VLEVEL_L, "JOINED\n"); // Send time requestif (LmHandlerDeviceTimeReq() == LORAMAC_HANDLER_SUCCESS){APP_LOG(TS_ON, VLEVEL_L, "DeviceTimeReq sent.\n");}}/* USER CODE END OnJoinRequest_1 */}After the request is sent successfully, the below lines are never r
I am trying to build the readily given Nx_webserver project , i had selected the given example and just change the tool chain to STMcube IDE inorder to build the project with the cube ide after redirection to the cube IDE i just click on the build , it ends up with the following error: Spoiler (Highlight to read)12:03:20 **** Build of configuration Debug for project Nx_WebServer_FSBL ****make -j8 all arm-none-eabi-gcc "C:/Users/admin/STM32Cube/Example/Nx_WebServer/Middlewares/ST/threadx/common/src/tx_block_pool_performance_info_get.c" -mcpu=cortex-m55 -std=gnu11 -g3 -DRTL8211_INIT_TO=10000 -DETH_PHY_1000MBITS_SUPPORTED -DDEBUG -DUSE_HAL_DRIVER -DSTM32N657xx -DFX_INCLUDE_USER_DEFINE_FILE -DNX_INCLUDE_USER_DEFINE_FILE -DTX_INCLUDE_USER_DEFINE_FILE -DTX_SINGLE_MODE_SECURE=1 -c -I../../../Middlewares/ST/netxduo/ports/cortex_m55/gnu/inc -I../../../Middlewares/ST/threadx/ports/cortex_m55/gnu/inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -mcmse -
Hello ST Community,I am working on an industrial combo vending machine controller system and would like to request a design review / best-practice feedback for an architecture based on STM32H563ZIT6.System OverviewMCU: STM32H563ZIT6 @ 200 MHzOperation: Industrial application, 24×7 continuous operationArchitecture:Main / Process ControllerStepper Motor ControllerDC Load ControllerEach controller uses a dedicated STM32 MCU to separate process logic, real-time motor control, and power load handling.1. Main Controller – CPU Load & Memory UtilizationMultiple interrupt sources (flow sensors, actuator pulses, PWM capture)UART RS485 communication @ 115200ADC usage with DMAContinuous vs process-based CPU load classificationWorst-case CPU utilization < 20% (**Please check our attached Doc)RAM usage ~4.4%, Flash usage ~4% (Build Analyzer)Question:From STM best-practice perspective, is this CPU and memory margin considered sufficient for long-term industrial operation?2. Stepper Controller
Hello, I am using STPM34 smart metering chip to read 230 VAC voltages and currents. I am using 3 chips on 1 board:First 2 STPM34 measure 3 phases of 230 VAC voltages and currents, 3 STPM34 measures 16 multiplexed current channels and no voltage.I am communicating with all chips via SPI interface, I use CRC to verify communication. I also use auto Latch function on all chips and 2x current gain on all channels, these are all the settings I change every time it powers on. The problem I face is after long working time, from a few days to a week, I start to get wrong values from some chips. Sometimes I get wrong voltages, sometimes wrong currents. Currently I am getting 428 V on voltage channel that is measuring 250 VAC on a device that runs for 12 days. Previously I was getting 0 A on a current channels of a device that was running for 5 days. It depends on device that I use. I have 5 PCBs with assembled devices, currently testing 2 on long run and both return wrong values after some
# External Loader Issue: STM32U5G9ZJT6Q + MX25L12833FZNI-10G (Quad-SPI)## 1. Problem SummaryHello, I'm a novice developer who recently started working with embedded systems. I've been struggling significantly with implementing an external loader for several weeks now...I'm developing an external loader for **MX25L12833F** (16MB Quad-SPI NOR Flash) connected to **STM32U5G9ZJT6Q** via OCTOSPI1, but it continuously fails in STM32CubeProgrammer. The loader compiles successfully and generates a `.stldr` file, but programming operations fail.The problem is sector erase. Writing, reading, verification, and mass erase all function normally, but only sector erase does not work properly. What could be the reason? __attribute__((used)) int SectorErase(uint32_t EraseStartAddress, uint32_t EraseEndAddress) { OSPI_RegularCmdTypeDef sCommand; uint32_t SectorAddr; uint8_t status_before = 0; uint8_t status_after = 0; g_erase_input_start = EraseStartAddress; g_erase_input_end = EraseEndAddre
Hello, ADC_CR_ADCALLIN is described as "rw" . The procedure given in RM0456: 33.4.8 Extended calibration mode does not explicit recommend to reset ADC_CR_ADCALLIN after the procedure. I think it is helpfull to add in RM0456.
Hello, I have a problem with setting readout protection in the STM32L496 device in software. The protection is set to "BB". After setting and power on reset, the microcontroller seems to not work (it looks like as if it was "stuck up"). I connected the ST-Link programmer and run STM32Cube programmer and it shows option byte RDP set correctly to BB value. Also, in the FAULT ANALYZER section it displays "CPU: LOCKUP". I don't know why it happens and how to solve it. The software code that sets the RDP protection is shown below: __disable_irq(); while (FLASH->SR & FLASH_SR_BSY); FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB; FLASH->OPTKEYR = 0x08192A3B; FLASH->OPTKEYR = 0x4C5D6E7F; FLASH->OPTR = 0xFFEFF8BB; FLASH->CR |= FLASH_CR_OPTSTRT; while (FLASH->SR & FLASH_SR_BSY); FLASH->CR |= FLASH_CR_OBL_LAUNCH;
I am currently working on deploying a quantized Int8 TFLite model (ECG classification) onto the NUCLEO-N657X0-Q board using X-CUBE-AI.The Issue: I have successfully flashed the FSBL, Application, and Model Weights . The system boots up, and the inference loop runs without errors. However, the model always predicts "Class 0" (Normal) , even when I feed it hardcoded input data that corresponds to "Class 1" (Abnormal).The Problem: I performed a deep-dive debugging session by pre-filling the tensor arena (SRAM) with a garbage pattern (0x55) before every inference to check if the NPU is actually writing data.My Findings:Input Data: The input buffer is correctly updated for each sample (verified via printf).Layer-by-Layer Failure:Ep2 (MaxPool) & Ep5 (Logits): The memory at these output addresses remains 0x55 55 55.... This indicates the NPU failed to write to these SRAM addresses.Ep3 (Gemm1): The output is static and does not change with input.Ep4 (Gemm2): Surprisingly, this layer's
Can multiple versions of a software be installed on one computer or system? The latest version I recently downloaded doesn't include MX. Should I install version 1.19.0, or use the uninstallation method for version 2.0.0?
My original aim was to prove to myself that I was able to measure execution time with cycle accuracy. In order to do that, I have 9 'test_dwt' functions, they all have same code except number of nop between 2 reads of DWT.That gives unexpected results because M55 has dual-issue capability, as people explained here. Nevertheless, I am puzzled with the result of test_dwt7 (7 nops). All clocks are at 100MHz, interrupts, icache and dcache are disabled, all 'test_dwt' functions starts with isb and dsb instructions.Here I print the result of 5 executions of each function. The execution order is 0 to 7c, repeated 5 times, saving results in an array. Then I print the results:test_dwt0 : 1 1 1 1 1 test_dwt1 : 1 1 1 1 1 test_dwt2 : 1 1 1 1 1 test_dwt3 : 2 2 2 2 2 test_dwt4 : 2 2 2 2 2 test_dwt5 : 3 3 3 3 3 test_dwt6 : 3 3 3 3 3 test_dwt7 : 27 27 27 27 27 test_dwt8 : 5 5 5 5 5 test_dwt7b : 4 4 4 4 4 test_dwt7c : 4 4 4 4 4the code of the 4 last functions:34180824 <test_dwt7&
Hello all,I have been reading other posts with the same problem but I do not get the solution in my case.I'm using the development kit STM32F446RE (Nucleo 64).I have created a new project with STM32CubeMX 6.16.1, and I open the project with STM32CubeIDE 2.0.0. When compiling (in Debug or Release) I get this error: 11:39:26 **** Incremental Build of configuration Debug for project TEST_ST_NUCLEO ****make -j22 all make: stat: ../Core/Startup/startup_stm32f446retx.s: Permission deniedmake: *** No rule to make target '../Core/Startup/startup_stm32f446retx.s', needed by 'Core/Startup/startup_stm32f446retx.o'. Stop."make -j22 all" terminated with exit code 2. Build might be incomplete.11:39:27 Build Failed. 1 errors, 0 warnings. (took 584ms) Any help will be welcome. Thanks in advence.
I work on a pedometer project, which uses built-in accelerometer and an LCD screen (ILI9341). The screen code works fine, but I struggle to get the pedometer part to work. I suspect there might something wrong with how I initialized the accelerometer, since it outputs weird values.I use an stm32f407g-disc1 board with built-in accelerometer, which I communicate with via SPI. I find the values it returns very weird, since I don't move the device at the moment. Shouldn't they be close to zero since there is no acceleration? Moreover, they don't change when I shake the device slightly, although it may be because the acceleration is not big enough to be detected. Another problem is that mag value changes all the time, although x,y,z don't change.Valuesmain functionint main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. *
Split from this thread as the questions become more generic on embedded systems not related to the STM32. Hello Team, We are currently evaluating STM32H563ZI for a production system and would like your guidance on recommended CPU and RAM margin before moving to large-scale deployment. Based on our current firmware build analysis (STM32CubeIDE Build Analyzer): RAM: Total: 640 KB Used: ~182 KB (≈28.5%) Free: ~458 KB Flash: Total: 1 MB Used: ~282 KB (≈27.6%) Free: ~742 KB From a static memory usage perspective, sufficient margin is available. However, our application is load-dependent, and real CPU utilization varies based on field conditions and communication traffic. We would like clarification and guidance on the following points: What CPU utilization margin (%) is recommended for STM32H5 series devices in production systems (for example, acceptable average and peak CPU load)? What RAM headroom (free heap and stack margin) is considered safe for long-term and
Hi,I am trying to work with the USART6 which is connected to is connected to PF13 (TX) and PF14 (RX) on the extended GPIO.It looks like the SCRIF does not allow access to this USART, wven though the OPTEE configuration seems to enable it:from optee/...core/.../stm32mp257f-ev1-ca35tdcid-rif.stdi:...IFPROT(STM32MP25_RIFSC_USART6_ID, RIF_UNUSED, RIF_UNLOCK, RIF_NSEC, RIF_NPRIV, RIF_UNUSED, RIF_SEM_DIS, RIF_CFDIS)...but when I boot the board I can see this:cat /sys/kernel/debug/stm32_firewall/rifsc | grep USART| USART1 || 31 || NSEC || NPRIV || enabled || enabled || 0 || 0x0 || USART2 || 32 || NSEC || PRIV || enabled || disabled || 1 || 0x0 || USART3 || 33 || NSEC || NPRIV || enabled || enabled || 0 || 0x0 || USART6 || 36 || NSEC || NPRIV || enabled || disabled || 2 || 0x0 | From what I understand it means the CID is 2 which means access to this USART can be done only from the M33 micro. Is that correct?How can I solve this? I am struggeling with Yocto for a while with no su
Hi,I am trying to use USART6 on STM32MP257F-DK development board. I have enabled it in the device tree, recompiled it and I now can see the /dev/ttySTM1 node. The problem is, that sometimes, after reboot, any access to the USART (even changing its baudrate using stty -F /dev/ttySTM1 command) causes SERC exception (with ID 36 which corresponds to USART6) to happen.This does not happen all the time, but most of the time. Once and it doesn't happen after boot it won't happen again until next reboot and the UART works just fine.here my device tree change:&usart6 {pinctrl-names = "default", "idle", "sleep";pinctrl-0 = <&usart6_pins_a>;pinctrl-1 = <&usart6_idle_pins_a>;pinctrl-2 = <&usart6_sleep_pins_a>;/delete-property/dmas;/delete-property/dma-names;status = "okay";}; it seemed first that disabling the DMA helps, but I am not so sure nowusart6_pins_a: usart6-0 {pins1 {pinmux = <STM32_PINMUX('F', 13, AF3)>; /* USART6_TX */bias-disable;drive-push-
Hi - does anyone have a solution for this?I have the latest CubeMX with STM32CubeWBA Firmware Package V1.8.0 / 29-October-2025 installed.The attached .ioc file is a minimum configuration for BLE. I am attempting to just get basic BLE advertising working as the first step on a new board.The build (using the auto-generated makefile) fails with "System/Config/LowPower/peripheral_init.c:24:10: fatal error: aes.h: No such file or directory". The AES is turned on in the .ioc file but the header file didn't get generated.
Hi ST Engineers: Is the audio amplifier demo board STEVAL-CCA044V1 still active for ordering, or is the board STEVAL-CCA044V1 obsolete? Best Regards Simon Peng
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.