2024-09-18 11:15 AM
Hello, I am using the NucleoWL55 for transmitting and receiving the data. I am able to transmit and receive the data in HEX, and when I observed in SDR# using RTL SDR I observed the burst data. I want to know if the NucleoWL55 can transmit the CW data or not?,,
Please, help
Solved! Go to Solution.
2024-10-01 2:11 AM
Hello @D_Sajan
Yes, it is possible to transmit Continuous Wave (CW) data using the STM32WL.
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.
2024-10-01 2:11 AM
Hello @D_Sajan
Yes, it is possible to transmit Continuous Wave (CW) data using the STM32WL.
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-03-30 7:44 AM
Thank you for the response!
I will share how I am doing my project on the NucleoWL55 to utilize the GFSK modulation
If I am doing some error then please make me correct and please support me to transmit CW and receive it. Also share how to implement it.
Making a new project in STM32CubeIDE
Configuring the IOC file (In default peripheral initialization)
A. System Core, RCC
B. Connectivity, SUBGHZ
C. Middleware and Software Packs
D. Clock Configuration to 48MHz
Then I click on 'Code Generation'
3. After the 'Build' I got 12 warnings in ../SubGHz_Phy/Target/radio_board_if.h and "../SubGHz_Phy/Target/radio_board_if.c"
My next step was to import the BSP library in Drivers folder
After then I rename stm32wlxx_nucleo_conf_template.h to stm32wlxx_nucleo_conf.h
4. Now I copy Driver--> STM32WLxx_Nucelo --> stm32wlxx_nucleo_radio.c and stm32wlxx_nucleo_radio.h to the SubGHZ_Phy-->Targer--> radio_board_if.c and radio_board_if.h
I have attached my radio_if.c and radio_if.h..
5. Now I include the radio_drive to my main.c
6. Now I utilize the GFSK as :
PacketParams_t pkt_params;
ModulationParams_t mod_params;
pkt_params.PacketType = PACKET_TYPE_GFSK;
pkt_params.Params.Gfsk.PayloadLength = buffer_length;
pkt_params.Params.Gfsk.PreambleLength = 8;
pkt_params.Params.Gfsk.PreambleMinDetect = RADIO_PREAMBLE_DETECTOR_08_BITS;
pkt_params.Params.Gfsk.SyncWordLength = 3 << 3;
pkt_params.Params.Gfsk.AddrComp = RADIO_ADDRESSCOMP_FILT_OFF;
pkt_params.Params.Gfsk.HeaderType = RADIO_PACKET_FIXED_LENGTH;
pkt_params.Params.Gfsk.CrcLength = RADIO_CRC_2_BYTES_CCIT;
pkt_params.Params.Gfsk.DcFree = RADIO_DC_FREEWHITENING;
SUBGRF_SetPacketParams(&pkt_params);
mod_params.PacketType = PACKET_TYPE_GFSK;
mod_params.Params.Gfsk.Bandwidth = RX_BW_29300;
mod_params.Params.Gfsk.BitRate = bitRate;
mod_params.Params.Gfsk.Fdev = fDev;
mod_params.Params.Gfsk.ModulationShaping = MOD_SHAPING_G_BT_1;
SUBGRF_SetModulationParams(&mod_params);
SUBGRF_SetBufferBaseAddress(0x00, 0x00);
SUBGRF_SetPayload(buffer, buffer_len);
SUBGRF_SetSyncWord(( uint8_t[] ) { 0xC1, 0x94, 0xC1, 0x00, 0x00, 0x00, 0x00,
0x00 });
SUBGRF_SetWhiteningSeed(0x01FF);
SUBGRF_SetPaConfig(PA_DUTY_CYCLE, HP_MAX, PA_SEL, 0x01);
SUBGRF_SetTxParams(RFO_LP, POWER, RAMP_TIME);
SUBGRF_Init(DioIrqHndlr);
SUBGRF_SetDioIrqParams(
IRQ_TX_DONE | IRQ_PREAMBLE_DETECTED | IRQ_RX_DONE
| IRQ_RX_TX_TIMEOUT | IRQ_SYNCWORD_VALID,
IRQ_TX_DONE | IRQ_PREAMBLE_DETECTED | IRQ_RX_DONE
| IRQ_RX_TX_TIMEOUT | IRQ_SYNCWORD_VALID, IRQ_RADIO_NONE,
IRQ_RADIO_NONE);
//For TX
SUBGRF_SetRfFrequency(freq_update_uplink);
SUBGRF_SetSwitch(RFO_LP, RFSWITCH_TX);
SUBGRF_SendPayload(tx_buffer, tx_buffer_len, 0);
//For RX
SUBGRF_SetRfFrequency(freq_update_downlink);
SUBGRF_SetSwitch(RFO_LP, RFSWITCH_RX);
SUBGRF_SetRxBoosted(0xFFFFFF);
void DioIrqHndlr(RadioIrqMasks_t radioIrq) {
if (radioIrq == IRQ_TX_DONE) {
}
if (radioIrq == IRQ_RX_DONE) {
}
}
If any correction to be made please suggest..
And to execute CW is not possible by this process.. but correct working in HEX
Thank you!
Regards