2025-07-01 3:52 AM - edited 2025-07-01 3:59 AM
Hello :)
I am developing an application using a pair of NUCLEO-WL33CC1. I am testing the LPAWUR, using the LPAWUR_WakeupRadio_Rx and MRSUBG_WakeupRadio_Tx examples as a starting point. The examples work fine, but the range is very short, only about 0.3 m. How can I increase my range? I am able to achieve 50m+ when sending my normal radio telemetry, just the LPAWUR range is very short. This makes me believe the antenna and hardware TX path is fine, and it is a configuration issue with LPAWUR. Can anyone reccomend some changes to the following code? I tried enabling the AGC which had no positive effect. Here is my init function for LPAWUR:
static void MX_LPAWUR_Init(void)
{
/* USER CODE BEGIN LPAWUR_Init 0 */
/* USER CODE END LPAWUR_Init 0 */
/* USER CODE BEGIN LPAWUR_Init 1 */
/* USER CODE END LPAWUR_Init 1 */
/** Initializes the RF Config
*/
LPAWUR_RadioInitStruct.EnergyDetectorIcal = ED_ICAL_VBAT_3_25_TO_3_50;
LPAWUR_RadioInitStruct.ClockDivider = 7;
LPAWUR_RadioInitStruct.EnergyDetectorSwitch = DISABLE;
LPAWUR_RadioInitStruct.AgcResetMode = AGC_RESET_MODE_NEVER;
LPAWUR_RadioInitStruct.AgcHoldMode = AGC_HOLD_AFTER_PREAMBLE;
LPAWUR_RadioInitStruct.AgcMode = AGC_MODE_OFF;
LPAWUR_RadioInitStruct.AgcHiLvl = AGC_VBAT_0800;
LPAWUR_RadioInitStruct.DCCurrentSubtraction = ENABLE;
LPAWUR_RadioInitStruct.AgcLoLvl = AGC_LOW_0;
HAL_LPAWUR_RFConfigInit(&LPAWUR_RadioInitStruct);
/** Initializes the Frame
*/
LPAWUR_FrameInitStruct.TRecAlgoSel = TWO_STEPS;
LPAWUR_FrameInitStruct.SlowClkCyclePerBitCnt = 16;
LPAWUR_FrameInitStruct.PayloadLength = 7;
LPAWUR_FrameInitStruct.SyncThr = 16;
LPAWUR_FrameInitStruct.SyncLength = 0;
LPAWUR_FrameInitStruct.PreambleThrCnt = 0x3C;
LPAWUR_FrameInitStruct.PreambleEnable = ENABLE;
LPAWUR_FrameInitStruct.FrameSyncCntTimeout = 0x60;
LPAWUR_FrameInitStruct.FrameSyncPattenHigh = 0x00;
LPAWUR_FrameInitStruct.FrameSyncPatternLow = 0x6969;
LPAWUR_FrameInitStruct.KpGain = 6;
LPAWUR_FrameInitStruct.KiGain = 10;
HAL_LPAWUR_FrameInit(&LPAWUR_FrameInitStruct);
LL_LPAWUR_SetState(ENABLE);
/* USER CODE BEGIN LPAWUR_Init 2 */
/* USER CODE END LPAWUR_Init 2 */
}
And here is my MRSUBG init function in the device I am using to wake my sleeping device
// Re-init the radio with the required LPAWUR configuration
LPAWUR_radio_wake_config.lFrequencyBase = 868000000;
LPAWUR_radio_wake_config.xModulationSelect = MOD_OOK;
LPAWUR_radio_wake_config.lDatarate = 2000;
LPAWUR_radio_wake_config.lFreqDev = 20000;
LPAWUR_radio_wake_config.lBandwidth = 50000;
LPAWUR_radio_wake_config.dsssExp = 0;
LPAWUR_radio_wake_config.outputPower = 14;
LPAWUR_radio_wake_config.PADrvMode = PA_DRV_TX_HP;
HAL_MRSubG_Init(&LPAWUR_radio_wake_config);
/** Configures the packet parameters
*/
LPAWUR_packet_settings.PreambleLength = 0;
LPAWUR_packet_settings.PostambleLength = 0;
LPAWUR_packet_settings.SyncLength = 0;
LPAWUR_packet_settings.SyncWord = 0x88888888;
LPAWUR_packet_settings.FixVarLength = FIXED;
LPAWUR_packet_settings.PreambleSequence = PRE_SEQ_0101;
LPAWUR_packet_settings.PostambleSequence = POST_SEQ_0101;
LPAWUR_packet_settings.CrcMode = PKT_NO_CRC;
LPAWUR_packet_settings.Coding = CODING_MANCHESTER;
LPAWUR_packet_settings.DataWhitening = DISABLE;
LPAWUR_packet_settings.LengthWidth = BYTE_LEN_1;
LPAWUR_packet_settings.SyncPresent = DISABLE;
Edited to apply source code formatting - please see How to insert source code for future reference.
Solved! Go to Solution.
2025-08-07 6:48 AM
Hello @angus123
As you can see on the chapter 7.8.1 of the UM 3418:
"The LPAWUR can work on three different frequency bands. By
default, this feature is not connected to the antenna path. C3 is OFF". So, you have to connect the C3 according to the desired frequency range.
Best Regards.
STTwo-32
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2025-07-02 10:23 AM
Hi @angus123
This post has been escalated to the ST Online Support Team for additional assistance. We'll contact you directly.
Regards,
Billy
2025-08-07 6:48 AM
Hello @angus123
As you can see on the chapter 7.8.1 of the UM 3418:
"The LPAWUR can work on three different frequency bands. By
default, this feature is not connected to the antenna path. C3 is OFF". So, you have to connect the C3 according to the desired frequency range.
Best Regards.
STTwo-32
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2025-09-18 1:36 AM
Hello @STTwo-32
I am running the same examples on a NUCLEO-WL33CC1 device as @angus123 and getting the same result of very small range of around 0.3meters.
From studying the Readme.md for the demo, LPAWUR_WakeupRadio_Rx it mentions that "For the receiver part: since the RF path of LPAWUR is not connected to the SMA connector, to run this example is needed to solder a 0 Ohm resistor on C3. The matching network is assembled and is tuned for the band 826-958 MHz."
I have done that modification and found no change in the range.
Under your answer for this issue you have mentioned changing C3 value to achieve one of the desired frequency bands.
I have two questions,
1. Which is the correct approach to increase the range of the LPAWUR signals? soldering a 0 Ohm resister as mentioned in the demo readme file or changing the C3 value as you have mentioned here. If latter is the solution how are we expected to change the C3 values? are we supposed to replace the C3?
2. What is the expected range of a LPAWUR wake up signal by design? Is it meant to be short range (less than 3 meters) or is it practical to expect to increase the range to around 30 meters? What is the feasible maximum range for the LPAWUR wake up signal?
Thank you for your time. I look forward to hearing from you.
Best Regards,
Ecospin
2025-09-18 2:04 AM
See section 7.8.1 in the user manual https://www.st.com/resource/en/user_manual/um3418-stm32wl3x-nucleo64-boards-mb1801-and-mb2029-stmicroelectronics.pdf.
Range is meant to be short, LPAWUR is designed to be short range of at max 10m I have heard, but that is in a perfect test environment. I never got more than a metre or two.
2025-09-18 2:54 AM
@angus123 Thank you for the quick response. The short range of the LPAWUR is not ideal for my application. Did you find any alternatives to replace the LPAWUR wake up mechanism in your own application?
2025-09-18 3:02 AM
Hi Ecospin,
Me neither, I ended up just using the main radio. I sleep my unit with a wakeup interrupt generated every 32 seconds by the RTC (see section 22.3.5 of RM0511 Reference Manual). Upon waking, it transmits a message to see if it is time to wake up. If my other radio device detects this and wants it to wake up, then it replys with a packet saying to wake up. If the sleeping unit receives this packet it wakes up to normal operation, but if it does not receive this wakeup packet in a couple ms then it goes back to sleep. This has the full radio range, but a worst case delay of 32 seconds to wake up, which is fine for me. Would use more power than LPAWUR but it is acceptable for me.
I based the sleep/RTC wakeup on the PWR_DEEPSTOP_RTC example in CubeMX.
2025-09-18 3:51 AM
@angus123, Thank you so much for this detailed and helpful response! I really appreciate you walking through your implementation with the RTC wakeup interrupt every 32 seconds and the handshake protocol with the other radio. It's a clever approach to maintain full range while managing power.
I will definitely take a look at the PWR_DEEPSTOP_RTC example in CubeMX you mentioned. This gives me a great starting point to try and develop an alternative that might work for my scenario.
Thanks again for taking the time to share this. Best of luck with your projects!
Best Regards,
Ecospin