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
1. Run StmCubeMX and then chose upgrade in Ubuntu2. After download it error with something alike it cannot unzip the file. Reason:1. it seems CubeMx uses the .installationinformation hidden file in its folder to find the installation folder.INSTALL_PATHt\00$.....<your patch>/STM32CubeMXt\These are settings in a binary format, so there are some weird character. Anyhow it cannot be changed by user.Solutions:1. Move CubeMX back to where is was installed (not desired) after upgrade, move it back where it is desired.2. Remove and Reinstall CubeMX Suggested fix:1. Make CubeMx upgrade process install folder agnostic.
Hello I'm working with the STM32N6570-DK board to capture images using the IMX335. I want to save 480x800 images from PIPE1 of DCMIPP to External RAM. I've tried searching for examples on the STMicroelectronics Github, but most examples save to AXISRAM. Does anyone have simple example code or steps for doing this? Do i need to config xSPI first? or do i need to put something into ".ld" file?
Hi,I'm in charge of the motor driver for a new project we've started working on. I freshly installed MotorControl Workbench, CubeMX and the IDE. After setting all parameters in Workbench and hitting "Generate the project" button I get a Java runtime Exception "unkown protocol c". I've hit a wall trying to fix this as there's almost no info about similar issues on the web.I tried uninstalling and installing different versions, too.Using windows 11 pro, 24H2. Any suggestions what might go wrong here? I've tried installing the oracle JDK and using that instead of the openJDK runtime but I couldn't get Workbench to use it (this was the only info I could find).Thanks for any help on this!
Hey there Community,I have two Issues I would appreciate aid with.Case1I have successfully created a Nano Edge AI Bench mark and I chosen the best model to run on the N6 Neucloe dev board. I need benchmark for another ML scenario, I intend on having both the Models running on the neucleo at the same time.Problem: I have wounder is given the interfacing with the generated libraries from Nano Edge AI, there Is support to run more than one model, i.e How would you call the inference on given model if both ":libneai.a" files share the same "NanoEdgeAI.h" interface.QN: Is there a work around for this scenario??Case2I have attached image file for this one, During the validation process There seems to be an Error with the enumeration. please see attached file form more information. The Error at times can be 27, Where do I get more information about these Errors.@FBL
I’m using an STM32F439VIT6 on a custom board. PA5 is used as the DAC output, and PA0/PA1 as the ADC inputs. On 1 out of 5 boards, the ADC and DAC functions stopped working, but the same pins still work correctly as GPIO.Setup (failing board)PA5: DAC → op-amp → 0–10 V outputPA0, PA1: ADC inputs from INA190A1 for 4–20 mA sensorsVDDA/VREF+ = 3.3 V (measured OK)Same firmware as working boardsPins configured in analog modeIssueDAC produces no valid analog output, always zeroADC readings are invalid or stuckGPIO input/output on the same pins worksQuestionCan the STM32F4 analog (ADC/DAC) circuitry be damaged while the GPIO still works on the same pins?How can I confirm if the ADC/DAC core is damaged (e.g., internal channels/tests)
Hi all,I am using an STM32H5 micro. I need to send out a buffer of data at regular intervals. I use TIM15 to trigger the GPDMA which sends blocks of 6 bytes to the SPI. The SPI is programmed with TSIZE=6 to get the SS output low during the transmission. I absolutely need this. The screenshot below is the result from my code.My problem is that the SPI only works ONCE. It seems to be stuck afterwards, I observe that CSTART of the SPI goes to 0. How can I get the SPI going on with TSIZE > 0 ?
Hi,I am working in steval-esc001v1. I have set the a2212-13t-1000kv bldc motor to ran at minimum of 1000 rpm and at maximum of 9924 rpm using the foc algorithm in the motor control workbench software. I have ran till the 8000 rpm. But our goal is to ran any type of motor with in the ESC's voltage rating of 3S to 6S (11 V to 22V), also Is it possible to calibrate esc by giving maximum pwm input and minimum pwm input without profiling the esc using pc software every time if the motor changes? If not possible, how does the general ESCs available in the market can do that. If anyone worked in these area, kindly assist.Thanks and Regards,Santhosh.
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
STM32F4 is working in USB Device MSC mode successfully.I need to detect the USB connection state. I put the HAL_PCD_ConnectCallback function in main.c but on compiling I received warning.Debug/../USB_DEVICE/Target/usbd_conf.c:307: multiple definition of `HAL_PCD_ConnectCallback';I see it is weak in HAL_PCB_IRQHandler. Please suggest what I am missing.
Is there a build tool to insert two .hex files into my final image? I am retroactively updating an existing firmware by moving a bootloader I've created from an unused place in the updated image into its proper sector. But to do this, I need to insert the bootloader into the image I am updating with. (Update image contains existing code + boot image1 + boot image2) My main update image will be contained in sector 0 - 5. My first separately built bootloader.hex file must be squeezed into sector 6, and my second separately build bootloader2.hex must be squeezed into sector 7. I have found it is possible to use the linker file to insert raw hexadecimal bytes, but this requires converting the .hex file to an ascii hex array, copying it over and then building. Is there a command line build tool alternative to do this cleanly?
Previously, I used this delay function in inline assembler in my projects (on Cortex M3, M4): static inline void delay_m4(uint32_t cnt){ asm volatile( "1: SUBS %0,#1" "\n\t" " bne 1b" :"=r" (cnt) : "0" (cnt) ); } Now I'm trying to add this function to a project on a Cortex M0+ microcontroller (STM32G0XX).The compiler gives me this error message:Error: instruction not supported in Thumb16 mode -- `subs r3,#1'I'm sure this is a compiler error because:1) the documentation for the Cortex M0+ "PM0223" lists the subs instruction as available;2) looking through the assembly listings of other Cortex M0+ projects, I see thatthe subs instruction is used constantly. STM32CubeIDEVersion: 1.16.1Build: 22882_20240916_0822 (UTC)
Hello,I want to learn that whether it is possible for a permanent magnet BLDC motor to track a specific torque value using field oriented control (FOC) SDK of STM?Best, Erdem
Trying to get AT+CWLAP command to work"AT+CWLAP=1" isn't enough input to get READY to rise."AT+CWLAP=1,,,400,1000" gives "ERROR".Previous commands have worked as expected"AT+PWR=0""AT+CWMODE=1,0""AT+CWAUTOCONN=0""AT+CWCOUNTRY=0,\"00\"""AT+CWHOSTNAME=\"ST67_Min\"""AT+SLCLDTIM""AT+CWSTATE?""AT+CWLAPOPT=1,22,-90,255,10"Any suggestions for AT+CWLAP syntax?Using 1.20 and ST32H563 Nucleo
HiI am using the MAX17261 fuel gauge IC and my MCU is STM32U5G7VJTXQ. According to fuel gauge's datasheet, the ALERT pin (active low pin) is asserted under the following conditions:SOC changeSOC crossing minimum or maximum thresholdsVoltage crossing minimum or maximum thresholdsOther configured alert sourcesI have implemented the initialization sequence as recommended in the device’s Software Implementation Guide .Expected BehaviourWhenever an alert condition occurs:The ALERT pin is asserted low.The corresponding bit in the STATUS register is set.The MCU detects the alert via an interrupt (triggered on a rising/falling edge).In the interrupt handler, the STATUS register is read and cleared.Once cleared, the ALERT pin should de-assert, allowing subsequent alerts to generate new interrupts. Observed IssueFor most cases, the behavior works as expected - each SOC change triggers an alert, the MCU receives the interrupt, and the STATUS register is cleared in the interrupt handler.
Hello, i am trying to store adc calibration data in flash on my H7A3 project.Writing the data (64byte, flash addr 16byte aligned) is successful (at least i hope, since i get no errors), but when reading the same data back from flash via that same Bank2 memory address, i only read zeroes.I was trying to use a same approach like the example program.Can somebody review my code and point me in the right direction?#include "stm32h7xx_hal.h" #include "stm32h7xx_hal_flash.h" #include "string.h" #include <stdint.h> #include "settings.h" #define FLASH_USER_START_ADDR FLASH_BANK2_BASE /* Start @ of user Flash area in Bank2 */ #define FLASH_USER_END_ADDR (FLASH_BANK2_BASE + FLASH_BANK_SIZE - 1) /* End @ of user Flash area in Bank2 */ // get flash sector number from address uint32_t GetSector(uint32_t Address) { uint32_t sector = 0; if (Address < (FLASH_BANK2_BASE + FLASH_BANK_SIZE)) { sector = (Address - FLASH_BANK2_BASE) / FLASH_SECTOR_SIZE; } else { sector = (Address - (FLASH_
Hello...I wish to setup ADC oversampler but seems that i really dont understand if its capable to do what i want. this is what i wish to got: ADC triggeredSample adc0, 1 of 4 in oversamplerSample adc1, 1 of 4 in oversamplerADC triggeredSample adc0, 2 of 4 in oversamplerSample adc1, 2 of 4 in oversamplerADC triggeredSample adc0, 3 of 4 in oversamplerSample adc1, 3 of 4 in oversamplerADC triggeredSample adc0, 4 of 4 in oversampler -> result to dmaSample adc1, 4 of 4 in oversampler -> result to dmanext loop:ADC triggeredSample adc0, 1 of 4 in oversamplerSample adc1, 1 of 4 in oversamplerADC triggeredSample adc0, 2 of 4 in oversamplerSample adc1, 2 of 4 in oversamplerADC triggeredSample adc0, 3 of 4 in oversamplerSample adc1, 3 of 4 in oversamplerADC triggeredSample adc0, 4 of 4 in oversampler -> result to dmaSample adc1, 4 of 4 in oversampler -> result to dmaBut whatever i try i fail. There is no clear statement if oversampler does that per adc channel, or it need to be l
Hello, I'm trying to run SDRAM (AS4C4M16SA-5TCN) with FMC. It looks like all connections are correct. When I try to read/write to memory pointer, I got memory management fault handler.My FMC configuration:Clock connected to FMC is 275MHz (HCLK3). I've tried also to lower it to ~30MHz, but it didn't help.Under "USER CODE BEGIN 2" I'm executing FMC_Init() function. This is it:I tried to write something to memory, but this is the moment when fault handler is activated:*(__IO uint8_t*) (SDRAM_START_ADDR) = 0x00;SDRAM_START_ADDR is defined as 0xC0000000.All FMC's GPIOs are set to Very High speed. What else can I check?@Tesla DeLorean maybe you could help, please?
Hi everyone,I’m trying to design my first PCB using STM32F103 and I’m still a beginner.I see that the PAx pins (PA0–PA15) have multiple alternate functions like GPIO, ADC, USART, SPI, etc.I’m a bit confused about how to properly choose which PA pins to use for my peripherals.If I use PA9/PA10 for USART, can I still use them as normal GPIO later?What is functionality of PAx pins ?I'm using STM32F103C8T6stm32f103c8 datasheet stm32f103c8t6 I'd really appreciate some guidance before I finalize my board layout.Thanks! Best Regards !
Hi everyone, I'm having trouble jumping to the app from the bootloader.The application is located here, writing doesn't give me errors. So I assume the problem is Jump.#define FLASH_USER_START_ADDR ADDR_FLASH_SECTOR_2_BANK1 Il main del bootloader è costituito cosìint main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_QUADSPI_Init(); MX_SPI4_Init(); MX_I2C1_Init(); MX_RTC_Init(); MX_FMC_Init(); MX_USART6_UART_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(ENABLE_3v3_WIFIPRINTER_uC_GPIO_Port, ENABLE_3v3_WIFIPRINTER_uC_Pin, GPIO_PIN_SET); printf("\
Hi ST Support Team,I'm developing a simple FSBL application (LED control) on a NUCLEO-N657X0-Q board to understand the boot management flow with FSBL and application separation.What I've done:Successfully tested the application running directly from RAM via debuggerCompiled the FSBL for external XSPI flash (linker configured for execution from AXISRAM2 at 0x34180400)Signed the binary using STM32_SigningTool_CLI with header v2.3, -nk flag (no keys), -of 0x00000000, and correct load address/entry pointProgrammed the signed binary to external flash at 0x70000000 using STM32CubeProgrammer with the appropriate external loaderConfigured BOOT0=LOW, BOOT1=LOW for boot from XSPI flashThe problem: The Boot ROM does not load the FSBL into RAM. When I read AXISRAM2 (0x34180000) after reset, it contains all zeros, indicating the Boot ROM is rejecting or not attempting to load the FSBL.What I discovered: In STM32CubeProgrammer → OTP MPU tab, I see:BSEC State: SecuredGlobal State: 0x00000001Additiona
Hello ST Community Team, We are currently working with the STM32N657X0H3Q1 device and using an external DRAM – S80KS5123GABHB020 (512 Mbit) connected via the XSPI interface. We have successfully configured XSPI and external memory initialization (using CubeMX / HAL), and the external memory is intended to be used for TouchGFX frame buffers and application data. However, we would like clarification on the following points: What is the correct memory-mapped base address that should be used for the S80KS5123GABHB020 DSRAM on STM32N657X0H3Q1 ? Is the memory accessed through the XSPI1 memory-mapped region, and what is the exact address range? Are there any STM32N6-specific constraints or alignment requirements when using large external DSRAM (512 Mbit) for TouchGFX or heap allocation? Is there any reference example or application note available for STM32N657 with external PSRAM configuration? Currently, we are unsure at which address we should read/write the external DRAM, a
Hi,this is a small but annoying little bug: Sometimes after running code generation, apparently the STM32CubeMX application keeps some files open in the "cmake" subdirectory. This then prevents me from modifying or deleting (to force re-generation on the next code generation run) the files. It also interferes with my Post Generation user script which modifies those files.This can be seen e.g. via ProcessExplorer:It would be helpful if STM32CubeMX would close all file handles after code generation, ideally before calling the post generation user scripts.Thanks!
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
Hello,I am trying to get the STHS34PF80 sensor working on an STM32L0 platform via I²C. My initialization sequence is as follows:Algorithm reset according to AN5867:CTRL2 (0x21) = 0x10 // FUNC_CFG_ACCESS = 1 PAGE_RW (0x11) = 0x40 // FUNC_CFG_WRITE = 1 FUNC_CFG_ADDR (0x08) = 0x2A FUNC_CFG_DATA (0x09) = 0x01 PAGE_RW (0x11) = 0x00 CTRL2 (0x21) = 0x00Interrupt configuration:CTRL3 (0x22) = 0x05AVG_TRIM:0x10 = 0x01Continuous mode:CTRL1 (0x20) = 0x15 (BDU=1, ODR=4 Hz according to datasheet)After this, I wait for EXTI interrupt (DRDY). On interrupt, I read:STATUS (0x23)TOBJECT_L/H (0x26/0x27) and etc.FUNC_STATUS (0x25)Problem:The TOBJECT value remains constant (-48), even when I place a hand or heat source in front of the sensor.Presence/motion flags in FUNC_STATUS almost never change. Occasionally, I see a value of 1, but very rarely, even when moving a hand or breathing near the sensor.See attached screenshot of current data from the terminal.Questions:Is my initialization sequence correct?Wh
I found if you generate a CMake project with STM32CubeMX and then try to open it Visual Studio Code w/extensions installed it does not always open and Ninja crashes.I found if Cmake was previously installed ... as I assume most cross platforms developer probably have already done the STM32 Ninja has start up issues.I always get things like:[proc] Executing command: C:\ST\STM32CubeCLT_1.18.0\GNU-tools-for-STM32\bin\arm-none-eabi-gcc.exe -v[proc] Executing command: cube-cmake -S C:/GitHub/dv/Rcn600/stm32H563 -B c:/GitHub/dv/Rcn600/stm32H563/build -G Ninja[proc] The command: cube-cmake -S C:/GitHub/dv/Rcn600/stm32H563 -B c:/GitHub/dv/Rcn600/stm32H563/build -G Ninja exited with code: 1[extension] Using kits, skip selecting configure preset The kit scanner always seems to choke.I did find a fix by placing following line in the .vscode/settings file:
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.