硬件:stm32f103 + LoRa sx1278
spi1
cs ---- PA4
clk---PA5
miso---PA6
mosi---PA7
复位引脚------PA1, DIO0----PA2
操作系统:rt-thread 3.1.2
软件:keil5,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.2\rt-thread\components\drivers\include\drivers头文件依赖即可。重新编译,截图如下:
都是一些没定义的问题,部分是因为没有把头文件包含进来导致的。解决办法如下
在sx1278-board.c中增加#include "pin.h"
重新编译,截图如下:
#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);//修改的代码
}
//....省略原有部分代码
}
重新编译,结果如下:
编译已经没有错误了,我们就烧录到单片机中进行测试看看。
检查LoRa硬件,lora probe
更多命令,请参考https://github.com/Forest-Rain/lora-radio-driver/blob/master/doc/README.md