我是靠谱客的博主 娇气篮球,最近开发中收集的这篇文章主要介绍RT-Thread LoRa组件学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文主要讲解如何在rt-thread使用LoRa组件相关内容

1.硬件以及软件相关描述


硬件:stm32f103 + LoRa sx1278

spi1 

cs ---- PA4

clk---PA5

miso---PA6

mosi---PA7

复位引脚------PA1,   DIO0----PA2

操作系统:rt-thread 3.1.2

软件:keil5,env


2.使用env工具进行配置

2.1:进到工程的根目录,打开env窗口,确保软件的源是最新的,输入pkgs --upgrade命令,进行检查软件源的版本

pkgs --upgrade

等待执行完毕即可

2.2 输入menuconfig命令,进入配置窗口,使能SPI驱动

在外设驱动库中,选择启动LoRa软件驱动包,然后进入配置

LoRa芯片选择sx127x,然后点击Support LoRa Module,选择具体的芯片

 

设置LoRa芯片与单片机的通信接口,这里为SPI1

选择好通信接口为SPI1后,选择具体的引脚

根据具体的硬件引脚,来设置这三个参数

使能测试DEMO

设置工作模式为LoRa模式

然后保存,退出即可。然后输入更新包命令,pkgs --update

输入scons --target=mdk5 重新生成工程,看到下面这张图就说明已经生成好了

打开工程,不管三七二十一,先直接编译了再说,编译结果如下所示:

找不到drv_spi.h和drv_gpio.h,我们将其改为spi.h和gpio.h;原因:笔者这个工程使用的标准库,这个LoRa的包使用的HAL库。

如果显示找不到spi.h和gpio.h文件,只需要在工程中的C/C++目录下增加rt-thread-v3.1.2rt-threadcomponentsdriversincludedrivers头文件依赖即可。重新编译,截图如下:

都是一些没定义的问题,部分是因为没有把头文件包含进来导致的。解决办法如下

在sx1278-board.c中增加#include "pin.h"

重新编译,截图如下:

在lora-spi-sx127x.c中增加以下代码

#include <stm32f10x.h>
#include "rt_stm32f10x_spi.h"
#include "spi.h"
int sx12xx_spi_device_init(const char *bus_name, const char *lora_device_name)
{
    {
        static struct stm32_spi_bus stm32_spi;
        GPIO_InitTypeDef GPIO_InitStructure;

        /* Enable GPIO clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,
        ENABLE);

        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        stm32_spi_register(SPI1, &stm32_spi, bus_name);
    }

    /* attach cs */
    {
        static struct rt_spi_device spi_device;
        static struct stm32_spi_cs  spi_cs;

        GPIO_InitTypeDef GPIO_InitStructure;

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

        /* CS: PA4 */
        spi_cs.GPIOx = GPIOA;
        spi_cs.GPIO_Pin = GPIO_Pin_4;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin;
        GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin);
        GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure);

        return rt_spi_bus_attach_device(&spi_device, lora_device_name,bus_name,(void*)&spi_cs);
    }
}

把修改该文件原有的函数

struct rt_spi_device *lora_radio_spi_init(const char *bus_name, const char *lora_device_name, rt_uint8_t param)
{
    //....省略原有部分代码
    
    {
        //res = rt_hw_spi_device_attach( bus_name, lora_device_name, GPIOA, GPIO_PIN_15);
        //res = rt_hw_spi_device_attach( bus_name, lora_device_name, GET_GPIO_PORT(LORA_RADIO_NSS_PIN), GET_GPIO_PIN(LORA_RADIO_NSS_PIN));
        res = sx12xx_spi_device_init(bus_name,lora_device_name);//修改的代码
    }
   //....省略原有部分代码
    
}

重新编译,结果如下:

编译已经没有错误了,我们就烧录到单片机中进行测试看看。

3.烧录测试

检查LoRa硬件,lora probe

更多命令,请参考https://github.com/Forest-Rain/lora-radio-driver/blob/master/doc/README.md

最后

以上就是娇气篮球为你收集整理的RT-Thread LoRa组件学习的全部内容,希望文章能够帮你解决RT-Thread LoRa组件学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部