STM32应用-5-LORA模块测试

发布者:CreativeDreamer最新更新时间:2020-04-18 来源: eefocus关键字:STM32  LORA模块测试  定位功能 手机看文章 扫描二维码
随时随地手机看文章

在一个物品定位项目中,需要用Lora实现物品定位功能。此项目没有选择NBIOT因为客户对于NB需要SIM卡,以及NB的成本并不满意,因此选择更低成本,且无需SIM卡的LORA方式。


硬件连接

其中,Lora模块的管脚连接方式如下: 

序号 引脚 引脚方向 备注

1 M0 输入(不可悬空)    和M1配合,决定模块的工作模式(极弱上拉,如不使用可接地)

2 M1 输入(不可悬空)    和M0配合,决定模块的工作模式(极弱上拉,如不使用可接地)

3 RXD 输入    TTL串口输入,连接到外部TXD引脚(可配置为漏极开路或上拉输入,详见手册)

4 TXD 输出    TTL串口输出,连接到外部RXD引脚(可配置为漏极开路或推挽输出,详见手册)

5 AUX 输出(可悬空)    指示模块工作状态,用户外部唤醒MCU,上电自检初始化期间输出低电平

6 VCC    模块电源正参考

7 GND    模块地线

8 固定孔    固定孔

9 固定孔    固定孔

10 固定孔    固定孔

采用杜邦线和USB-TTL模块,给LORA供电。需要注意的是,USB-TTL中, VCC和3V3用跳线帽相连接,确保VCC输出为3V3.

测试时,先采用模式0,进行测试。 


重新采用带有电源的USB TTL,才能够正确使用。


定点模式验证

透传模式无需赘述,接下来重点测试和验证定点模式 。定点模式设置中,1,2 BYTE为模块地址,地址范围为0~65535,其中65535为广播地址。


第3个BYTE为信道


第5个参数为传输模式,其中C4对应的是定点模式。

定点模式时,两个信道最好选择不同,避免同时发射时,相互干扰。


设备1:自身地址0001,发射地址0002 , 发射信道02, 发射内容aabbcc

设备2:自身地址0002, 发射地址0001, 发射信道01, 发射内容aabb3f

可以看到,设备1和设备2发生了定点通信。注意:收发信道通常不同,以避免收发发生冲突


定点模式之广播地址发送普通地址接受

模块1配置为地址1,信道1,模块2配置为地址2,信道2


模块1发送FFFF02AABB3F,也就是向信道2广播,这时,模块2能够接收到广播消息

定点模式之普通发送广播接收


模块1的地址修改为FFFF,信道为01, 模块2地址为0002,信道为2,模块2发送普通消息001101aabbcc,这时模块1由于为广播地址,因此可以接受数据。

模块配置如上。


模块2往任意地址发送,模块1由于位于广播地址,可以成功接受。

待机功耗

模式0下,待机功耗为14.5mA,不算低。如果用5000mAH电池,预计待机仅仅为13天。因此,应该不会长期工作在模式0下。

Lora模块功能调试

通过串口调试透传功能

1. 模式:J6, J7跳线帽不接,设定M1和M0为1,工作在读取参数模式;


2. 供电: 用STLINK供电3.3V;


3. 串口: USB串口分别连接LORA_RXD和LORA_TXD;


4. 读取参数测试:通过读取参数,验证模块是否工作正常;


模块读取参数正常

读取的默认参数为0x00 0x00 0x1a 0x17 0x44,对应描述如下:


BYT1, BYTE2: 0x00 0x00  模块默认地址;


BYTE3: 0x1A:模块串口为8N1模式,波特率9600, 空中速率2.4K

BYTE4: 0X17:频率设置


例如410+0x17(23) = 433MHz,表示通信频率为433MHz

BYTE5:0X44:配置位,具体配置如下:

5. 模块2上电,采用同样配置,读取参数,以便验证模块是否正常上电工作;


6. 模块1,2插上跳线帽,进入透传模式(备注:模式切换无需重启),然后通过串口,相互发送数据,这时,可以发现能够正常互传数据。

7. 再次进入配置模式,测试串口命令读取参数,为后续MCU开发进行测试准备


7.1 发送C1C1C1,模块返回C0 00 00 1A 17 44


