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

STM32Cubemx配置E22-xxxT22D lora模块实现定点传输

文章目录

  • 一、STM32Cubemx配置
  • 二、定点传输
      • **什么是定点传输?**
      • **定点传输的特点**
      • **定点传输的工作方式**
      • **E22 模块定点传输配置**
        • **如何启用定点传输?**
        • **示例**
      • **应用场景**
      • **总结**
    • **配置 1:`C0 00 07 00 02 04 62 00 17 40`**
      • **解析**
    • **配置 2:`C0 00 07 00 01 04 62 00 17 40`**
      • **解析**
    • **两者关系**
      • **这两个模块的通信规则**
      • **总结**
  • 三、代码编写测试


一、STM32Cubemx配置

配置串口1为调试串口:

在这里插入图片描述
配置串口3为和lora模块的通信串口:

在这里插入图片描述
打开串口3的DMA和接收中断:

在这里插入图片描述
在这里插入图片描述

二、定点传输

在这里插入图片描述

什么是定点传输?

定点传输(Fixed Transmission,也称为 目标地址传输)是一种 点对点 的数据通信方式,发送端在数据包中明确指定接收端的地址,只有匹配地址的接收端才能接收数据。

相比于透明传输(Transparent Transmission,即广播式通信),定点传输能确保数据只被特定设备接收,提高了通信的安全性和可靠性


定点传输的特点

  1. 发送数据时需指定目标地址

    • 发送端的串口数据包中,前 3 个字节用于目标地址:
      [ 目标地址高(1B) | 目标地址低(1B) | 目标信道(1B) | 真实数据…… ]
      
    • 这样,只有目标地址匹配的模块才会接收该数据,其他设备不会收到。
  2. 接收端地址必须匹配发送端指定的目标地址

    • 例如:
      • 发送端地址0x0001
      • 接收端地址0x0002
      • 发送端发送数据时,数据包需要以 0x0002 作为目标地址,只有地址 0x0002 的设备才能接收
  3. 定点传输与透明传输的区别

    • 透明传输(默认模式)
      • 发送端 不会指定目标地址,所有在相同信道上的设备都能接收数据(广播通信)。
    • 定点传输
      • 发送端 必须在数据包中指定目标地址,只有目标匹配的设备才能接收数据。

定点传输的工作方式

(1)发送端

  • 需要启用定点传输模式,并且发送的数据包必须包含目标地址:
    目标地址高(1B) | 目标地址低(1B) | 目标信道(1B) | 真实数据…… 
    
  • 例如,如果发送端要给地址 0x0002 的设备发送数据
    00 02 17 48 65 6C 6C 6F
    
    • 00 02 → 目标地址 0x0002
    • 17 → 信道 0x17
    • 48 65 6C 6C 6F → 实际发送的数据(“Hello”)

(2)接收端

  • 只会接收 目标地址与自身匹配的数据,不会接收其他地址的数据。

E22 模块定点传输配置

如何启用定点传输?

定点传输模式的开关由 REG3(0x06) 寄存器的 第 6 位 决定:

  • 0 = 透明传输(默认模式)
  • 1 = 定点传输
示例
  • 发送端(定点模式)

    C0 00 07 00 01 04 62 00 17 40
    
    • 定点传输模式启用
    • 目标地址0x0001
    • 信道0x17
  • 接收端(透明模式)

    C0 00 07 00 01 04 62 00 17 00
    
    • 目标地址0x0001
    • 信道0x17
    • 透明模式(自动接收匹配数据)

应用场景

  1. 单点对单点通信(如无线传感器与网关)
  2. 避免数据冲突(防止多个设备收到相同数据)
  3. 提高安全性(只让特定设备接收数据)

总结

  • 定点传输 = 发送端指定目标地址,只有目标匹配的接收端能接收数据
  • 区别透明传输(广播所有设备)。
  • 需要配置 REG3 使能定点传输模式
  • 发送数据时需额外加上目标地址和信道

这样可以 避免无关设备接收数据,提高通信稳定性!🚀

lora模块配置:

第一个模块:
在这里插入图片描述
第二个模块:

在这里插入图片描述
这两条配置命令用于设置 两个 E22-xxxT22D LoRa 模块,它们都启用了 定点传输模式。我们逐个分析它们的参数。


配置 1:C0 00 07 00 02 04 62 00 17 40

解析

偏移数据含义
C0配置写入命令
00配置起始地址
07配置数据长度(7 字节)
00 02模块地址0x0002
04网络 ID0x04
62串口波特率 & 校验 & 空中速率9600 8N12.4Kbps
00保留(通常无特殊用途)
17信道0x17456.125MHz,适用于 E22-400T22D)
40定点传输已启用

