jgromes / RadioLib

Universal wireless communication library for embedded devices
https://jgromes.github.io/RadioLib/
MIT License
1.49k stars 376 forks source link

No values after [STM32WL] Initializing ... #1189

Closed Nikitanagar closed 4 weeks ago

Nikitanagar commented 4 weeks ago

I am working on LoRa-E5 mini. And testing the example STM32WLx_Transmit_Interrupt, STM32WLx_Receive_Interrupt. STM32WLx_Transmit_Interrupt code is working fine but STM32WLx_Receive_Interrupt is not showing any output after [STM32WL] Initializing .... Here is the modified code:

Code for transmitting: ` /* RadioLib STM32WLx Transmit with Interrupts Example

This example transmits LoRa packets with one second delays between them. Each packet contains up to 256 bytes of data, in the form of:

*/

// include the library

include

// no need to configure pins, signals are routed to the radio internally STM32WLx radio = new STM32WLx_Module();

// set RF switch configuration for Nucleo WL55JC1 // NOTE: other boards may be different! // Some boards may not have either LP or HP. // For those, do not set the LP/HP entry in the table. static const uint32_t rfswitch_pins[] = {PA4, PA5, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; static const Module::RfSwitchMode_t rfswitch_table[] = { {STM32WLx::MODE_IDLE, {LOW, LOW}}, {STM32WLx::MODE_RX, {HIGH, LOW}}, // {STM32WLx::MODE_TX_LP, {HIGH, HIGH, HIGH}}, {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, END_OF_MODE_TABLE, };

// save transmission state between loops int transmissionState = RADIOLIB_ERR_NONE;

void setup() { Serial.begin(9600);

// set RF switch control configuration // this has to be done prior to calling begin() radio.setRfSwitchTable(rfswitch_pins, rfswitch_table);

// initialize STM32WL with default settings, except frequency Serial.print(F("[STM32WL] Initializing ... ")); int state = radio.begin(868.0); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); }

// set appropriate TCXO voltage for Nucleo WL55JC1 state = radio.setTCXO(1.7); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); }

// set the function that will be called // when packet transmission is finished radio.setDio1Action(setFlag);

// start transmitting the first packet Serial.print(F("[STM32WL] Sending first packet ... "));

// you can transmit C-string or Arduino string up to // 256 characters long transmissionState = radio.startTransmit("Hello World!"); Serial.print("transmission: "); Serial.print(transmissionState);

// you can also transmit byte array up to 256 bytes long / byte byteArr[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; state = radio.startTransmit(byteArr, 8); / }

// flag to indicate that a packet was sent volatile bool transmittedFlag = false;

// this function is called when a complete packet // is transmitted by the module // IMPORTANT: this function MUST be 'void' type // and MUST NOT have any arguments! void setFlag(void) { // we sent a packet, set the flag transmittedFlag = true; }

// counter to keep track of transmitted packets int count = 0;

void loop() { // check if the previous transmission finished if(transmittedFlag) { // reset flag transmittedFlag = false;

if (transmissionState == RADIOLIB_ERR_NONE) {
  // packet was successfully sent
  Serial.println(F("transmission finished!"));

  // NOTE: when using interrupt-driven transmit method,
  //       it is not possible to automatically measure
  //       transmission data rate using getDataRate()

} else {
  Serial.print(F("failed, code "));
  Serial.println(transmissionState);

}

// clean up after transmission is finished
// this will ensure transmitter is disabled,
// RF switch is powered down etc.
radio.finishTransmit();

// wait a second before transmitting again
delay(1000);

// send another one
Serial.print(F("[STM32WL] Sending another packet ... "));

// you can transmit C-string or Arduino string up to
// 256 characters long
String str = "Hello World! #" + String(count++);
transmissionState = radio.startTransmit(str);

// you can also transmit byte array up to 256 bytes long
/*
  byte byteArr[] = {0x01, 0x23, 0x45, 0x67,
                    0x89, 0xAB, 0xCD, 0xEF};
  transmissionState = radio.startTransmit(byteArr, 8);
*/

} } `

