Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
MCU : STM32WLE5CCU6Firmware Package Name and Version : STM32Cube FW_WL V1.4.0Application : FUOTA using LoRaWANSetup : End Node(STM32WL) <===> Gateway(Dragino LPS8) <====> TTNHello, I am trying to get my LoRaWAN FUOTA example running for few days with unsuccessful attempts.At first i was successfully able to build LoRaWAN FUOTA application provided by ST under STM32Cube_FW_WL_V1.4.0. This firmware is made for NUCLEO-WL55JC(STM32WL55JC, Dual core with 256KB flash)But as i have STM32WLE5CCU6(Single core 256KB flash). With that also i tried to change the startup and linkers and updating .cproject with correct part number and was able to build it but while flashing gets an error.\STM32Cube\Repository\STM32Cube_FW_WL_V1.4.0\Projects\NUCLEO-WL55JC\Applications\LoRaWAN_FUOTA\Scripts\STM32CubeIDE> .\program.bat ########################################### # 0- Set all global variables ########################################### ######################################
In order to meet the USB suspend mode maximum current requirement I am using Stop mode once the suspend has taken effect. I have no difficulties getting it to go into Stop and the current consumption falls to well below 2.5mA, as required. My problem is that it won’t wake up following either a host-induced wakeup, or due to a remote wakeup that I have set up on my product’s buttons.Host-induced wakeup does cause the current consumption to increase, but it doesn’t get going again. Remote wakeup has no effect whatsoever.If I replace my HAL_PWR_EnterSTOPMode call with a simple __WFI() it wakes up from both without any difficulties, so I know the EXTIs are all set up correctly etc.So what’s wrong? I actually know the answer (after days of head-scratching) and will post it as an answer to my own question so that this is documented and will hopefully save others similar frustration. Although I’m using a C0 with USBX, I imagine this applies to all MCUs.
When I was using STM32N6, I tried to generate USART with STM32CubeMx, but when you enable DCache the DMA did not properly handle USART-RX data.The USART startup code is as follows static FIXED_DMA_USER_RAM uint8_t s_ulDebugUsartRxDmaFifo[16]; bool DevUsartInit(void) { bool ret = false; //HAL_UART_DeInit(&huart1); //MX_USART1_UART_Init(); memset(s_ulDebugUsartRxDmaFifo, 0, sizeof(s_ulDebugUsartRxDmaFifo)); if (HAL_UARTEx_ReceiveToIdle_DMA(&huart1, s_ulDebugUsartRxDmaFifo, sizeof(s_ulDebugUsartRxDmaFifo)) == HAL_OK) { ret = true; } __DSB(); return ret;}/** * @brief The application entry point. * @retval int */int main(void){ /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MPU Configuration--------------------------------------------------------*/ MPU_Config(); /* Enable the CPU Cache */ /* Enable I-Cache---------------------------------------------------------*/ SCB_EnableICache(); /* Enable D-Cache--------------------------------------
I am currently working to redesign one of our products to include Bluetooth communication for remote control. For this, I am targetting the STM32WBA23.Given that the PCB is mounted inside a solid, cast-aluminium housing, I will need to put the antenna on a seperate board and connect it with a cable to the main PCB.My question now is: Where do I put the tuning components? Do I place these on the main PCB, close to the controller, or do I put them on the antenna board?Or maybe it doesn't actually matter. I would appreciate any comments and directions by those more RF savvy than me.
The product page and datasheet only mention BLE Core 6.0 but don't call out channel sounding support explicitly like other BLE features. Is it actually supported?
Hello,I'm prototyping a custom board equipped with a WBA23KE and developing its software.Since this custom board doesn't have a 32kHz crystal, I modified the code based on BLE_p2pServer, referencing the description on the following website.LSEクリスタルなしでSTM32WBA上でRFアプリケーションを動かす方法 - stm32mcuHowever, the HAL_RTC_Init() function on line 615 of the attached main.c fails and goes into ErrorHandler().How should I modify the code?
ContextI'm finalizing a 4-layer FR4 board with an STM32WBA62CIU6 (2.4 GHz BLE), and I'm not 100% sure about the best way to make the Bluetooth matching/tuning easier.I first built a board with a PCB antenna identical to ST's (following the exact shape shown in application note AN5129) and a 5-element Pi network, as shown in one of the circuits in ST's application note AN5948:1I then used a VNA, connecting at the pad where the STM32 would sit, and tuned the Pi network components so that the Pi + antenna would present an impedance of 30 + j2.5 Ω — the output impedance of my chip at 10 dBm (the power I want to use):2My tuning workflow was: measure with the VNA → export the result → load it into the SimSmith "Load" → place components in the simulator to get a sense of which values to use in real life. However, when I placed the real components, the result was quite different from the simulator — so different that I ended up unable to complete the tuning.Current setup / measurementsSta
Hello,the observed bug is the following.We are using STM32L433RC and generating some code from CubeMX using low-level libraries. We are currently evaluating precision of the hardware clock compensation, when using internal MSI RC oscillator with external crystal of 32.768kHz connected, and PLL mode (in order to do the compensation) enabled.The sequence generated by the CubeMX is the following:void SystemClock_Config(void) { LL_FLASH_SetLatency(LL_FLASH_LATENCY_4); if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_4) { Error_Handler(); } LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1); LL_RCC_MSI_Enable(); /* Wait till MSI is ready */ while(LL_RCC_MSI_IsReady() != 1) { } LL_RCC_MSI_EnablePLLMode(); LL_RCC_MSI_EnableRangeSelection(); LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_11); LL_RCC_MSI_SetCalibTrimming(0); LL_PWR_EnableBkUpAccess(); LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_LOW); LL_RCC_LSE_Enable(); /* Wait till LSE is ready */ while(L
Hi,I have a bootloader (0x08000000) jumping to an application (0x0800C000) on an STM32H503CB, everything at 32 MHz HSI, VOS3. The bootloader runs at 1WS flash latency, disables the ICACHE and jumps. About 1 boot in 5, the app dies in the NMI handler right after the jump: FLASH_ECCDETR shows a double ECC error on the very flash line being fetched, at a different address every time. The flash content is intact when read back over SWD - the read just fails transiently. It also depends on the chip: 2 of my 3 boards reproduce it, one never does.If I restore the latency to 3WS (the reset value) in the bootloader just before jumping, the problem disappears completely (200+ reset campaigns, zero failure). My question: why is the H5 sensitive to flash wait states in this situation? 1WS at 32 MHz / VOS3 should be enough on paper, and the bootloader itself runs fine with it. Is there something specific about executing uncached from flash right after a bootloader handover that requires more margin
Hi.I'm trying a simple ping application with my board that contains the H743 microcontroller. I am following the instructions in Adam Berlinger's example. But I can't get ping. I connect my computer to my board via ethernet switch. My computer's IP is 192.168.2.5. But it can't reach to my board. When I try to send UDP packet, I can see the Ip adresses of target and destination(via WireShark software). But I can't see the "Hello UDP message!\n\r". IPs are manually setted. H7 board and computer connected via ethernet switch hub. I added a breakpoint to "void ETH_IRQHandler(void)". After the initial power-on, the system reaches the breakpoint twice even when there is no ping command on the Ethernet port. But when i send ping commands, nothing happens. I can reset LAN8742A PHY via GPIO. /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET); HAL_Delay(50); HAL_GPIO_WriteP
Hello ST Community,I am working with the STM32U535RET6 and need clarification on the interaction between the IWDG Window feature and Early Wake-up Interrupt (EWI).I tested the following configurations:1. Window enabled, EWI disabledThe Window feature works as expected:Early refresh → IWDG reset Late/no refresh → IWDG reset2. EWI enabled, Window disabledWhen only EWI is enabled, the EWI interrupt occurs when the counter reaches the configured EWIT value.In the ISR, the HAL code acknowledges the EWI by setting EWIC.According to RM0456, writing EWIC = 1 clears EWIF and also reloads the IWDG counter with RL[11:0].However, in my observation, the EWI ISR is called only once, and I do not observe the expected counter reload after the EWI acknowledgement.3. EWI and Window enabled togetherWhen both features are enabled, I observe different behavior.For example, with EWI configured for approximately 2 seconds, the EWI occurs repeatedly at approximately every 2 seconds. The IWDG counter appears t
Hello ST Community,We are currently developing a custom board using the STM32N657X0H3Q MCU with the internal SMPS configuration.We have assembled 5 prototype boards, and before applying power to any of the boards, we measured the resistance between the VDDCORE_0V8 rail and GND.We observed a relatively low resistance on all 5 boards, with different measured values:Board Measurement Point VDDCORE_0V8 to GNDBoard 1 TP16 / TP24 22.32 ΩBoard 2 TP16 / TP24 25.9 ΩBoard 3 TP16 / TP24 20.9 ΩBoard 4 TP16 / TP24 12.8 ΩBoard 5 TP16 / TP24 16.2 ΩImportant: None of the boards have been powered up yet.The VDDCORE rail is generated using the STM32N657X0H3Q internal SMPS, with an expected VDDCORE voltage of approximately 0.8 V. The VDDCORE pins are connected according to our schematic, and the internal SMPS pins (VDDSMPS, VLXSMPS, VFBSMPS and VSSSMPS) are also connected as shown in the attached schematic.We are concerned about the low resistance readings, particularl
I have some custom STM32G43KB boards that don’t always behave. The firmware starts with the UART in receive mode, 9600 baud, 9B (8 + parity) 2 stop bits, TX and RX inverted to interface with the host device. The device UART line idles low (ground) as expected for inverted logic, and sends a 17-byte poll message that my board will reply to. Out of 25 boards that have been programmed with the same firmware, about 60 percent of them work, the other 40% show a frame error and do not decode the first byte of the message properly. I have been using alternate function push pull for PA9 configuration, with a 10K pull down resistor to create the idle low condition when in receive mode. Some boards work, some don’t. The same boards, when programmed with other versions of the firmware for interface to different external systems are working fine with AF Push/Pull, 8N1, not inverted, baud rates of 100K, 115.2K and 250K with no issues. When configured for 9600 baud 8E2 inverted, some of the b
I have an STM32L4R on a custom PCB. I am able to flash firmware using CubeProgrammer/CubeIDE to it via an ST-LINK SWD connection as well as a DFU Bootloader via a USB D connector. I have a makeshift connection between the USB D connector to a USB C cable to my laptop in order to flash it using USB_DM, USB_DP, and VBUS wires between the D and C connectors. When the PCB is powered, the ST-LINK is connected to my target MCU and my laptop, and my PCB is connected to my device, my laptop is able to recognize the ST-LINK as a VCP and my target MCU as an "STM32 BOOTLOADER", which allows it to be flashed. The ST-LINK connection is critical in the target MCU being recognized by my laptop. I have written CDC initialization code in order to enumerate my target MCU as a VCP and transmit data to my laptop, however, I am having trouble with that...My code works on the NUCLEO that I have for the STM32L4R. I am also able to step through initialization all the way to the CDC_Transmit() function inside
So I left my program running overnight, and when I check it this morning, the debug output had stopped. Thankfully, the IDE was still running, and it actually caught the hard fault, and even better, the call stack was intact. Here’s what I saw:Call stack showing nested interrupts while running ThreadXSo the IP thread was running, it was waiting on an event flag, another small handler popped, then the Ethernet IRQ popped, and before it could finish execution, the CAN handler popped. The CAN handler checks a queue (with TX_NO_WAIT) for items to transmit, but just before it started executing _tx_queue_receive(), a HardFault occurred.This is the view from inside _txe_queue_receive():_txe_queue_receive() contextAnd this is the view from inside _tx_queue_receive():_tx_queue_receive() contextNow, I’m not sure if perhaps the program counter hadn’t gotten far enough to populate/adjust the stack so that the local variables look correct, but I can see that _txe_queue_receive() definitely had v
Hi, I am using the STM32 NUCLEO-H563ZI board and testing the NetX Duo UDP Echo Server example provided by STM32. Setup: - STM32 NUCLEO-H563ZI- NetX Duo UDP Echo Server example- Direct Ethernet LAN cable connection between PC and board- Static IP configured on both PC and STM32 Issue:UDP communication is not working. When I try to ping the STM32 IP address from the PC, I get "Destination Host Unreachable".Since I am using the official UDP Echo Server example, I expected the board to be reachable and respond to UDP packets.Has anyone successfully tested this example on the NUCLEO-H563ZI? Are there any additional Ethernet, PHY, or NetX Duo configurations that need to be checked? Any suggestions would be appreciated.
Hello,When trying to sample internal channels on STM32U535, it appears that calibration values (stored at 0x0BFA0705-6 for VREFINT and 0710-0742 for TS) give incorrect result.I have tried to sample the value with ADC1 (14bits) and ADC4 (12 bits, x4 on the value), but the rsult is the same.I found 1427 when sampling VREFINT with ADC4 (12 bits). The value stored for VREFINT is 0x3150. = 3156 * 4When applying the formula, that gives 3000 * 3156 / 1427 = 6634mV. Kind of the double of what I actually have.Similarly, values from temperature sensor are wrong. All other channels (that are not linked to any factory calibrated value) are working fine. So I suppose there might be something wrong with the calibration…Could someone confirm or find what is wrong? Here is the relevant code.EDIT: Also, I would like to point out that the value I sample actually makes sense:Considering Vrefint is ~1.2V, from the datasheet, Embedded voltage reference.3.3 * 1427 / 4095 = 1.15V. Pretty close to Vrefint.So,
The STM32H562RET6 microcontroller enters a short circuit between VCC and GND after a few minutes of operation.I programmed a simple LED blinking application on GPIOB pin 2 (PB2). This issue has occurred with several STM32H562RET6 microcontrollers on different boards. I have worked with this microcontroller before, and I had never encountered this problem.
i am trying to do HID with costom pcb but i didint find any solution yet
Hi,We are working with the STM32H7S7 MCU for our project and are planning to use both XSPI interfaces for external memories.Our current plan is: XSPI1: PSRAM XSPI2: External Flash (128MB) We would like to use 128MB of PSRAM, but currently, only 64MB PSRAM devices are available to us. Therefore, we would like to know whether it is possible to integrate two 64MB PSRAM devices with XSPI1 to achieve a total PSRAM capacity of 128MB.I have gone through the AN5050 – Octo-SPI Interface on STM32 MCUs document and understand that the multiplexed mode can be used to connect two external memory devices using separate NCS pins.In this case, if we configure XSPI1 in multiplexed mode and connect two PSRAM devices using the available NCS pins: Can two 64MB PSRAM devices be connected to XSPI1 in this configuration and used as a combined 128MB memory space? If XSPI1 is configured in multiplexed mode for the two PSRAM devices, can XSPI2 still be used independently for the external 128MB Flash? If t
I’m currently trying to design a STM32N645I0H based board with LAN8742A Ethernet. Right as for the STM32H723 I would prefer to have one NZ2520SH-25MHZ-END4869C 25 MHz crystal for both, the MCU (fed into OSC_IN) and the PHY. The application note says, this is possible and for such kind of analogue clock input OSC_OUT has to be tied to VDD via a 1K resistor. What the AN does NOT say: which VDD is meant? The 3.3V rail or the 1.8V rail?
Hello,I am trying to intentionally force a blocking failure on the STM32N6570-DK to observe how the system handles the error and to test the PG10 BootFailed UART output.To do this, I have tried tampering with the FSBL header in various ways to force a failure, as well as simply erasing the OctaFlash.However, despite my attempts, no ID code or valid UART output ever arrives on PG10.While the Boot ROM manual (UM3234) describes what happens during a blocking failure, there are no clear notes or official procedures explaining how a blocking failure can be intentionally generated for testing purposes.Could someone from ST or the community clarify:How can we intentionally and reliably trigger a blocking failure on the STM32N6570-DK to test the PG10 BootFailed UART output?Any guidance or suggestions would be greatly appreciated.Best regards
HiI am trying to make simple setup for H755ZI-Q nucleo-board with ETH + LWIP + RTOS. I was using this Forum Section as the source of example that i used (H745ZI-Q) that is by all documents have same characteristics as my board and compatible with it . So back to the Problem, my board doesn^t respond to ping that i send even when the dhcp server that i started on my PC gives me that the board on this “IP-address” . After what the ping don^t go through. I added a breakpoint to "void ETH_IRQHandler(void)". After the initial power-on, the system reaches the breakpoint three times even when there is no ping command on the Ethernet port. Can u please help me with that?I tried to reconfigure everything from flash memory , turn off the Cache to check if that change anything , I have even Hybrid of RTOS + Raw Api ETH + LWIP that works. I could not understand is smth wrong with my board or with code that generates cause in Documents everything sounded simplier. My Project (Main Files)Example
Hello, I want to measure the power consumption of the rest of my circuit. For that, I’m putting the STM32H562 immediately to sleep. I generate a cube project and put the following in main():int main(void){ HAL_PWR_EnterSTANDBYMode();} After flashing, the current consumption suggests that it is not running, but I’m not sure. I switch the power off and on again, the current drops by 2.2mA down to 0.5mA (including the rest of the circuit).But now, it is not possible to connect to the processor with the cube programmer. I have to do a discover first, before being able to connect to it again. MY expectation would have been that I’m directly able to flash again.My questions are now: Why does entering the standby (or stop) mode locks the access to the device. Is this a bug or a feature? Is is documented somewhere? Best regards,Peter
I made a custom board with STM32H7S7 , Touchgfx without OS, 2 framebuffers in psram(aps256xxn). At first ,after startthe debugging ,the display is normal,but after a while (random time),display is freezing. Then I pause the program,I foundit stuck at nema_wait_irq_cl. This is my screen:This is information when stuck:This project is a test project,the touchgfx code is simply rotate textureMapper1 and move red box on each frame
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.