结论

  • 该模块的 地址0x0002
  • 网络 ID0x04
  • 工作信道0x17(456.125MHz)
  • 串口参数9600 8N1
  • 定点传输模式已启用

配置 2:C0 00 07 00 01 04 62 00 17 40

解析

偏移数据含义
C0配置写入命令
00配置起始地址
07配置数据长度(7 字节)
00 01模块地址0x0001
04网络 ID0x04
62串口波特率 & 校验 & 空中速率9600 8N12.4Kbps
00保留(通常无特殊用途)
17信道0x17456.125MHz
40定点传输已启用

结论

  • 该模块的 地址0x0001
  • 网络 ID0x04
  • 工作信道0x17(456.125MHz)
  • 串口参数9600 8N1
  • 定点传输模式已启用

两者关系

这两个模块的通信规则

  1. 模块 1(地址 0x0001)发送数据时,数据包必须包含目标地址,例如:

    00 02 17 48 65 6C 6C 6F
    
    • 00 02 → 目标地址 0x0002
    • 17 → 信道 0x17
    • 48 65 6C 6C 6F → 真实数据(“Hello”)
  2. 模块 2(地址 0x0002)发送数据时,目标地址必须是 0x0001

    00 01 17 57 6F 72 6C 64
    
    • 00 01 → 目标地址 0x0001
    • 17 → 信道 0x17
    • 57 6F 72 6C 64 → 真实数据(“World”)

总结

这两个模块已经正确配置为定点传输,且能进行双向通信:

  • 模块 1(0x0001)只能给模块 2(0x0002)发送数据
  • 模块 2(0x0002)只能给模块 1(0x0001)发送数据
  • 它们都使用 信道 0x17(456.125MHz)
  • 它们都必须在数据包中加上目标地址,否则对方无法接收

🚀 这种配置适用于点对点通信,避免广播式干扰,提高通信稳定性和安全性!

三、代码编写测试

lora.c:

#include "lora.h"

extern UART_HandleTypeDef huart3;

uint8_t Lora_rxbuff[1024] = {0};

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart->Instance == USART3)
	{
		HAL_UARTEx_ReceiveToIdle_DMA(&huart3, Lora_rxbuff, sizeof(Lora_rxbuff));
	}
}

void Lora_Init(void)
{
	HAL_UARTEx_ReceiveToIdle_DMA(&huart3, Lora_rxbuff, sizeof(Lora_rxbuff));
	
	
	
}

lora.h:

#ifndef __LORA_H__
#define __LORA_H__

#include "main.h"
#include <stdio.h>

void Lora_Init(void);



#endif

发送数据测试:

能够成功接收到数据:
在这里插入图片描述

相关文章:

  • 数据库事务的 ACID,通过MVCC能做什么
  • qt将文件压缩成zip包
  • 【软件系统架构】系列三:数据库系统之三
  • Qt:day4
  • DeepSeek本机部署(基于Ollama和Docker管理)
  • 第六十:跨组件通信-依赖注入(父传递给其他组件)
  • C# | 委托 | 事件 | 异步
  • Varjo XR-4 混合现实驾驶仿真解决方案
  • 迷你世界脚本UI五子棋小游戏
  • JDBC 完全指南:掌握 Java 数据库交互的核心技术
  • SpringBoot为什么要禁止循环依赖?
  • 从零开始的 Kafka 学习(一)| 概念,Java API
  • ⭐算法OJ⭐跳跃游戏【动态规划 + 单调队列】(C++实现)Jump Game 系列 VI
  • 场景题:10亿QQ用户,如何统计在线人数?
  • 2025最新在GitHub上搭建个人图床,保姆级图文教程,实现图片高效管理
  • 通过RK3588的cc-linaro-7.5.0交叉编译器搭建QT交叉编译环境QtCreator(无需编译QT源码)
  • 将数据库结构化数据整合到RAG问答中的方式
  • android .rc文件
  • 【图像识别UI自动测试技术第二章】模版匹配算法学习分享
  • office或者word排版中,复制/黏贴进来文字不会自动换行,如何处理?
  • cms系统网站/站长推广网
  • 长沙市做网站的/哈尔滨seo服务
  • 男女做那个那个的视频网站/今天nba新闻最新消息
  • 手机上的软件网站建设/亚马逊跨境电商开店流程及费用
  • 礼泉做网站/百度升级最新版本下载安装
  • 网站技术可行性/邯郸百度推广公司