You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32控制LoRa启用应答等待后数据乱码问题排查

问题:STM32控制LoRa模块发送数据时等待回复出现乱码

我用STM32控制LoRa模块发送数据:

  • 当不等待目标设备回复时,接收端数据正常,对应主代码如下:
if (SX126x_Lora_init() != NORMAL) {
  //无线模块初始化
  while (1) {
  }
}

for (i = 0; i < 112; i++)
  writeBuffer[i] = i;
while (1) {
  SX126xSetStandby(STDBY_XOSC);
  DIO1_EnableInterrupt();
  SX126X_TxPacket(writeBuffer, 112);
  // while(!sendState)
  // HAL_Delay(100);
  HAL_Delay(100);
}
  • 但取消注释等待sendState的两行代码后,接收端数据出现乱码。

以下是相关函数代码:

DIO1中断回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  if (DIO1_GetState() == GPIO_PIN_SET) {
    uint16_t flag;
    flag = SX126xGetIrqStatus();
    SX126xClearIrqStatus(IRQ_RADIO_ALL);  //clear flags

    if ((flag & IRQ_TX_DONE) == IRQ_TX_DONE) {
      SX126xSetStandby(STDBY_XOSC);
      DIO1_EnableInterrupt();
      SX126X_StartRx();
    } else if ((flag & (IRQ_RX_DONE | IRQ_CRC_ERROR)) == IRQ_RX_DONE) {
      if (G_LoRaConfig.HeaderType == LORA_PACKET_IMPLICIT) {
        SX126xClearTimeoutEvent();
      }
      DIO1_DisableInterrupt();
      SX126X_RxPacket(RXbuffer);
      if (RXbuffer[0] == 0 && RXbuffer[1] == 2) {
        RSSI = G_LoRaPara.LastPacket_RSSI;
        SNR = G_LoRaPara.Packet_SNR;
        Avg_RSSI = G_LoRaPara.AvgPacket_RSSI;
        switch (RXbuffer[0]) {
          case 0x00:
            sendState += 1;
            break;
          default: break;
        }
        memset(RXbuffer, 0, sizeof(RXbuffer));
      }
    } else {
      DIO1_EnableInterrupt();
      SX126X_StartRx();
    }
  }
}

LoRa初始化函数

tSX126xError SX126x_Lora_init(void) {
  if (false == LoRaConfig_Check()) {
    return PARAMETER_INVALID;
  }
  SX126X_SPI_Init();
  SX126X_InitIo();
  SX126X_Reset();
  SX126xWakeup();
  SX126xSetStandby(STDBY_RC);
  SX126xWriteRegister(TxClampConfig, SX126xReadRegister(TxClampConfig) | 0x1E);
  SX126xSetRegulatorMode(USE_DCDC);
  if (1U == BSP_RADIO_IsTCXO()) {
    //TCXO版本
    SX126xClearDeviceErrors();
    SX126xSetDio3AsTcxoCtrl(TCXO_CTRL_1_8V, 320);
    SX126xWriteRegister(REG_XTA_TRIM, 0x2F);
    CalibrationParams_t calibParam;
    calibParam.Value = 0x7F;
    SX126xCalibrate(calibParam);  //Calibrate the RC13, RC64, ADC , Image、PLL
  }
  SX126xSetPacketType(PACKET_TYPE_LORA);
  uint8_t test = 0;
  SX126xWriteRegister(REG_LR_PAYLOADLENGTH, 0x09);
  test = SX126xReadRegister(REG_LR_PAYLOADLENGTH);
  if (test != 0x09)
    return SPI_READCHECK_WRONG;
  SX126xSetDio2AsRfSwitchCtrl(1);
  SX126xWriteRegister(REG_RX_GAIN, 0x96);
  SX126xSetRfFrequency(G_LoRaConfig.LoRa_Freq);
  SX126xSetRfTxPower(G_LoRaConfig.PowerCfig);
  SX126xSetBufferBaseAddress(0x00, 0x00);
  SX126xSetLoraModulationParams();  //SF、BW、CR、LOWDATARATEOPTIMIZE
  SX126xSetLoraPacketParams();      //PreambleLength、HeaderType、PayloadLength、CrcMode、InvertIQ
  SX126x_Lora_SyncWord(0x12);
  //SX126xSetDioIrqParams( IRQ_RADIO_ALL, IRQ_RADIO_ALL, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
  return NORMAL;
}

发送数据包函数

void SX126X_TxPacket(uint8_t* data, uint16_t len) {
  SX126xSetStandby(STDBY_XOSC);
  SX126xCalibrate_err();
  SX126xSetRegulatorMode(USE_DCDC);
  SX126XWriteRxTx(true);
  SX126xClearIrqStatus(IRQ_RADIO_ALL);
  SX126xSetDioIrqParams(
    IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT,
    IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT,
    IRQ_RADIO_NONE,
    IRQ_RADIO_NONE);
  //(p1,p2,p3,p4),P1:
  SX126xSetLoraPacketParams();  //PreambleLength、HeaderType、PayloadLength、CrcMode、InvertIQ
  SX126xSetBufferBaseAddress(0x00, 0x00);
  SX126xSendPayload(data, len, 0x2fffff);
}

接收数据函数

void SX126X_StartRx(void) {
  SX126xSetStandby(STDBY_XOSC);
  SX126xCalibrate_err();
  SX126xSetRegulatorMode(USE_DCDC);
  SX126XWriteRxTx(false);
  SX126xClearIrqStatus(IRQ_RADIO_ALL);
  SX126xSetDioIrqParams(
    IRQ_RX_DONE | IRQ_CRC_ERROR | IRQ_RX_TX_TIMEOUT,
    IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT,
    IRQ_RADIO_NONE,
    IRQ_RADIO_NONE);
  DIO1;
  SX126xSetStopRxTimerOnPreambleDetect(false);
  SX126xSetLoRaSymbNumTimeout(0);
  SX126xSetBufferBaseAddress(0x00, 0x00);
  SX126xSetRx(0x2fffff);
}

我尝试让LoRa在进入接收模式后先进入待机模式,再切换到发送模式,发送完成后回到待机模式并进入接收模式,但问题未得到明显改善。

内容的提问来源于stack exchange,提问作者ywye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:32:05