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