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 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. 完成上述初始化后,定义自己的接发服务函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64179.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0140 数据链路层2

目录 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 3.数据链路层 3.6局域网 3.7广域网 3.8数据链路层设备 部分习题 1.如果使用5类UTP来设计一个覆盖范围为200m的10BASE-T以太网&#xff0c;需要采用的设备是&#xff08;&#xff09; A.放大器 …

idea导入新项目报异常:Error:java: Compilation failed: internal java compiler error

修改settings中项目对象Java编译配置恢复正常。 标记的两个地方配置修改和项目一样后&#xff0c;正常。

OpenSource - 分布式重试平台

文章目录 概述重试方案对比设计思想流量管理平台预览场景应用强通知场景发送MQ场景回调场景异步场景 概述 在当前广泛流行的分布式系统中&#xff0c;确保系统数据的一致性和正确性是一项重大挑战。为了解决分布式事务问题&#xff0c;涌现了许多理论和业务实践&#xff0c;其…

AJAX-笔记(持续更新中)

文章目录 Day1 Ajax入门1.AJAX概念和axios的使用2. 认识URL3.URL的查询参数4.常用的请求方法和数据提交5.HTTP协议-报文6.接口文档7.form-serialize插件8.案例用户登录 Day2 Ajax综合案bootstrap弹框图书管理图片上传更换背景个人信息设置 Day3 AJAX原理XMLHttpRequestPromise封…

Idea全局搜索(ctrl+shift+F),搜索不全问题

今天idea突然出现&#xff0c;全局搜索&#xff0c;命名html文件中有这个字符&#xff0c;但是全局搜索居然匹配内容是空。。。。而且全局搜索界面也设置好了 经查发现是缓存问题&#xff0c;于是&#xff1a; 清空缓存后发现全局搜索功能可正常使用...

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

1.今天开发了一套服务程序&#xff0c;使用的是Odbc连接MySql数据库&#xff0c; 在我本机用VS打开程序时&#xff0c;访问一切正常&#xff0c;当发布出来装在电脑上&#xff0c;连接数据库时提示&#xff1a; [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定…

uniapp 微信小程序 上下滚动的公告通知(只取前3条)

效果图&#xff1a; <template><view class"notice" click"policyInformation"><view class"notice-icon"><image mode"aspectFit" class"img" src"/static/img/megaphone.png"></i…

计算机网络的定义和分类

计算机网络的定义和分类 计算机网络的定义 计算机网络的精确定义并未统一计算机网络最简单的定义是&#xff1a;一些互相连接的、自治的计算机的集合 互连:指计算机之间可以通过有线或无线的方式进行数据通信自治:是指独立的计算机&#xff0c;它有自己的硬件和软件&#xff…

【深度学习_TensorFlow】手写数字识别

写在前面 到这里为止&#xff0c;我们已经学习完张量的常用操作方法&#xff0c;已具备实现大部分神经网络技术的基础储备了。这一章节我们将开启神经网络的学习&#xff0c;然而并不需要像学习前面那样了解大量的张量操作&#xff0c;而是将重点转向理解概念知识&#xff0c;…

Mysql进阶(中) -- 索引

索引上部分 -> Mysql进阶(上) -- 存储引擎&#xff0c;索引_千帐灯无此声的博客-CSDN博客 &#x1f442; 爸爸妈妈 - 王蓉 - 单曲 - 网易云音乐 &#x1f448;目录看左栏 目录 &#x1f33c;索引 &#x1f43b;性能分析 - show profiles &#x1f43b;性能分析 - exp…

关于自动化测试用例失败重试的一些思考

自动化测试用例失败重跑有助于提高自动化用例的稳定性&#xff0c;那我们来看一下&#xff0c;python和java生态里都有哪些具体做法&#xff1f; 怎么做 如果是在python生态里&#xff0c;用pytest做测试驱动&#xff0c;那么可以通过pytest的插件pytest-rerunfailures来实现…

实时时钟DS1302原理详解和单片机编程

一、DS1302的功能 DS1302是美国DALLAS推出的一款高性能、低功耗的日历时钟芯片。 DS1302是一种串行接口的实时时钟&#xff0c;芯片内部具有可编程的日历时钟和31个字节的静态RAM&#xff0c;日历时钟可以自动进行闰年补偿&#xff0c;计时准确&#xff0c;接口简单&#xff…

React Dva项目 简单引入models中的所有JS文件

我们前面接触的 Dva项目 models目录下的文件还要一个一个引入 其实体验并不是很好 而且如果项目很大那就比较麻烦了 我们可以在 models 下创建一个 index.js 文件 编写代码如下 const context require.context("./", false, /\.js$/); export default context.key…

SNAP插件sen2Three去云操作

1.先把这篇文章看了 2.去官网下载Sen2Three 3.这时候可以大概看看Sen2Three的官方文档&#xff0c;我们知道了需要用anaconda2环境 4.我是已经安装有anaconda3,所以需要两个并存&#xff0c;此时可以参考这篇文章 5.这是ananconda2的链接&#xff0c;直接下载安装即可&#xff…

Delphi Professional Crack,IDE插件开发和扩展IDE

Delphi Professional Crack,IDE插件开发和扩展IDE 构建具有强大视觉设计功能的单源多平台本机应用程序。 Delphi帮助您使用Object Pascal为Windows、Mac、Mobile、IoT和Linux构建和更新数据丰富、超连接、可视化的应用程序。Delphi Professional适合个人开发人员和小型团队构建…

20230807在WIN10下使用python3将TXT文件转换为DOCX(在UTF8编码下转换为DOCX有多一行的瑕疵)

20230807在WIN10下使用python3将TXT文件转换为DOCX&#xff08;在UTF8编码下转换为DOCX有多一行的瑕疵&#xff09; 2023/8/7 12:58 https://translate.google.com/?slen&tlzh-CN&opdocs 缘起&#xff0c;由于google的文档翻译不支持SRT/TXT格式的字幕&#xff0c;因此…

Transformer学习笔记

Transformer学习笔记 前言前提条件相关介绍Transformer总体架构编码器&#xff08;Encoder&#xff09;位置编码&#xff08;Positional Encoding&#xff09;get_attn_pad_mask函数&#xff08;Padding Mask&#xff09;EncoderLayerMultiHeadAttentionScaledDotProductAttent…

webpack基础知识七:说说webpack proxy工作原理?为什么能解决跨域?

一、是什么 webpack proxy&#xff0c;即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题&#xff08;浏览器安全策略限制&#xff09; 想要实现代理首先需要一个中间服务器&#xff0c;webpac…

Llama 2 云端部署与API调用【AWS SageMaker】

Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样&#xff0c;你一定会迫不及待地想要亲自动手并用它来构建。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将…

HTML5注册页面

分析 注册界面实际上是一个表格&#xff08;对齐&#xff09;&#xff0c;一行有两个单元格。 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevic…