Get ready for the STM32 Summit 2026 | Online, November 3
Ask questions and discuss STM32 wireless solutions and their implementation for running Bluetooth LE, Zigbee, LoRaWAN applications.
Most recent activity
Originally a reply in this old thread: https://community.st.com/t5/stm32-mcus-wireless/not-able-to-disable-receiving-window-of-l072z-lrwan1/m-p/657145@Andrew Neil Sorry for Newbie question, so let's say I want to keep the rx window(in class C) open for 1 min (like a timeout), if no downlink message is received within this time, then instead of turning off the rx window(not sure how to do that), switching the class back to A will work. Am I right?
Hello,In our end-node application, the device occasionally needs to switch its operating class from Class A to Class C. This class switching is triggered by an external interrupt rather than a downlink message from the server.To achieve this, I am using the LmHandlerRequestClass() function from the LoRaMAC layer, which successfully switches the device to Class C. However, on the next Tx cycle, the device reverts back to Class A.How to ensure that the device remains in Class C after the class switch?
We are using an STM32WB5MMG in a product, We needed to run a few BLE tests for compliance needs and came across the BLE transparent mode to help with BLE tests. In accordance with the ReadMe under BLE_TransparentMode inside STM32WB5MM-DK, we have undertaken the following steps Updated FUS to stm32wb5x_FUS_fw.bin at 0x080EE000Updated soft device with stm32wb5x_BLE_Stack_full_extended_fw.bin to 0x080C7000Modified BLE transparent Mode to change USART pins being used to PA9 and PA10 though Cube MXUpdated FUS and Stack Updated VCP_TX and VCP_RX The CubeMonitor-RF software refuses to connect with the device however Unable to connect No changes are done to the transparent mode example with the exception of UART pin update. ioc file PDF attached
Good day I am designing a a PCB using the STM32WL5MOC module and need some help selecting an appropriate buck-boost converter and designing a battery charging circuit using a 3.7v rechargeable battery. Would it be possible to direct me to an example schematic in order to do so. I am new to hardware design and this will significantly help. Than you in advance !
Hello everyone,I’m working with the NUCLEO-WB55 (MB1355D-01) board, and looking at its LSE crystal, the NX2012SA 32.768 kHz with ESR ~120 kΩ and load capacitance 6 pF (Datasheet attached).Calculating the crystal’s minimum transconductance (Gₘ) using:Gm=4×ESR×(2πf)^2×(C0+CL)^2 ≈ 1.1μA/VFrom the STM32WB55 datasheet, the maximum critical crystal gm (Gmcritmax) values depending on the LSEDRV drive setting are:00 (Low): 0.50 µA/V01 (Medium low): 0.75 µA/V10 (Medium high): 1.70 µA/V11 (High): 2.70 µA/VMy software engineer mentioned ST uses the lowest drive setting (00) for the LSE oscillator by default, but based on the crystal’s Gₘ, this seems insufficient for reliable oscillation on the NUCLEO board.Given the crystal Gₘ is around 1.1 µA/V (above the lowest and medium low drive thresholds), how does the LSE oscillator function properly on the NUCLEO-WB55/EVM board? Even at the highest drive level, the margin seems small.Is ST actually using a higher drive level on the EVM/Nucleo boards
I am implementing a dual-bank-like firmware architecture on the STM32WLE5CCU6 microcontroller, which does not natively support true dual-bank flash. In this setup, I need to write data to a region of the internal Flash memory that is part of the same memory space from which the code is currently executing. I would like to understand how Flash write operations can be safely performed in such a scenario—specifically, how to write to a different section of the same Flash memory while code execution continues from another region within that same Flash.
I am currently implementing a dual-bank flash concept on the STM32WLE5CCU6 microcontroller, which features 256 KB of flash memory. I have divided the flash into two logical blocks, each of 128 KB. Both blocks include their own independent In-Application Programming (IAP) bootloader code. Additionally, each block contains identical application code, but mapped to different memory locations.In the linker script for each block, I have modified the flash and SRAM start and end addresses accordingly. I have also updated the vector table by setting the __ICFEDIT_intvec_start__ symbol to match the start of the respective flash block.The first block (Block 0 or B0) functions correctly. Upon reset, it correctly jumps to the application code located at the corresponding address.However, when executing code from the second block (Block 1 or B1), the application does not function as expected. Furthermore, upon issuing a hard reset, the system always jumps to the start address of Block 0, rat
P-Nucleo STM32WB55I have two 3-axis accelerometers & toe temperature sensors on an I2C bus. I taking measurements at 1 Hz.I would like to send this data over BLE. Every tutorial so far seems to skip how to read the data into a characteristic & then send it. At this point I am only interested in broadcasting.I've managed to set up an attribute for reading, given the service its names. I can see the device & the service advertised on my phone via ST's BLE app. So how do I get the data into the service?I'm going around in circles here!!Please no "have you looked at the examples", yes I have they aren't making any sense to me, I need to talk to a human about this.
I'm working with a NUCLEO-WB15CC board (MB1641C-01) and am trying to use three independent serial ports for my project.I have found that the D8 and D2 pins on the board are not working for serial communication. I believe this is due to a pin conflict with the on-board ST-LINK debugger, as a table in the board's documentation shows PA9 and PA10 are routed through jumpers to the ST-LINK (JP5 pins 13-14 and 15-16).My question to the community is whether D8 and D2 pins are indeed unavailable for user applications due to the ST-LINK routing.Thank you for your help.
Why I do not find the receiver frequency setting in the LPAWUR_WakeupRadio_Rx code?While I can find the transmitter frequency setting in MRSUBG_WakeupRadio_Txas MRSUBG_RadioInitStruct.lFrequencyBase = 868000000;
What settings can be changed in LPAWUR_WakeupRadio_Rx code to increase the wakeup radio distance?From data sheet , The STM32WL33xx RF output power can be programmed to deliver up to +20 dBm, in TX+TXHP mode, and in MRSUBG_WakeupRadio_Tx code,MRSUBG_RadioInitStruct.outputPower = 20;MRSUBG_RadioInitStruct.PADrvMode = PPA_DRV_TX_TX_HP;The above changing is for TX side, what about RX side?
Hello Folks, I started playing with STM32WB09 after some difficulties related to entering in bootloader mode (thanks again to the community) and i wanted to try setting the maximum SCAN_INTERVAL + maximum CONNECTION_INTERVAL to see the best low power footprint i can obtain.All the setting i'm playing with are in app.conf.h and are basically those:#define PAWR_NUM_SUBEVENTS 4 #define PAWR_SUBEVENT_INTERVAL_MS 30 #define PAWR_RESPONSE_SLOT_DELAY_MS 2.5 #define PAWR_RESPONSE_SLOT_SPACING_US 500 #define PAWR_NUM_RESPONSE_SLOTS 8 #define PAWR_INTERVAL_MS (PAWR_SUBEVENT_INTERVAL_MS * PAWR_NUM_SUBEVENTS + 200) #define SCAN_INTERVAL_MS 2000 #define SCAN_WINDOW_MS 100 #define CONNECTION_INTERVAL_MS 200 #define SUPERVISION_TIMEOUT_MS 500 Strating from the Broadcaster example, i'm able to set the maximum "SCAN_INTERVAL_MS" up to 32000ms (32s).I can see that from the power consumption footprint the system wake up every 32s scanning for observers.However i'm getting a strange beha
Hello, I have recently started getting familiarized with the P-NUCLEO-WB55 kit, and I have run to my first big mess up. I was attempting to perform a wireless stack FUS routine over the STLink interface, and I might have set a wrong start address for the FUS_fw.bin file (which I have updated to v 2.00). Hence, it seems that I can no longer do a firmware update over the stlink. The other main issue that I am also facing is that I cannot seem to get the board to boot up to DFU mode. I have tried the dongle, and it boots to DFU mode normally after toggling the switch. However, and correct me if I am wrong, If I follow the procedure outlined here: https://visualgdb.com/tools/STM32WBUpdater/connecting/ , I should be able to boot into DFU mode in the development board. Yet, it does not work. If this is salvageable, I would greatly appreciate any help/support you can provide. Thanks
Hi,I'm having a problem with the LSE/RTC and I'm not exactly sure where to start, but I'll try to explain it.I'm using the STM32WB55 and the RTC is used for FreeRTOS tick timing. It works perfectly during normal operation with a 1 ms tick, and it also works when entering STOP2 mode and waking up after a longer time, for example 2 seconds. The RTC is clocked by LSE.However, the problem occurs if the ST-Link is connected to the SWD header. In that case, the RTC no longer wakes up the MCU from STOP2 mode — the MCU just stays stuck in sleep mode, like the RTC didn’t generate the interrupt or didn’t wake it up.It also seems to be related to power cycling. If I disconnect the power supply from the MCU and wait long enough (more than 5 seconds, to fully discharge the board), then reconnect power, this issue always happens. But if I just reset the MCU without cutting the power, everything works fine again.I also found that the problem does not occur when using LSI instead of LSE.
Hi, I try to create a GATT server with a NUCLEO-WB15CC.I'm a beginner with STM32WB MCUs so I followed the Getting Started Series video and particulary : "STM32WB Getting Started Series: Part 12b, Lab. Receiving data from the phone" When its came time to test the firmware my device was not detected in ST BLE ToolBox mobile AppI tried to upgrade the BLE stack Firmware with "stm32wb5x_BLE_Stack_full_fw.bin" but nothing changed. Then I tried the example Firmware BLE_p2pServer and it's work.It's seems to be a problem links to STM32WB15. Indeed in the video they used a STM32WB55 and in the comment of the video other persons has the same problem when using a STM32WB15. Does anybody had this problem and knows how to fix it?Thank you
Basically, my requirement is to run RTC to monitor actual date and time for various schedules to actuate the devices. Note that RTC configuration is provided via LoRaWAN downlink and timestamp after LoRaWAN join.Hence, I would need mix mode to run both BCD calendar for clock and binary mode for LoRaWAN stack timer server. However, I could not get alarm working with free running BCD calendar and binary mode (mix mode) in STM32WL55. But I could see working if I configure only free running BCD calendar or binary mode separately. Attached the configuration for the reference to advise.Is there any example program on mix mode alarm operation?
I'm using a STM32WL33 on 2 separate custom PCBs. I have one of them being a transmitter only, and I have verified that the transmitter consistently transmits when the keyfob button(s) are pressed (using one of the examples on a Nucleo CC2 board to verify) I'm having issues with the receiver ceasing to recover after receiving a low-RSSI signal. As long as the signal strength is reasonable, the HAL_MRSubG_IRQ_Callback executes, and resumes reception without issue. If it receives a packet that is of questionable RSSI (either too far away with the keyfob or wrapping the keyfob in aluminum foil to keep my step count down :) ), the HAL_MRSubG_IRQ_Callback doesn't execute at all once the RSSI is back to the original level, and requires a power cycle to recover. The main loop continues to operate, it's just that the interrupt ceases to fire! I have observed the same thing on the Nucleo CC2 PCB as well using the Chat example. A rebo
I'm trying to develop an application for zigbee for the stm32wb55, but i get some problems when I try to reconnect.The configuration for the coordinator its the next parameters: - config.startupControl = ZbStartTypeForm; - config.extendedPanId = 0x400; - config.panId = 0x7171; - config.shortAddress = 0x0000; - config.networkManagerAddress = 0x7171;The configuration for the End devices are the next parameters: config.startupControl = ZbStartTypeRejoin; config.panId = 0x7171; config.networkManagerAddress = 0x7171; config.shortAddress = 0x01; config.extendedPanId = 0x400;The first time it performs the connection well. But, when the End Device lose the connection (reboot, or whatever it takes), it cannot recconect to the coo
Hello guys,I'm new in LoRaWAN so if my question is dumb - sorry guys. Context:Initial info:custom board with STM32WLE5CCUX family MCU on it;LoRa gateway from P-NUCLEO-LRWAN3 pack;private network gateway;activation type OTAA;What is done:gateway from P-NUCLEO-LRWAN3 has been configured on TTN;End Node is configured on TTN (no problem with traffic monitoring: uplinks/downlinks);I'm having some problems with Join requests to private network gateway. When I'm connecting through gateway from P-NUCLEO-LRWAN3 pack which is in the same room as end node everything works perfectly. But when I'm trying to connect to private network gateway something goes wrong (I have configured different DevEUI for local/private gateways and when I want to switch between them I just change DevEUI). Sometimes End Node is connected after 20 minutes, sometimes after 1h the end node is still not connected to the private network gateway.I know that network coverage is very bad, but other devices someho
In the STM32WL55 reference manual (RM0453 Rev 1) section 5.8.5 states "Get_Status(status) can be issued at any time"However, there seem to be many situations where this command will result in a reserved value for the "CmdStatus" field.A minimal reproduction of this can be done by setting the radio into standby (RC 13MHz), followed by a Get_Status command. In this scenario Get_Status deterministically returns 0xA2, which corresponds to a bit value of 1 for the CmdStatus field, which is reserved per the reference manual.Another example is after transmitting data with Set_Tx; the status will show 0xE2 (Mode = TX, CmdStatus = 1) before the transmission has completed, and 0xAC (Mode = StandbyRC, CmdStatus = Complete) after the transmission has completed.1) What does a value of 1 in the CmdStatus field of the Get_Status() command correspond to?2) Are there any conditions when the result of Get_Status() is invalid?
I'm currently testing the BLE_LLD examples provided by st. I have two Nucleo Boards one running BLE_LLD_Lowpower and one running the BLE_LLD_Pressbutton example. That example works fine and I can change whatever is transmitted.If I use the same BLE_LLD_Lowpower example on one of my own PCBs with a STM32WB5MMG6 module I can only make the example work if I provide 3.3V. If I change the supply voltage to anything else than 3.3V it only transmits one package. But as soon as it enters the LL_PWR_MODE_STOP2 low power mode and wakes up from it, it seems to be stuck at some point. If I debug said example at 1.8V it keeps on running. (I think it won't go into sleep mode).If I run both examples unchanged and run the Lowpower example at 1.8V I get the same results.Is there an explanation for said behaviour? Any help appreciated
Hi,I'm currently using a custom board containing a WB55 chipset. My application running on this uses the Thread (open thread) FTD firmware (v1.23.0.0) My understanding is that given a fixed mesh local prefix calls to otThreadGetMeshLocalEid should return a consistent value through reboots. This does not seem to happen as otThreadGetMeshLocalEid returns a different address each time. Note, thread starts and is usable I'm just not getting a stable address. I'm not using COAP - straight Thread (not Matter) and I can get communication across the network so my basic setup is ok. Information on this subject is scarce and sometimes vague. Can you clarify - Should otThreadGetMeshLocalEid return a stable address across reboots. I'm not able to upload my source.CheersAndy
Hello ST Community,I’m working with an STM32WB55RG NUCLEO board and following the P2P Client tutorial. I’ve encountered an issue where my smartphone(ST BLE Sensor app) is not able to discover the board1. Hardware & Project• Board: NUCLEO‑WB55RG• Example: P2P Server (found in P-NUCLEO-WB55.Nucleo folder)2. FUS / BLE Stack Upgrade• Files used:stm32wb5x_FUS_fw.binstm32wb5x_BLE_Stack_full_fw.bin• Uploaded via STM32CubeProgrammer with “Start address automatic determination” - When I manually enter the address refer to Release Note, there was an error message "no mage found", but Firmware successfully updated when using automatic determination mode.3. Observed BehaviorAfter the upgrade and code upload, the board powers on, but my smartphone does not see any BLE device advertising.No new entries appear in the phone’s Bluetooth list.+ All the programs are up-to-date Any guidance on how to get my STM32WB55RG NUCLEO advertising would be greatly appreciated. Thank you in adva
Hello,I've been doing some test on the NUCLEO-WBA65RI which has a STM32F7 MCU and when I tried to generate a project on CubeMX I noticed that the native FREERTOS option on middlewares does not appear.I see that it can be downloaded using the option X-CUBE-FREERTOS. But I'm curious why it is implemented like that for this board. Because on another mcus like STM32WB55, STM32H7X that I've been using it is already native.Thanks in advance!
I am working on an example project: MAC 802 (\STM32Cube\Repository\STM32Cube_FW_WB_V1.21.0\Projects\P-NUCLEO-WB55.Nucleo\Applications\Mac_802_15_4\Mac_802_15_4_Node).I have added standby mode to this code, but I am unable to wake it up.After entering standby using RTC, the system does not wake up after MX_APPE_Init();.My code is as follows:int main(void) { /* Initialize the HAL */ HAL_Init(); Check_Wakeup_Source(); ALGORTM.WakeUp_From_stopM = true; /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */ MX_APPE_Config(); ALGORTM.WakeUp_From_stopM = true; Load_Values_From_FLASH(); /*Configure the system clock */ SystemClock_Config(); /* Configure the peripherals common clocks */ PeriphCommonClock_Config(); /* IPCC initialisation */ MX_IPCC_Init(); // LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN); MX_GPIO_Init(); MX_RTC_Init(); MX_I2C3_Init(); MX_TIM1_Init(); MX_TIM2_Init(); MX_TIM17_Init(); // MX_ADC1_Init();
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.