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

发送数据测试:

能够成功接收到数据:

相关推荐
智商偏低3 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen5 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森7 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白7 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D7 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术10 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt11 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘11 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang11 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n13 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件