ASR6500S(sx1262) + STM8 收发 例程

news/2025/3/25 23:01:23/

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

完整可用收发工程:

https://download.csdn.net/download/lnwechag/12640305


http://www.ppmy.cn/news/401448.html

相关文章

LoRa无线远传水表方案ASR6500S/LLCC68

LoRa无线远传水表就是普通机械水表加上电子采集发讯模块而组成,电子模块完成信号采集、数据处理、存储并将数据通过通信线路上传给中继器、或手持式的抄表器。 LoRa无线远传水表作为市面上比较火的智能水表;由主站通过传输媒体将多个户用仪表的数据集中抄…

ASR6500S低功耗LoRa+射频前端LPWAN应用芯片

ASR6500S系列LoRa SIP模组集成LoRa射频芯片及射频前端,支持LoRa和FSK调制,频率覆盖150M-960M的连续频段。在SF12下接收灵敏超过-140dBm,最大的发送功率为22dBm,最大的工作电流为108mA,睡眠模式电流低至0.6uA&#xff0…

CSP第二轮/NOIP 比赛注意事项

一、在哪里写代码 主办方会提前在桌面已在 E 盘根目录下建立以考生准考证编号命名的文件夹,考生应检查该文件夹名称是否正确(包括编号及大小写字母),如有错误须立即上报监考人员,由监考人员进行更改。确认无误后,考生须为每道试题再单独建立一个子文件夹,子文件夹名与对应…

Linux或Windows上实现端口映射

关注“云计算就该这么学”微信公众号,搜索“001”,即可获取氪肝整理的154页Linux学习笔记。 通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务…

动态规划dp —— 26.环绕字符串中唯一的子字符串

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置元素为结尾的所有的子串里面,有多少个在base中出现过 2.状态转移方程 dp[i] 等于什么 如果是单个字母的子串,肯定会在base中出现,所以…

MySQL事务相关笔记

杂项 InnoDB最大特点:支持事务和行锁; MyISAM不支持事务 介绍 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库。事务有如下特性…

wi+r命令快速启动应用

巧用快捷方式实现自定义WinR命令(VBS版) windows创建右键菜单 winr快捷命令 想了解工具是如何效果的看上面两篇链接; 第一步: 执行exe 第二部:添加到右键菜单根据你的安装路径修改注册表; Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\winr] "i…

大数据hadoop生态技术简介

Hadoop 生态是指围绕 Hadoop 大数据处理平台形成的一系列开源软件和工具,用于支持大规模数据处理、存储、管理、分析和可视化等应用场景。暂时将其核心技术分为9类: 数据采集技术框架: Flume、Logstash、FileBeat;Sqoop和Datax&…