C1命令用来读取参数

注意:这里不能选择发送新行,收发采用16进制方式; 


7.2 发送C0+5BYTE工作参数,其参数为:00 00 1A 18 44,注意,这里修改了频率信息

再次用C1命令进行查询,发现频率参数已经发生了变化。

如果把C0 00 00 1A 18 44修改为C2 00 00 1A 18 44,也就是命令字从C0修改为C2,则参数掉电不会保存(实测有效)


7.3读取版本信息(C3C3C3),此功能也可用作设备上电测试。返回版本为C324414,其中C3为包头,324414为版本号

7.4模块复位(C4C4C4),此功能可用于模块复位。此命令下,模块并无返回值。 


定点模式

定点模式下,发送端可以指定接收端的地址,接收端接收到地址后,才会被唤醒。 在模式0或者模式1中,模块都可以工作在定点模式。下面首先测试模式0的定点模式,然后再测试模式1下的定点模式;


1. 通过串口,设置Lora模块2参数为C0 00 02 1A 02 C4,注意:C0表示参数设置掉电保存,0002表示模块地址,1A为默认参数,通常无需修改,02为信道,C4表示定点模式。对应参数含义如下:

2. 设置Lora模块1参数为地址 0001, 信道1,传输方式定点,其他不变;

3.  Lora模块1向Lora模块2发送数据,Lora模块2能够接收到数据,同样,Lora模块2向Lora模块1发送数据,Lora模块1能够接收到数据。

4.Lora模块1工作在唤醒模式,Lora模块2工作在省电模式,进一步测试,模块2能够接收到模块1发送的数据。(注意:在模式切换时,有时候会发生模式无法切换的情况,比如:模块2可能会接收不到数据,这时候,只需要将模块2重启,即可顺利接受。)

物品管理系统设计思路

1. Lora设备端,上电时,读取跳线帽的地址,并配置到Lora模块中;


2. Lora设备端MCU进入休眠状态(standby),Lora进入模式2(省电模式)


3. Lora模块接收到信号后,通过AUX管脚,唤醒MCU 


4. MCU唤醒后,回传信号回到网关(模式0),网关再次确认发送;


5. MCU启动报警,并保持在工作状态;


6. 网关发送停止报警信号,MCU停止报警,并再次进入休眠状态;


由于Lora需要进行双向发送,因此Lora始终工作在模式0中;


网关的基本逻辑如下:


1. Lora网关接收到寻找命令后,发送Lora信号,唤醒对应设备(地址+信道);


2. Lora网关接收到对应设备的信号后,确保对应设备在线;


3. Lora网关再次发送信号,激发设备报警;


4. 设备报警后,发送确认信号;


5. Lora网关接收到停止报警命令,则发送停止报警信号,并等待确认。


以上的设计逻辑中,全部信号采用确认方式,以增强系统的稳定性。


实际设计过程中,当然还需要做诸多修改。例如:如何改善发送,接受的逻辑,增强系统效率?如何定期发送唤醒信号,确保设备和网关之间的连接?如何合理切换不同的模式,以便降低功耗?这些设计细节,都需要在实际设计中,一一完成。

关键字:STM32  LORA模块测试  定位功能 引用地址:STM32应用-5-LORA模块测试

上一篇:STM32 CUBEMX UART+DMA
下一篇:关于单片机时钟

推荐阅读最新更新时间:2024-11-10 16:48

