单片机学习小组
直播中

刘悌耀

8年用户 1090经验值
私信 关注

如何去实现基于ASR6500S + STM8的收发数据程序呢

如何去实现基于ASR6500S + STM8的收发数据程序呢?

回帖(1)

潘琳

2022-2-21 15:12:21
例程使用官方库,但再应用上做了部分修改调整,官方例程里是针对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芯片+外围威廉希尔官方网站 ,没有焊接天线,数据一直无法接收。查了几个小时无果后,焊接天线尝试,居然可以了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分