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

文章目录


一、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 网络 ID :0x04
62 串口波特率 & 校验 & 空中速率 :9600 8N1,2.4Kbps
00 保留(通常无特殊用途)
17 信道 :0x17(456.125MHz,适用于 E22-400T22D)
40 定点传输已启用

结论

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

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

解析

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

结论

  • 该模块的 地址 是 0x0001
  • 网络 ID 是 0x04
  • 工作信道 是 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:

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:

c 复制代码
#ifndef __LORA_H__
#define __LORA_H__

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

void Lora_Init(void);



#endif

发送数据测试:

能够成功接收到数据:

相关推荐
HQB202610 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science12 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn12 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天13 小时前
can总线
stm32
桀人13 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯14 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C14 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路15 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc15 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院16 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法