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 网络 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:

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

发送数据测试:

能够成功接收到数据:

相关推荐
沐欣工作室_lvyiyi2 分钟前
基于单片机的智能家居窗帘控制系统设计(论文+源码)
单片机·嵌入式硬件·毕业设计·智能家居·智能窗帘
嵌入式分享19 分钟前
嵌入式分享#41:RK3576改UART波特率【精简版】
linux·嵌入式硬件·ubuntu·嵌入式
典则1 小时前
STM32FreeRtos入门(四)——任务状态和调度
stm32·单片机·嵌入式硬件
充哥单片机设计1 小时前
【STM32项目开源】基于STM32的智能天然气火灾监控
stm32·单片机·嵌入式硬件
充哥单片机设计1 小时前
【STM32项目开源】基于STM32的智能仓库火灾检测系统
stm32·单片机·嵌入式硬件
就叫飞六吧3 小时前
普中stm32大Dap烧录流程
stm32
A9better4 小时前
嵌入式开发学习日志38——stm32之看门狗
stm32·嵌入式硬件·学习
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机智能路灯控制系统
c语言·stm32·单片机·嵌入式硬件·51单片机
辰哥单片机设计14 小时前
TT直流减速电机(STM32)
stm32
A9better14 小时前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习