调试正点原子Lora模块记录

调试正点原子Lora模块记录

买的是排针版ATK-LORA-V2.0

下载原子哥的官方资料,里面有上位机调试软件和使用文档。用usb-ttl连接Lora和电脑打开调试软件进行调试,

在“参数配置”下, 模块必须工作在“配置功能”(AUX=0 空闲状态,MD0=1 进入此功能)。

在“固件升级”,模 块必须工作在“固件升级功能”,

无线收发数据,模块必须工作在 “通信功能”(AUX=0 空闲状态,MD0=0 进入此功能)。

也就是说配置参数的时候MD0连接3.3V高电平置1,透传时置0,悬空即低电平0。

透传

点对点:

双方的参数必须一致,信道和地址完全一样,MD0置0.

1,地址相同、信道相同、无线速率(非串口波特率)相同的两个模块,一个模块发送,另 外一个模块接收(必须是:一个发,一个收)。 2,每个模块都可以做发送/接收。 3,数据完全透明,所发即所得。

点对多:

所有参与通信的对象参数必须一致,

任意一对象发送数据,信道和地址一致均可以收到消息。可以充当发射和接收端

广播监听:

选A设备作为广播设备,地址改为0xffff(广播地址),即可监听和发送数据给同信道和同速率的所有数据(地址可以不同),现B设备地址为110,C设备为111,A发送数据123,BC设备均可收到123,B设备发送321,只有A设备能收到321,C设备发送456,也只有A设备能收到456

定向

点对点:

发送方要勾选Hex选项,接收方勾选Hex,这样才能发送成功

广播监听:

 

 

代码测试

先用STM32F1RCT6来做测试,原子哥的lora代码过于丰富,我没用,就做简单的测试,拿原子哥的串口程序直接修改。

透明传输

lora.h

#ifndef __LORA_H
#define __LORA_H

#include "sys.h"


#endif

#define MD0_PORT GPIOA
#define MD0_PIN GPIO_Pin_1

#define MD0_SET()  GPIO_SetBits(MD0_PORT,MD0_PIN)
#define MD0_RES()  GPIO_ResetBits(MD0_PORT,MD0_PIN)


 


void lora_init(void);

lora.c

#include "lora.h"
#include "delay.h"
#include "uart2.h"

void lora_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    MD0_SET();
    delay_ms(100);
    u2_printf("AT+ADDR=ff,ff\r\n"); //AT地址,0xffff为广播地址,发送完指令后延时一会,具体能多小的延时没测试。
    delay_ms(100);
    u2_printf("AT+TMODE=0\r\n"); //选择发送状态,TMODE=0位透明传输。
    delay_ms(100);
    MD0_RES();
    delay_ms(80);
}

 

main.c

#include "stm32f10x.h"
#include "lora.h"
#include "uart2.h"

 
 


int main(void)
{    
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    uart2_Init(115200);
    lora_init();    
    while(1)
    {
        delay_ms(100);
        u2_printf("ffff113333\r\n");
//        USART_SendData(USART2,0x00);
//        delay_ms(1);
//        USART_SendData(USART2,0x00);
//        delay_ms(1);
//        USART_SendData(USART2,0x11);
//        delay_ms(1);
//        USART_SendData(USART2,0x33);
//        delay_ms(1);
        //USART_ReceiveData(USART2);
        
//        USART2->DR = (0x00 & (uint16_t)0x01FF);
//        delay_ms(1);
//        USART2->DR = (0x00 & (uint16_t)0x01FF);
//        delay_ms(1);
//        USART2->DR = (0x11 & (uint16_t)0x01FF);
//        delay_ms(1);
//        USART2->DR = (0xff & (uint16_t)0x01FF);
//        delay_ms(1);
        
    }
}
 

一旦主lora设备地址为广播地址,并且发送状态为透明传输,那么处于同一信道和同速率的其他lora设备,都能同时受到主lora设备发过来的广播信息,无论是处于定向还是透传的从设备都能收到数据。

定向传输

需要修改的地方不多。

在Lora.c文件修改u2_printf("AT+TMODE=1\r\n"); 即可

主函数里面:

        USART2->DR = (0x00 & (uint16_t)0x01FF);
        delay_ms(1);
        USART2->DR = (0x00 & (uint16_t)0x01FF);
        delay_ms(1);
        USART2->DR = (0x11 & (uint16_t)0x01FF);
        delay_ms(1);
        USART2->DR = (0xff & (uint16_t)0x01FF);
        delay_ms(1);

    

 

        USART_SendData(USART2,0x00);
        delay_ms(1);
        USART_SendData(USART2,0x00);
        delay_ms(1);
        USART_SendData(USART2,0x11);
        delay_ms(1);
        USART_SendData(USART2,0x33);
        delay_ms(1);

这两段代码等价的。定向传输数据FF到地址是0000,信道17的lora设备

可以看到收到主lora设备发来的ff数据。

要注意的是定向传输只能发送16进制数据,所以发送字符串是不行的。同时操作DR寄存器的时候,由于一次性只能8位数据,所以16位地址+4位信道+数据,需要每8位延时1ms的时间。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值