LoRaWAN_stack移植笔记(七)_数据包的接收发送

以下的代码适用于LoRa sx1276点对点的通讯,纯粹的考虑在非发射模式下即为接收模式

配置sx1276的射频参数,并且切换到接收模式

//bandwidth [0:125  1:250 2:500]
void set_private_LoRa_para(uint32_t freq, uint8_t datarate_index, uint8_t bandwidth,bool rxContinuous)
{
    uint16_t timeout = 5;//DR_0 DR_1 DR_2
    uint8_t max_payload_index = 0;
    RadioModems_t modem;

    uint8_t datarate = Datarates[datarate_index];
    
    SX1276Write(0x4B,0x19);//设置使用外部晶振
    /* 此处使能外部晶振 */
    
	//此处映射回调函数,RXDONE/TXDONE/....
  
	if( ( datarate_index == DR_3 ) || ( datarate_index ==  DR_4) )
    { 
        timeout = 8;				
    }
    else if( datarate_index == DR_5 )
    {
        timeout = 10;
    }
    else if(datarate_index == DR_6)
    {
        timeout = 14;
    }
    
    Radio.SetChannel( freq );

    modem = MODEM_LORA;
    Radio.SetRxConfig( modem, bandwidth, datarate, 1, 0, 8, timeout, false, 0, true, 0, 0, false, rxContinuous );

    Radio.SetTxConfig( MODEM_LORA, 20, 0, bandwidth, datarate, 1, 8, false, true, 0, 0, false, 3e3 ); 
    
    //设置最大长度为255字节
    Radio.SetMaxPayloadLength( modem, 255);
    
	// 0 表示Continuous mode,其他表示超时时间
    Radio.Rx( 0 ); // Continuous mode
    
    Radio.SetModem( MODEM_LORA );
    SX1276Write(REG_LR_SYNCWORD,0x34);//设置同步字的值
}

SX1276 发包

配置好射频参数之后,发包就像发串口数据一样,直接传入数据的指针和长度可以完成了。

//目前只支持LoRa模式
void private_tx(uint8_t *src_data,uint16_t src_data_len)
{
    //发送数据包
    // Send now
    Radio.Send( src_data, src_data_len );
}
原文地址:https://www.cnblogs.com/answerinthewind/p/6907740.html