例程使用官方库,但再应用上做了部分修改调整,官方例程里是针对lorawan进行了大篇幅的操作,各种函数指针骚操作,看得脑壳疼。
在官方例程的基础上,对程序进行了剥离整合,做成了最简的MAC层通信,一收一发。测试时,对应修改宏定义及底层SPI配置即可。
模块使用ASR6500S,其内部lora射频芯片也即sx1262
void LORA_Send(uint8_t* buffer, uint8_t size)
{
SX126xSetDioIrqParams( IRQ_TX_DONE,IRQ_TX_DONE, IRQ_RADIO_ALL, IRQ_RADIO_ALL );
SX126xSetStandby( STDBY_RC );
SX126xSetBufferBaseAddress( 0x00, 0x00 );
SX126x.PacketParams.Params.LoRa.PayloadLength = size;
SX126xSetPacketParams( &SX126x.PacketParams );
SX126xSendPayload( buffer, size, 0 );
}
void LORA_RxMode(void)
{
SX126xSetDioIrqParams( IRQ_RX_DONE, IRQ_RX_DONE,IRQ_RADIO_NONE,IRQ_RADIO_NONE );
SX126xSetStandby( STDBY_RC );
SX126xSetBufferBaseAddress( 0x00, 0x00 );
SX126xSetLoRaSymbNumTimeout(0);
SX126xSetRx( 0 );
}
uint8_t lora_buf[10] = {0x01,0x02,0x03,0x04,0x05,0x06,0x0a,0x0b,0x0c,0x0d};
uint8_t packet_size = 0, buf_offset = 0;
uint8_t lora_rxbuf[64] = {0};
void main(void)
{
BSP_Init(); // 硬件初始化
SYS_Init();// 系统数据初始化
LORA_Init();// sx1262初始化配置
LORA_RxMode();// 进入接收模式
enableInterrupts();// 系统中断使能
while (1)
{
#if TX // 宏定义,开启发送
if(g_SysData.Send == 1) // 定时器中断,间隔5s发送一次
{
g_SysData.Send = 0;
LORA_Send(lora_buf, 10);// 发数据
}
if(g_SysData.Irq == 1)// 发送中断
{
g_SysData.Irq = 0;
SX126xClearIrqStatus(IRQ_TX_DONE); // 清中断信息
}
#endif
#if RX 宏定义,开启接收
if(g_SysData.Irq == 1) // 接收中断
{
g_SysData.Irq = 0;
if(SX126xGetIrqStatus() == IRQ_RX_DONE) // 中断标志为接收中断
{
SX126xGetRxBufferStatus(&packet_size, &buf_offset); // 读取接收的数据长度
SX126xReadBuffer(buf_offset, lora_rxbuf, packet_size); // 接收数据
SX126xClearIrqStatus(IRQ_RX_DONE); // 清中断信息
LORA_RxMode(); // 置为接收模式
}
}
#endif
}
}
问题点1:发送中断无法进入。再进入一次发送中断时,需对其中断标志做清除才可再下一次产生中断
问题点2:无法接收数据。在测试过程中,原板子只做了MCU+lora芯片+外围威廉希尔官方网站
,没有焊接天线,数据一直无法接收。查了几个小时无果后,焊接天线尝试,居然可以了。
例程使用官方库,但再应用上做了部分修改调整,官方例程里是针对lorawan进行了大篇幅的操作,各种函数指针骚操作,看得脑壳疼。
在官方例程的基础上,对程序进行了剥离整合,做成了最简的MAC层通信,一收一发。测试时,对应修改宏定义及底层SPI配置即可。
模块使用ASR6500S,其内部lora射频芯片也即sx1262
void LORA_Send(uint8_t* buffer, uint8_t size)
{
SX126xSetDioIrqParams( IRQ_TX_DONE,IRQ_TX_DONE, IRQ_RADIO_ALL, IRQ_RADIO_ALL );
SX126xSetStandby( STDBY_RC );
SX126xSetBufferBaseAddress( 0x00, 0x00 );
SX126x.PacketParams.Params.LoRa.PayloadLength = size;
SX126xSetPacketParams( &SX126x.PacketParams );
SX126xSendPayload( buffer, size, 0 );
}
void LORA_RxMode(void)
{
SX126xSetDioIrqParams( IRQ_RX_DONE, IRQ_RX_DONE,IRQ_RADIO_NONE,IRQ_RADIO_NONE );
SX126xSetStandby( STDBY_RC );
SX126xSetBufferBaseAddress( 0x00, 0x00 );
SX126xSetLoRaSymbNumTimeout(0);
SX126xSetRx( 0 );
}
uint8_t lora_buf[10] = {0x01,0x02,0x03,0x04,0x05,0x06,0x0a,0x0b,0x0c,0x0d};
uint8_t packet_size = 0, buf_offset = 0;
uint8_t lora_rxbuf[64] = {0};
void main(void)
{
BSP_Init(); // 硬件初始化
SYS_Init();// 系统数据初始化
LORA_Init();// sx1262初始化配置
LORA_RxMode();// 进入接收模式
enableInterrupts();// 系统中断使能
while (1)
{
#if TX // 宏定义,开启发送
if(g_SysData.Send == 1) // 定时器中断,间隔5s发送一次
{
g_SysData.Send = 0;
LORA_Send(lora_buf, 10);// 发数据
}
if(g_SysData.Irq == 1)// 发送中断
{
g_SysData.Irq = 0;
SX126xClearIrqStatus(IRQ_TX_DONE); // 清中断信息
}
#endif
#if RX 宏定义,开启接收
if(g_SysData.Irq == 1) // 接收中断
{
g_SysData.Irq = 0;
if(SX126xGetIrqStatus() == IRQ_RX_DONE) // 中断标志为接收中断
{
SX126xGetRxBufferStatus(&packet_size, &buf_offset); // 读取接收的数据长度
SX126xReadBuffer(buf_offset, lora_rxbuf, packet_size); // 接收数据
SX126xClearIrqStatus(IRQ_RX_DONE); // 清中断信息
LORA_RxMode(); // 置为接收模式
}
}
#endif
}
}
问题点1:发送中断无法进入。再进入一次发送中断时,需对其中断标志做清除才可再下一次产生中断
问题点2:无法接收数据。在测试过程中,原板子只做了MCU+lora芯片+外围威廉希尔官方网站
,没有焊接天线,数据一直无法接收。查了几个小时无果后,焊接天线尝试,居然可以了。
举报