当前位置: 首页 > news >正文

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进行传输。

#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模式下的数据包获取、数据包发送和接发调度。

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。
#include "lora.h"
tRadioDriver *Radio = NULL;
#define BUFFER_SIZE 30uint16_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. 完成上述初始化后,定义自己的接发服务函数。
http://www.lryc.cn/news/115876.html

相关文章:

  • 【BASH】回顾与知识点梳理(十)
  • 【网络】应用层——HTTPS协议
  • Windows新版文件资源管理器经常在后台弹出的临时解决方案
  • 软考高项(八)项目整合管理 ★重点集萃★
  • 基于python+django开发的学生信息管理系统
  • mysql的高级查询语句
  • 04-8_Qt 5.9 C++开发指南_QTableWidget的使用
  • 《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)
  • 机器学习概述及其主要算法
  • 识jvm堆栈中一个数据类型是否为为引用类型,目前虚拟机实现中是如何做的?
  • Bug合集
  • linux下.run安装脚本制作
  • 面试热题(翻转k个链表)
  • 前端面试的性能优化部分(4)每天10个小知识点
  • el-checkbox修改选中和未选中的值
  • 完整版:TCP、UDP报文格式
  • 如何远程连接云服务器oracle数据库
  • “深入剖析JVM内部机制:探秘Java虚拟机的运行原理“
  • 尚品汇总结十:秒杀模块(面试专用)
  • 什么是设计模式?
  • Node.js |(三)Node.js API:path模块及Node.js 模块化 | 尚硅谷2023版Node.js零基础视频教程
  • Netty自定义编码解码器
  • HOperatorSet.OpenFramegrabber “GigEVision“
  • 图的遍历DFSBFS-有向图无向图
  • 【NLP】深入浅出全面回顾注意力机制
  • Linux应用编程的read函数和Linux驱动编程的read函数的区别
  • Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群
  • 使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选
  • 大规模向量检索库Faiss学习总结记录
  • SpringCloudAlibaba之Sentinel(一)流控篇