cancel
Showing results for 
Search instead for 
Did you mean: 

Can NuceloWL55 transmit CW?

D_Sajan
Associate

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

1 ACCEPTED SOLUTION

Accepted Solutions
STTwo-32
ST Employee

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.

View solution in original post

2 REPLIES 2
STTwo-32
ST Employee

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.

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 

D_Sajan_0-1743343224534.png

D_Sajan_1-1743343279962.png

Configuring the IOC file (In default peripheral initialization)

A. System Core, RCC

D_Sajan_3-1743343569382.png

B. Connectivity, SUBGHZ

D_Sajan_2-1743343548871.png

C. Middleware and Software Packs

D_Sajan_4-1743343625654.png

D. Clock Configuration to 48MHz

D_Sajan_5-1743343794712.png

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

D_Sajan_6-1743344137875.png

D_Sajan_7-1743344216736.png

D_Sajan_9-1743344246590.png

D_Sajan_10-1743344323524.png

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

D_Sajan_11-1743344479617.png

I have attached my radio_if.c and radio_if.h..


 5. Now I include the radio_drive to my main.c

D_Sajan_12-1743344788837.png

 

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