STM32 LoRa源码解读

目录结构:

SX1278

|-- include

| |-- fifo.h

| |-- lora.h

| |-- platform.h

| |-- radio.h

| |-- spi.h

| |-- sx1276.h

| |-- sx1276Fsk.h

| |-- sx1276FskMisc.h

| |-- sx1276Hal.h

| |-- sx1276LoRa.h

| -- sx1276LoRaMisc.h -- src

|-- fifo.c

|-- lora.c

|-- radio.c

|-- spi.c

|-- sx1276.c

|-- sx1276Fsk.c

|-- sx1276FskMisc.c

|-- sx1276Hal.c

|-- sx1276LoRa.c

`-- sx1276LoRaMisc.c

除了lora.h和lora.c,其它文件均为sx1276相关驱动文件(sx1278也适用)。

需要关注的文件:

platform.h设置芯片选型,当前项目设置为:#define USE_SX1276_RADIO。

radio.h中设置芯片工作模式为LORA

spi.h、spi.c中定义spi通信,需要将spi.c的SpiInOut()函数中的spi句柄设置为主板的spi句柄,芯片和主板所有数据通过SPI进行传输。

c 复制代码
#include <stdint.h>
#include "spi.h"
#include "main.h"

uint8_t SpiInOut(uint8_t uotData)
{
	uint8_t pData = 0;
	if(HAL_SPI_TransmitReceive(&hspi2, &outData, &pDtata, 1,0xffff) != HAL_OK){
		return ERROR;
	}else{
		return pData;
	}
}

sx1276LoRa.c中主要关注SX1276LoRaGetRxPacket()、SX1276LoRaSetTxPacket()、SX1276LoRaProcess()函数,分别用于LoRa模式下的数据包获取、数据包发送和接发调度。

c 复制代码
void SX1726LoRaGetRxPacket(void *buffer, uint16_t *size)
{
	*size = RxPacketSize;
	RxPacketSize = 0;
	memcpy((void *)buffer, (void *)RFBuffer, (size_t)*size);
}

void SX1276LoRaSetTxPacket(const void *buffer,uint16_t size)
{
	TxPacketSize = size;
	memcpy( ( void * )RFBuffer, buffer, ( size_t )TxPacketSize);
	RFLRState = RFLR_STATE_TX_INIT;
}

lora.h和lora.c为方便lora通信定义的文件。

LoRa通信使用流程

  1. 需要定义LoRa消息接收发送用户数据缓冲区(Buffer)、lora操作指针Radio。
c 复制代码
#include "lora.h"
tRadioDriver *Radio = NULL;
#define BUFFER_SIZE 30

uint16_t BufferSize = BUFFER_SIZE;
uint8_t Buffer[BUFFER_SIZE];
uint8_t EnbaleMaster = false;

uint8_t MY_TEST_Msg[] = "hello";

void lora_init()
{
	GPIO_initTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_9;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
	Radio = RadioDriverInit(); //Radio初始化,SX1276和SX1278使用相同驱动,在platform.h中进行选择设置。
	Radio->Init(); //SX1278真正初始化,根据radio.h中设置的LORA变量选择进行lora初始化还是fsk初始化
}
  1. 在sx1276LoRa.c中设置LoRaSettings变量,对LoRa通信进行参数配置。
  2. 调用RadioDriverInit()函数对Radio进行初始化,此函数定义于radio.c中。
  3. 调用Radio->Init(),进行lora通信相关初始化。
  4. 完成上述初始化后,定义自己的接发服务函数。
相关推荐
Jcenav1 小时前
OCXO外围电路设计指南
单片机·嵌入式硬件
Nautiluss2 小时前
一起玩XVF3800麦克风阵列(八)
大数据·人工智能·嵌入式硬件·github·音频·语音识别
神圣的大喵2 小时前
平台无关的嵌入式通用按键管理器
c语言·单片机·嵌入式硬件·嵌入式·按键库
三佛科技-134163842122 小时前
FT8353系列(FT8353A/B/C/CD/DD/K/KD/PD)隔离型LED恒流驱动IC芯片 典型应用电路
单片机·物联网·智能家居·pcb工艺
无人装备硬件开发爱好者3 小时前
深度解析:STM32 MDK 工程 HEX 文件转 BIN 文件 —— 原理、方法、优缺点与实战指南(中)
stm32·嵌入式软件·hex2bin
阿拉斯攀登3 小时前
嵌入式-硬件基础:了解三极管
单片机·嵌入式硬件·三极管
逐步前行3 小时前
C51_74HC165并口转串口
单片机·51单片机
HarrySunCn4 小时前
如何使用VSCode开发Arduino项目
ide·vscode·单片机·编辑器
嵌入式的飞鱼4 小时前
SD NAND 焊接避坑指南:LGA-8 封装手工焊接技巧与常见错误
人工智能·stm32·单片机·嵌入式硬件·tf卡
三佛科技-134163842124 小时前
LN8K05A/B/C_5V非隔离AC-DC电源芯片 典型应用场景、典型电路、与阻容降压的对比分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