Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
I’m trying to Generate 4 PWM for my rectifier circuit so my right leg is of tim1 ch1 and tim1ch1N and my left leg is of tim1ch2 and tim2ch1N , what i want to achieve is i want 50% duty with phase shift between my leg1 and leg2 i saw many examples with OC mode , with different timers but i need it in the same tim1 only this are my pin outs
Hello, I am designing a custom 3-phase brushless DC motor controller based on the STSPIN32G4 integrated driver. The target application operates at 24V DC with a continuous output power of 350W (approximately 15A RMS continuous current). The hardware is designed to support evaluation of both sensorless FOC algorithms and sensored Hall effect positioning. Could you please verify the following parameters in my attached KiCad schematic:1. Operational Amplifier Configuration: Are the internal op-amp pins configured correctly for 3-shunt low-side current sensing matching the STSPIN32G4 internal matrix rules?2. Sensored/Sensorless Support: Are the analog filtering assets for BEMF decoding and the digital lines for the Hall sensor interfaces correctly assigned to the internal MCU pins?3. Power Stage Safety: Given a 350W load profile, are the bootstrap capacitor selections and gate drive configurations adequate to handle the current switching transients safely? Target Specifications:- Controlle
We’ve been using the Nucleo-F446RE + IHM09M2 + IPMM15B hardware setup. We’ve tested voltages of 50V, 80V, and 100V using transformer modules connected to a GPS-2303 DC power supply. We’ve also tried 167V with a different power supply.However, only the 50V setup worked properly with the Motor Profiler. The only issue with 50V is that the motor could not reach a sufficient speed to “start profiler” and got stuck at 28%. The other voltages failed to even complete “Offset Detection”, getting stuck at 7% while displaying a “Driver Protection” error simultaneously. What factors could be causing this issue?
Hi ST community,We are currently evaluating STM32WB05 vs STM32WB09 for an application involving continuous BLE data streaming from multiple sensors, and would appreciate guidance from experts who have worked with STM32WB0 series.The reason we choosing the STMWB05 over STM32WB09 MCU, STM32WB05 MCU comes at a lower cost.In brief our application sensor are2x IMU LSM6DSO sensors (high-frequency sampling)1x magnetometer1x analog force sensorA single BLE connection (no mesh or multi-node), with frequent sync occurring approximately every three minutes.Key Questions1. WB05 vs WB09 for continuous BLE streamingBoth MCUs seem to have similar BLE capabilities (Bluetooth 5.4, 2 Mbps PHY), but:Does WB09 (larger RAM/Flash) provide significant advantage for:Continuous streamingBufferingReducing packet drops?Has anyone faced RAM bottlenecks or BLE throughput instability on WB05, WB09 in such use cases?2. Single-core architecture suitabilityBoth WB05 and WB09 are single-core Cortex-M0+ with radio
I get the following error If i take the code from github shared by ST for Nucleo Lora it compiles. But when i am trying to do some changes by mixing the code from Cube Mx i get the above error. Can anyone please help to resolve the above issue.
I'm implementing I2C communication using an STM32WBA2 as the Master and an STM32U0 as the Slave.I've implemented a process to send one byte of data (0x75) from the Master to the Slave, with the Slave Address set to 0x68. However, when I check the SCL/SDA waveforms, it appears there's no ACK from the Slave.On the other hand, the Slave receives an event in HAL_I2C_AddrCallback() when it receives 0x68, but the value read by HAL_I2C_Slave_Receive() is empty. How can I receive 0x75 from the Master?I've attached the main.c files for both the Master and Slave.The CubeMX configuration is as follows:
I tried building and flashing the sample project BLE_TransparentMode to verify Direct Test Mode on the Nucleo-WBA25CE1, but it doesn't work properly.When I connect using STM32CubeMonitor-RF, an error pops up and the application terminates.Sending 0x93, 0x94 (TX, 2440 MHz, PRBS9) from the terminal yields no response.Two COM ports appear, but connecting to either one results in the same outcome.How can I enable Direct Test Mode?
Hello STM Community,I am trying to achieve live camera streaming using STM32H723VGT6, but I am unable to get the result for USB_UVC, Ethernet, using esp32 wifi, if there is any help available, please share it. Also, do share any GitHub link if available. I am using the Weact mini STM32H723VGT6 board, and I have connected a camera module OV2640 to it.I have referred to the GitHub link below, which is for the H743 controller, but it hasn't shown any expected results. https://github.com/WeActStudio/MiniSTM32H7xx Any guidance from ST engineers or Community members would be very helpful.Thank you in advance.
My device uses an STM32H743VITx MCU.I need to use ADC3 at the beginning of my program to verify that three voltages are indeed at the correct values. Then I want to disable it completely before initializing ADC1 and ADC2 to avoid pin conflicts.Does the function HAL_ADC_DeInit(&hadc3) allow me to do this?
RM0486 describes CSI_PFCR bit 16 (DLD) as follows: Bit 16 DLD: Data lane direction of lane 00: Rx1: TxPer this description, configuring the CSI-2 host to receive from a camera sensor (i.e. lane 0 in RX mode) should require DLD = 0.However, in the shipped HAL, HAL_DCMIPP_CSI_SetConfig() explicitly sets DLD = 1 (via CSI_PFCR_DLD) when configuring the PHY for CSI-2 RX capture from a camera sensor:WRITE_REG(csi_instance->PFCR, (0x28U << CSI_PFCR_CCFR_Pos) |(SNPS_Freqs[pCSI_Config->PHYBitrate].hsfreqrange << CSI_PFCR_HSFR_Pos) | CSI_PFCR_DLD);The HAL source even contains a comment acknowledging the discrepancy:/* set basedir_0 to RX DLD 0 RX, 1 TX. Synopsys 1 RX 0 TX + freq range */This strongly suggests that the underlying Synopsys D-PHY basedir signal has the opposite polarity (1 = Rx, 0 = Tx) from what's documented for the DLD bit in RM0486, and that the HAL was written/validated against the actual behavior rather than the RM's bit description.Is this a mistake of myse
Hi everyone,I am working on a project using BNO085 IMU sensor and STM32H7A3ZIT6Q. I have a single sensor working but stuck at 44Hz. The same sensor with SparkFun library on ESP32 achieves 1.2ms read time. I need help understanding why and how to match ESP32 performance on STM32.Hardware:NUCLEO-H7A3ZI-Q (STM32H7A3ZIT6Q, Cortex-M7 @ 280MHz)Adafruit BNO085 breakout boardI2C on PB8 (SCL), PB9 (SDA), PC0 (INT pin)P0 and P1 tied to GND (I2C mode, address 0x4A)Software:STM32CubeIDE with HALOfficial CEVA SH2 library from github.com/ceva-dsp/sh2REPORT_INTERVAL_US = 2500 (targeting 400Hz)SH2_ROTATION_VECTOR (9-axis full quaternion)STM32 performance achieved so far:I2C 400kHz polling: 28Hz, read_ms = 32msI2C 1MHz Fast Mode Plus: 44Hz, read_ms = 19msINT pin wait inside sh2_hal_read(): still 44Hz, read_ms = 19msESP32 performance with same sensor and SparkFun SH2 library:read time: 1.2msData rate: close to 400HzThis is a huge difference. 19ms on STM32 vs 1.2ms on ESP32 with the same SH2 library unde
I have noticed several recommendations on internet, that recommend providing a low high frequency impedance driving the ADC input for the MCU. For instance, you could add an RC-filter with the capacitance directly between the input pin and analog ground. This is one of the recommendations: https://community.st.com/stm32-mcus-products-25/many-people-have-complained-about-noise-on-adc-inputs-maybe-to-do-with-impedance-has-this-be-rectified-on-any-version-or-family-of-the-stm32-42573?tid=42573&fid=25 Well, I am not sure of such a recommendation anymore… Perhaps I should just state that I am a novice regarding the use of STM32 processors, but I am old regarding general electronics design and electrical noise. I have just tried this circuit with a Nucleo STM32G474RE board with 100 nF decoupling capacitor and a series resistor that I vary on the input pin: The preconditions are that I make an AD-conversion every second and with a 170 MHz sysclock and a 42.5 MHz ADC clock. The sample ti
After I flashed stack into wrong address,NUCLEO-STM32WB55 connected successfully to stm32CubeProgrammer but warned “Data read failed”.I tried to erase or progarm app & stack,both failed.The OB RDP=0xAA,how to solve it? 15:24:49 : Disconnected from device.15:24:50 : UR connection mode is defined with the SWrst reset mode15:24:50 : ST-LINK SN : 0667FF50565580668708221415:24:50 : ST-LINK FW : V2J43M2815:24:50 : Board : P-NUCLEO-WB5515:24:50 : Voltage : 3.26V15:24:50 : SWD freq : 4000 KHz15:24:50 : Connect mode: Normal15:24:50 : Reset mode : Software reset15:24:50 : Device ID : 0x49515:24:50 : Revision ID : Rev Y15:24:50 : Debug in Low Power mode enabled.15:24:50 : UPLOADING OPTION BYTES DATA ...15:24:50 : Bank : 0x0015:24:50 : Address : 0x58004020 15:24:50 : Size : 96 Bytes15:24:50 : Bank : 0x0115:24:50 : Address : 0x58004080 15:24:50 : Size : 8 Bytes15:24:50 : UPLOADING ...15:24:50 : Size : 4 Byt
I’d like to create a mac address using the STM32U5’s 96-bit UID. since first byte I’ll use as constant, i need 40 bits to create a unique mac for my devices.i wonder what’s the best way to create a mac with the least change of collision.if i use 32 bit wafer coordinates, and 8 bit wafer number for example, how likely am i to get a collision, opposed to other methods?thank you
Hello ST Community,I am working with the STM32G4 ADC and am experiencing a conflict between my understanding of the internal digital processing pipeline and the behavior I am observing when combining Offset Correction and Gain Compensation at a reduced resolution (10-bit).According to the reference manual (RM0440), the digital processing back-end handles data in a specific sequence. However, I need absolute clarification on the mathematical interaction between ADC_OFRx and ADC_GCOMP.My Setup: MCU: STM32G4 Series ADC Resolution: 10-Bit (ADC_RESOLUTION_10B) Gain Compensation Factor: 16383 (Maximum 14-bit value, which equals a ~4x multiplier) Offset Sign: Negative (ADC_OFFSET_SIGN_NEGATIVE) My Configuration Code:// Resolution configurationADC_Head->Init.Resolution = ADC_RESOLUTION_10B;ADC_Head->Init.DataAlign = ADC_DATAALIGN_RIGHT;// ... standard HAL init ...// Apply maximum gain compensation (~4x)LL_ADC_SetGainCompensation(ADC_Head->Instance, 16383);My offset setting code:
Hi all,I have a custom board with an integrated STLINK-V3MODS, connected to an STM32H755ZIT6 MCU. T_NRST is not connected between the STLINK-V3MODS and my MCU.My MCU is already powered on and running code normally. When I then connect the STLINK-V3MODS to my PC (via USB), it automatically resets my target MCU.Since T_NRST isn't wired at all, I don't understand how the V3MODS is able to reset my target.I'm already using the VCP (T_VCP_TX/T_VCP_RX) for logging. The issue is: when I plug in the STLINK-V3MODS to view the logs, it resets my MCU — but I don't want that. I want the MCU to keep running as-is, and just be able to plug in and observe the logs live without interrupting it.How can I prevent this reset-on-connect behavior while still being able to use the VCP for logging?Thanks!
I am working on UART communication between two STM32 development boards: an STM32H7B3I-EVAL (STM32H7B3LI MCU) configured as the master and an STM32H573I-DK (STM32H573II MCU) configured as the slave. When HAL_Delay() is not added in the master application, the master continuously transmits data over UART, and the slave receives the data continuously without any issues. When HAL_Delay() is added after the UART transmission, the master transmits the data only once and then stops. During debugging, the application is found to be stuck inside HAL_Delay(). The attached screenshot shows that HAL_GetTick() always returns 0, and the global tick counter uwTick also remains 0 throughout execution. Since the HAL tick never increments, HAL_Delay() never completes and the application remains blocked. If execution is resumed from the debugger, the application eventually enters Error_Handler(). I have attached the debugger screenshot showing the values of HAL_GetTick(), uwTick, and the SysTick regis
Dear STMicroelectronics Support Team,we are preparing a reliability prediction report for an electronic assembly intended for customer qualification.The calculation is based on a parts count approach using IEC TR 63162:2025 as source of reference failure rates and IEC 61709:2017 for conversion to operating conditions.For the component STM32U545RET6Q, currently classified as a CMOS microcontroller according to IEC TR 63162, we kindly ask whether ST can provide manufacturer-specific reliability data, in particular:FIT rate or failure rate for STM32U545RET6Q, or for the STM32U5 family; reference conditions of the FIT value, including temperature, voltage, operating profile and confidence level; method or standard used for the reliability evaluation, for example IEC 61709, JEDEC, internal field data, HTOL, qualification data or other; reliability / qualification report that can support the use of the data in a customer-facing reliability prediction report; any applicable limitation regardi
Cross-posting from CC1125 Sleep current rises to ~2mA on the TI forum.I have a custom board with STM32F030 controlling a TI CC1125 sub-GHz radio transceiver via SPI plus a few GPIOs.Everything is fine for normal operation (TX, RX, etc), but the system has a "Shutdown" mode where the CC1125 is put into its low-power SLEEP state, and the STM32 is in STANDBY.In SLEEP the CC1125 should take under 1uA but, after sending the SLEEP command, I see the current rise over ~4s and eventually settle at ~2mA.I have managed to reproduce this using a Nucleo-F030R8 (ST-Link removed) and a TI dev board:The blue line is the total system current (STM32 + cc1125); red line is just the CC1125.Zooming-in on the Shutdown part: There seems to be something charging-up and then (partially?) switching-on?With the CC1125 disconnected, the Nucleo alone takes a steady ~3.1uA with the STM32 in STANDBY.So it looks like the issue is with the CC1125 somewhere; just posting here in case anyone has any suggestions.&n
When using the STSPIN32G4 chip, the ADC uses an external resistor for non-inverting amplification to determine the value, but in reality, the ADC-OUT output is always at the maximum of its internal LDO. Changing the external feedback resistor can't change the output value of its op-amp. What could be the reason for this? Also, the voltage difference on the non-inverting side of the three op-amps is inconsistent: two are 0.27, and one is 0.35. I’d like to ask the experts for advice.
Dear forum,I am trying to setup a simple application to sample an ADC channel with DMA and stream it via UDP to a Windows PC, so here’s what I did:I started from the sample project “Nx_UDP_Echo_Client”, provided by ST in FW pack; I configured the ADC peripheral to sample pin PA1 as in the sample project “ADC_SingleConversion_TriggerTimer_DMA”, and this is ok; I configured the GPDMA channel 0 in circular mode to copy ADC.DR into a buffer, following this and this; I put the DMA buffer in a dedicated memory region (AHBSRAM1), as suggested here; I configured the buffer memory region as NON CACHEABLE in MPU configuration, as suggested here; Finally I configured the RISAF in order to let the GPDMA have access to the buffer, as suggested here.But still, when I try to activate the transfer with the HAL command HAL_ADC_Start_DMA, I get a “User setting error” (USEF bit in GPDMA_C0SR register) and the GPDMA channel is deactivated. Can you please help me in the debug?The project, which is attached
Hi @ST MICROCONTOLLER team ,We are using MCSDK v6.3.0 IN STM32G431VBT6.While running the motor in MC_ProgramSpeedMotor1(400,1000) we found that the average speed read using MC_GetMecSpeedAverageMotor1 is returning speed in range of 382rpm to 416rpm eventhough the commanded speed is 400rpm.How can we control the motor speed in a range of 398-402 rpm say (+-2 rpm from the commanded speed)Could you please look into the attached images and pseudo code and let me know how can we achieve the requirement to keep the motor speed within (+ or -2 rpm of commanded speed )code flow:HAL_Delay(10);MC_StartMotor1();while (MC_GetSTMStateMotor1() != RUN){}MC_ProgramSpeedRampMotor1(400, 1000);while (1){ velocity1 = MC_GetMecSpeedAverageMotor1();} Complete speed rampZoomed image indicating the velocity1while the torque_qd = MC_GetIqdrefMotor1torque_qd.q stays within 250 to 260 range
mcsdk no option to use stm32f103RCT6 to control TWO BLDC motors with hass sensors with pot to control speed what to do any other old version
The MCU works fine the first time it gets programmed. However, after one power cycle, it freezes completely after an external interrupt happens. Doesn’t even enter the error handler. I have SMPS enabled. Thanks for your help 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 Power */ SystemPower_Config(); /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_RTC_Init(); MX_UART4_Init(); /* USER CODE BEGIN 2 */ GreenLEDOn(); HAL_Delay(5000); GreenLEDOff(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(!HAL_GPIO_ReadPin(V_Fu_Trig_GPIO_Port, V_Fu_T
Hi everyone,I need some help please on a choppy DSI signal.Long story short, I have decided to clone an STM32U5G9 disco board and build my own DSI driver using the same mcu in a smaller package running at 3v3 VDD. All seems to be fine, all voltages levels are correct on the screen after removing R8 and bridging R9 (backlight also works) and the VLXSMPS output is the same as on the disco (1.2V). I have signal on all DSI lines as well, as expected.But...Below I am showing you the DSI_D0N signal from the original disco board, followed by my custom one. The capture was with an oscilloscope on the direct pin output of the two mcu-s, so the screen was not connected in either scenario. It is clear to me that the low state of the signal is too noisy on my custom board and thus, not too surprisingly, I have no output on the screen. Can anyone give me a hint please over what I did wrong in my design?About the custom board, it is 2-layers, the DSI lines are all matched and no vias were used. The
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.