Code for receiving:

`/* RadioLib STM32WLx Receive with Interrupts Example

This example listens for LoRa transmissions and tries to receive them. Once a packet is received, an interrupt is triggered. To successfully receive data, the following settings have to be the same on both transmitter and receiver:

*/

// include the library

include

// no need to configure pins, signals are routed to the radio internally STM32WLx radio = new STM32WLx_Module();

// set RF switch configuration for Nucleo WL55JC1 // NOTE: other boards may be different! // Some boards may not have either LP or HP. // For those, do not set the LP/HP entry in the table. static const uint32_t rfswitch_pins[] = {PA4, PA5, RADIOLIB_NC, RADIOLIB_NC, RADIOLIB_NC}; static const Module::RfSwitchMode_t rfswitch_table[] = { {STM32WLx::MODE_IDLE, {LOW, LOW}}, {STM32WLx::MODE_RX, {HIGH, LOW}}, // {STM32WLx::MODE_TX_LP, {HIGH, HIGH, HIGH}}, {STM32WLx::MODE_TX_HP, {LOW, HIGH}}, END_OF_MODE_TABLE, };

void setup() { Serial.begin(9600);

// set RF switch control configuration // this has to be done prior to calling begin() radio.setRfSwitchTable(rfswitch_pins, rfswitch_table);

// initialize STM32WL with default settings, except frequency Serial.print(F("[STM32WL] Initializing ... ")); int state = radio.begin(868.0); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); }

// set appropriate TCXO voltage for Nucleo WL55JC1 state = radio.setTCXO(1.7); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); }

// set the function that will be called // when new packet is received radio.setDio1Action(setFlag);

// start listening for LoRa packets Serial.print(F("[STM32WL] Starting to listen ... ")); state = radio.startReceive(); if (state == RADIOLIB_ERR_NONE) { Serial.println(F("success!")); } else { Serial.print(F("failed, code ")); Serial.println(state); while (true); }

// if needed, 'listen' mode can be disabled by calling // any of the following methods: // // radio.standby() // radio.sleep() // radio.transmit(); // radio.receive(); // radio.readData(); // radio.scanChannel(); }

// flag to indicate that a packet was received volatile bool receivedFlag = false;

// this function is called when a complete packet // is received by the module // IMPORTANT: this function MUST be 'void' type // and MUST NOT have any arguments! void setFlag(void) { // we got a packet, set the flag receivedFlag = true; }

void loop() { // check if the flag is set if(receivedFlag) { // reset flag receivedFlag = false;

// you can read received data as an Arduino String
String str;
int state = radio.readData(str);

// you can also read received data as byte array
/*
  byte byteArr[8];
  int numBytes = radio.getPacketLength();
  int state = radio.readData(byteArr, numBytes);
*/

if (state == RADIOLIB_ERR_NONE) {
  // packet was successfully received
  Serial.println(F("[STM32WL] Received packet!"));

  // print data of the packet
  Serial.print(F("[STM32WL] Data:\t\t"));
  Serial.println(str);

  // print RSSI (Received Signal Strength Indicator)
  Serial.print(F("[STM32WL] RSSI:\t\t"));
  Serial.print(radio.getRSSI());
  Serial.println(F(" dBm"));

  // print SNR (Signal-to-Noise Ratio)
  Serial.print(F("[STM32WL] SNR:\t\t"));
  Serial.print(radio.getSNR());
  Serial.println(F(" dB"));

} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
  // packet was received, but is malformed
  Serial.println(F("CRC error!"));

} else {
  // some other error occurred
  Serial.print(F("failed, code "));
  Serial.println(state);

}

// put module back to listen mode
radio.startReceive();

} }

` Please assist me.. Thank you for your help

StevenCellist commented 4 weeks ago

In what way is this different than the topic #1186 that you have already started? There is a question and suggestion by @jgromes there that may help you and us. Just posting your code without any additional information here doesn't help us to help you. Please refer to https://github.com/jgromes/RadioLib/discussions/1186#discussioncomment-10326647.