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.pswp.cn/news/36005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【解析postman工具的使用---基礎篇】

postman前端請求詳解 主界面1.常見類型的接口請求1.1 查詢參數的接口請求1.1.1 什么是查詢參數?1.1.2 postman如何請求 1.2 ?表單類型的接口請求1.2.1 復習下http請求1.2.2? 什么是表單 1.3 上傳文件的表單請求1.4? json類型的接口請求 2. 響應接口數據分析2.1 postman的響…

紅帽RHCA考試內容解析

紅帽RHCA考試內容解析&#xff1a;最新的RHCA有3大方向體系&#xff0c;考試內容分別為&#xff1a; 一、Platform 平臺技術 RH442&#xff1a;性能調優 使用紅帽企業Linux和紅帽網絡提供的工具來學習Linux的性能調優和規劃的技巧及方法&#xff0c;學習系統架構&#xff0c;…

什么是DNS欺騙及如何進行DNS欺騙

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、什么是 DNS 欺騙&#xff1f;二、開始1.配置2.Ettercap啟動3.操作 總結 前言 我已經離開了一段時間&#xff0c;我現在回來了&#xff0c;我終于在做一個教…

【AI】p54-p58導航網絡、藍圖和AI樹實現AI隨機移動和跟隨移動、靠近玩家揮拳、AI跟隨樣條線移動思路

p54-p58導航網絡、藍圖和AI樹實現AI隨機移動和跟隨移動、靠近玩家揮拳、AI跟隨樣條線移動思路 p54導航網格p55藍圖實現AI隨機移動和跟隨移動AI Move To&#xff08;AI進行移動&#xff09;Get Random Pointln Navigable Radius&#xff08;獲取可導航半徑內的隨機點&#xff09…

Java基礎十 - 設計模式

一、單例 1. 創建 餓漢式 package basic;public class ESingleton {// 先私有化靜態實例private static ESingleton eSingleton new ESingleton();// 私有化構造方法&#xff0c;防止外部實例化private ESingleton(){};// 提供全局訪問方法public static ESingleton geteSi…

時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)

時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價) 目錄 時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)預測結果基本介紹程序設計參考資料 預測結果 基本介紹 Matlab實現LSTM長短期記憶神經…

識別和應對內存抖動

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、人工智能等&#xff0c;希望大家多多支持。 目錄 一、導讀二、概覽三、案例分析3.1 使用memory-profiler3.2 使用 cp…

磁粉制動器離合器收放卷應用介紹

張力控制系統的開環閉環應用介紹,請查看下面文章鏈接: PLC張力控制(開環閉環算法分析)_張力控制plc程序實例_RXXW_Dor的博客-CSDN博客里工業控制張力控制無處不在,也衍生出很多張力控制專用控制器,磁粉制動器等,本篇博客主要討論PLC的張力控制相關應用和算法,關于繞線…

什么是 fullgc

GC GC 全稱為garbage collection,中文含義為垃圾回收&#xff0c;在jvm中的含義為回收無用內存空間 Young space 中文名為年輕代或者新生代&#xff0c;為JVM 堆的一部分&#xff0c;由分代GC概念劃分而來&#xff0c;保存生命周期較短的對象 Tenured space 中文名為老年代…

APP外包開發的iOS開發語言

學習iOS開發需要掌握Swift編程語言和相關的開發工具、框架和技術。而學習iOS開發需要時間和耐心&#xff0c;尤其是對于初學者。通過堅持不懈的努力&#xff0c;您可以逐步掌握iOS開發技能&#xff0c;構建出功能豐富、優質的移動應用。今天和大家分享學習iOS開發的一些建議方法…

【數據結構系列】鏈表

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續學…

解決hbase節點已下線,但在status中顯示為dead問題

工作中需要下線4臺hbase小節點&#xff0c;下線完成后使用status 命令查看,有一臺為dead狀態: 使用status detailed 查看&#xff0c;發現“hd-03"這臺節點是dead。 檢查各節點配置文件無誤&#xff0c;并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重啟兩個…

less基本使用

1 less中的變量 //對值進行聲明 link-color: #ccc//定義變量名稱 .{sleName} {}bg: background-color; //定義屬性名稱 .container {{bg}: red; }2 繼承&#xff08;復用重復樣式&#xff09; //繼承必須位于選擇器最后 //繼承選擇器名不能為變量 .a:hover:extend(.b) {}.a {…

走出迷宮(多組輸入bfs)

鏈接&#xff1a;登錄—專業IT筆試面試備考平臺_牛客網 來源&#xff1a;牛客網 題目描述 小明現在在玩一個游戲&#xff0c;游戲來到了教學關卡&#xff0c;迷宮是一個N*M的矩陣。 小明的起點在地圖中用“S”來表示&#xff0c;終點用“E”來表示&#xff0c;障礙物用“#…

淺談人工智能技術與物聯網結合帶來的好處

物聯網是指通過互聯網和各種技術將設備進行連接&#xff0c;實時采集數據、交互信息的網絡&#xff0c;對設備實現智能化自動化感知、識別和控制&#xff0c;給人們帶來便利。 人工智能是計算機科學的一個分支&#xff0c;旨在研究和開發能夠模擬人類智能的技術和方法。人工智能…

Redis: 詳解、使用教程和示例

Redis: 詳解、使用教程和示例 什么是 Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、內存數據存儲系統&#xff0c;它可以用作數據庫、緩存和消息中間件。它支持多種數據結構&#xff0c;如字符串、哈希表、列表、集合、有序集合等…

Hadoop組件

前言 Hadoop 是一個能夠對大量數據進行分布式處理的軟件框架。具有可靠、高效、可伸縮的特點。 HDFS&#xff08;hadoop分布式文件系統&#xff09; 是hadoop體系中數據存儲管理的基礎。他是一個高度容錯的系統&#xff0c;能檢測和應對硬件故障。

后院失火、持續虧損!Mobileye半年報「不回避」競爭壓力

"客戶在2023年上半年非常謹慎&#xff0c;導致增長率低于正常水平&#xff0c;但我們已經看到下半年回暖趨勢&#xff0c;預計下半年交付將比去年同期增長16%&#xff0c;遠高于上半年。"這是Mobileye在近日公司半年報發布會上的預判。 公開數據顯示&#xff0c;今年…

Python 實現Selenium錄屏的一種方法(圖片整合成動態圖)

由于UI層自動化的不穩定性&#xff0c;經常會遇到執行中斷或用例失敗的問題&#xff0c;以下是一些常見的措施。 1.詳細的日志 2.定位出錯時截圖 3.Pytest的緩存機制(可以記錄成功了哪些失敗了哪些) 4.自動重試機制(如pytest-rerunfailures) 5.用例錄像 用例錄像是最直觀的一…

2023網絡安全常用工具匯總(附學習資料+工具安裝包)

幾十年來&#xff0c;攻擊方、白帽和安全從業者的工具不斷演進&#xff0c;成為網絡安全長河中最具技術特色的燈塔&#xff0c;并在一定程度上左右著網絡安全產業發展和演進的方向&#xff0c;成為不可或缺的關鍵要素之一。 話不多說&#xff0c;網絡安全10款常用工具如下 1、…