keil环境下stm32 对printf映射
printf虽然是C语言的标准函数,但是是针对有stdin, stdout设备的系统的,在嵌入式平台上是没有标准的stdin, stdout的,需要映射到串口后某个输出对象的,而嵌入式平台各不相同,如果又没有操作系统的支持,就只能靠自己实现了,因此STM32下的printf不在标准库里,而在定制的库里。而且一般在嵌入式平台一般也不用printf,可以自己使用sprintf()函数先将数据格式化到缓冲里,然后数据想输出到哪里就输出到哪里。 如果使用的是MDK,请在工程属性的“Target“-》”Code Generation“中勾选”Use MicroLIB“ #ifndef __UART_INTERFACE_H #defin
[单片机]
详解STM32堆栈
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区: 栈区(stack) 堆区(Heap) 全局区(static) 文字常亮区程序代码区 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 普通单片机与STM32单片机中堆栈的区别 普通单片机启动时,不需要用b
[单片机]
详解<font color='red'>STM32</font>堆栈
STM32-(04):STM32F103VCT6芯片内部资源分析
外形图 STM32系列 如图所示:(种类是满足用户不同的需求:内存/尺寸/引脚数) 纵坐标是flash内存大小,横坐标是引脚数 QFN(方形扁平无引脚封装) LQFP(薄型四方扁平式封装):引脚在四周 BGA(焊球阵列封装):引脚在芯片下面 内部资源 内核 -ARM 32位 Cortex - M 3处理器 -高达72 MHz -单周期乘法和硬件除法 内存 -256 KB 的 Flash -48 KB 的 SRAM 时钟,复位和电源管理 -2.0 V ~3.6 V 电源电压( I / O 等于电源电压) -上电复位( POR ),掉电复位( PDR ),可编程的电压监控(比如当用电池供电,软件可监控电压,低电压预警) -4~1
[单片机]
STM32-(04):STM32F103VCT6芯片内部资源分析
STM32进阶-红外遥控器的应用详细步骤
红外遥控器概述 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。 同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。 红外遥控的编码目前广泛使用的是:NEC Protocol 的PWM(脉冲宽度调制)和Philips RC-5 Protocol 的PPM(脉冲位置调制)。 NEC协议的特征: 1、8位地址和8位指令长度; 2、地址和命令两次传输;(确保可靠性) 3、PWM脉冲宽度调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为38KHz 5、位时
[单片机]
<font color='red'>STM32</font>进阶-红外遥控器的应用详细步骤
使用proteus仿真STM32单片机的注意事项
第1点: 我们用户编写的代码,必须放在 user code begin 和 end 之间;否则,当我们修改stm32cubemx 项目的 配置时,再次生成代码,就会删除之前的代码;正确做法如下图所示: 我们用户编写的代码,必须放在 user code begin 和 end 之间 第2点: 在proteus中,电源需要更改成3.3V,VDDA添加到电源VCC/GND中去;VSSA添加到GND中去;如下图所示: 电源需要改成3.3V 第3点: HAL_Delay(__IO uint32_t Delay)延时函数在stm32f1xx_hal.c里面,该函数能实现ms级别的延时;该函数体前面有一个关键字__weak,该关键字简
[单片机]
使用proteus仿真<font color='red'>STM32</font>单片机的注意事项
stm32 IIC ACK与NACK的理解
关于IIC的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。 在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。这表示该设备给出了一个ACK。如果它不拉低SDA线,就表示不响应(NACK)。 另外,在从机(发送方)发送完最后一个字节后主设备(接收方)必须产生一个不响应位,用以通知从机(发送方)不要再发送信息了,这样从机就知道该将SDA释放了,而后,主机发出一个停止位给slaver。 总结下,IIC通讯中,SDA 和 SCL 都
[单片机]
关于STM32浮点运算单元FPU的应用示例
有人利用STM32芯片做些DSP处理,在启用FPU单元进行调试、验证过程中可能会遇到些小问题、小困惑,这里通过STM32F4芯片一个具体的应用示例简单分享下,希望顺便能给同仁提供些帮助或提醒。 我这里通过调用DSP库里的FFT相关函数实现1024点的FFT运算,样点数据及运算结果均为浮点数。 上图中A区代码是做样点数据准备,B区代码完成FFT运算。我们来一起看看基本的配置以及不启用硬件浮点单元和启用硬件浮点单元执行B区代码的时间上的差别。 程序里要调用一些数学函数,而这些数学函数往往集成在相应的数学函数库里。我们选用ARM公司的DSP数学库,该库系专门针对AMR核芯片及指令系统而组织的代码,相比IDE自带的通用数学函数库会
[单片机]
关于<font color='red'>STM32</font>浮点运算单元FPU的应用示例
STM32 Systick定时器
Q:什么是SYSTick定时器? SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。 Q:为什么要设置SysTick定时器? (1)产生操作系统的时钟节拍 SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 (2)便于不同处理器之间程序移植。 Cortex‐M3处理器内部包
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved