QuarkXPress SpringApplication extjs6.5 sqlite express validation 网络营销推广 广告投放系统源码 在线考试系统代码 时间戳java mac脚本编辑器 python练习 mysql查询 python语言编程 python定义一个变量 python基础知识 python的lambda函数 python返回值 java文件 java开发 java抽象 java语言学习 java实现接口 java中的数据结构 java时间格式 java匿名函数 jdk环境配置 java安装 java字符串相等 ip隐藏 神龙kms 键盘模拟器 winterboard 脚本错误怎么解决 蓝牙测试软件 linux格式化硬盘 免费ftp空间 flushdns mmap文件怎么打开 mac办公软件
当前位置: 首页 > 学习教程  > 

LoRa开发|LoRa(SX1276/8)串口透传代码-将LoRa封装成单独的驱动(STM32)

2020/10/16 17:46:13 文章标签: lora开发

一、前言 嵌入式开发中我们要时刻保持代码的高效与整洁。2020年,开年注定不平凡,新型冠状肺炎的出现哪里也去不了,在家无聊写点东西吧。最近和一友人聊天,友人一直在抱怨学习lora没有前途,一直在纠结要不要学习&#x…

一、前言

        嵌入式开发中我们要时刻保持代码的高效与整洁。2020年,开年注定不平凡,新型冠状肺炎的出现哪里也去不了,在家无聊写点东西吧。最近和一友人聊天,友人一直在抱怨学习lora没有前途,一直在纠结要不要学习,我只是默默的听着,然后笑一下当做什么都没听见。LoRa是一种通信技术不是一种职业,学不学他都在那里,而且LoRa本身也不难,spi接口,手册还是中文的。目前国内无线通信产品中,NBIOT和LoRa基本各占一半。鉴于这些问题,现在开放一个LoRa转UART的代码,这也是大家在调试LoRa点对点通信中最喜欢用的代码。目前网络上的代码很多也很多,根本不适合学习或者是项目使用,很有有代码对程序框架有所追求。

二、程序编写思路

三、SX1278分析

         通过引脚定义可以看出,重点的引脚就是SPI通信接口,RESET复位引脚,RXTX收发切换引脚,DIO0-DIO5。目前市面上的模组基本上在硬件上实现收发自动切换,不需要额外关心,有些没有实现自己增加引脚控制切换即可。以安信可的Ra-01为例,该模组已经实现了收发硬件自动切换,所以不需要额外的关心。

DIO0-DIO5引脚映射关系:

通过手册引脚映射可见:如果只是实现LoRa的收发数据只需要用到DIO0应交即可,不需要其他引脚。

综上所述:LoRa驱动移植所需要的IO口

1.SPI通信接口4线;

2.芯片复位引脚;

3.DIO0中断检测引脚:

4.软定时器:发送超时,接收超时,CAD检测超时:

四、LoRa代码移植

LoRa驱动接口,并将LoRa封装成驱动


static struct cola_device_ops radio_ops =
{
    .config  = radio_config,
    .control = radio_ctrl,
    .write   = radio_write,
    .read    = radio_read,
};

void radio_bsp_init(void)      
{                 
    spi_dev = cola_device_find("spi1");
    assert(spi_dev);
    dio0_dev = cola_device_find("sx1276_dio0");
    assert(dio0_dev);
    cola_device_cfg(dio0_dev,sx1276_dio0_exit,0);
    reset_dev = cola_device_find("sx1276_reset");
    assert(reset_dev);
    cola_fifo_init(&radio_fifo_rx,radio_buf_rx,sizeof(radio_buf_rx));
    cola_fifo_init(&radio_fifo_tx,radio_buf_tx,sizeof(radio_buf_tx));
    cola_fifo_init(&radio_fifo_tx_cnt,radio_buf_tx_cnt,sizeof(radio_buf_tx_cnt));
    tmer_init();
}
void board_setup_radio(void)
{
    radio_bsp_init();
    radio_init();
    radio_dev.name = "lora";
    radio_dev.dops = &radio_ops;
    cola_device_register(&radio_dev);
}
late_initcall(board_setup_radio);

应用层调用:

/**
  ********************************  cola os  *********************************
  * @file   : app.c
  * @author : sunny.Bit(QQ 1506564994)
  * @brief  : uart2lora
  ******************************************************************************/
#include "config.h"
#include <string.h>
#include "app.h"
#include "cola_device.h"
#include "cola_os.h"

static task_t uart_task;
static cola_device_t *uart_dev;
static cola_device_t *radio_dev;

static uint8_t tmp[128] = {0};
static void uart_task_cb(uint32_t event)
{
   int err = 0;
   if(event&SIG_DATA)
   {
        err = cola_device_read(uart_dev,0,tmp,sizeof(tmp));
        if(err)
        {
            err = cola_device_write(radio_dev,0,tmp,err);
        }
   }
   if(event&SIG_RADIO_DATA)
   {
        err = cola_device_read(radio_dev,0,tmp,sizeof(tmp));
        if(err)
        {
            cola_device_write(uart_dev,0,tmp,err);
        }
   }
}
void uart_to_radio_task_init(void)
{
    extern void uart_dev_init(void);
    extern void radio_dev_init(void);
    uart_dev_init();
    radio_dev_init();
    cola_task_create(&uart_task,uart_task_cb);
}

五、下载链接

假期在家用不了git,直接上传到csdn了,正在审核。

下载链接:https://download.csdn.net/download/ziqi5543/12128753


本文链接: http://www.dtmao.cc/news_show_300115.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?