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

等待执行完毕即可

RT-Thread LoRa组件学习_第1张图片

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

RT-Thread LoRa组件学习_第2张图片

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

RT-Thread LoRa组件学习_第3张图片

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

RT-Thread LoRa组件学习_第4张图片 

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

RT-Thread LoRa组件学习_第5张图片

RT-Thread LoRa组件学习_第6张图片

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

RT-Thread LoRa组件学习_第7张图片

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

RT-Thread LoRa组件学习_第8张图片

使能测试DEMO

RT-Thread LoRa组件学习_第9张图片

设置工作模式为LoRa模式

RT-Thread LoRa组件学习_第10张图片

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

RT-Thread LoRa组件学习_第11张图片

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

RT-Thread LoRa组件学习_第12张图片

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

RT-Thread LoRa组件学习_第13张图片

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

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

RT-Thread LoRa组件学习_第14张图片

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

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

重新编译,截图如下:

RT-Thread LoRa组件学习_第15张图片在lora-spi-sx127x.c中增加以下代码

#include 
#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);//修改的代码
    }
   //....省略原有部分代码
    
}

重新编译,结果如下:

RT-Thread LoRa组件学习_第16张图片

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

3.烧录测试

检查LoRa硬件,lora probe

RT-Thread LoRa组件学习_第17张图片

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

你可能感兴趣的:(RT-Thread组件学习,rtt,lora,stm32,单片机)