文章出處

以下的代碼適用于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 );
}

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()