打印
[应用相关]

stm32 +lora 测试

[复制链接]
3069|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
硬件设备(两个正点原子lora模组)

使用特权

评论回复
沙发
hanzhen654|  楼主 | 2019-8-25 16:07 | 只看该作者
两块STM32F103开发板

使用特权

评论回复
板凳
hanzhen654|  楼主 | 2019-8-25 16:13 | 只看该作者
模块引脚分布,拿到一个模块先弄清如何连接线路十分重要。
引脚号        功能
1.MOD        1、 配置进入参数设置
2、 上电时与 AUX 引脚配合进入固件升级模式
2.AUX        1、 用于指示模块工作状态, 用户唤醒外部 MCU
2、 上电时与 MD0 引脚配合进入固件升级模式
3.RXD        TTL 串口输入, 连接到外部 TXD 输出引脚
4.TXD        TTL 串口输出, 连接到外部 RXD 输入引脚
5.GND        地线
6.VCC        3.3V~5V 电源输入

使用特权

评论回复
地板
hanzhen654|  楼主 | 2019-8-25 16:17 | 只看该作者
对于RXD、TXD、GND、VCC引脚不再赘述,重点关注一下MOD和AUX引脚,具体有什么用呢?
状态        模式
AUX = 0;  MOD = 1;        配置模式(AT指令配置)
AUX = 0;  MOD = 0;        无线通信模式
AUX = 1; MOD = 1;(一起持续1S时间)        固件升级模式

使用特权

评论回复
5
hanzhen654|  楼主 | 2019-8-25 16:26 | 只看该作者
对于固件升级模式我们暂且不与研究,毕竟还不会走,别想着跑了,那叫自不量力。先来研究一下无线通信模式具体包括哪些呢?有些同学想一个Lora节点接收好多点的数据,觉得这样很有成就感,哈哈哈。

使用特权

评论回复
6
hanzhen654|  楼主 | 2019-8-25 16:27 | 只看该作者
当然,我想着都感觉美滋滋,那么来仔细看一下:
01.透明传输:(针对设备相同地址,相同信道的之间通信)。

使用特权

评论回复
7
hanzhen654|  楼主 | 2019-8-25 16:30 | 只看该作者
定向传输: (针对地址不同,信道不同的设备之间通信),假如A设备地址为0x1400 信道为0x17 ,B设备地址为0x1234 信道为0x10,则通讯格式如下图,数据形式为:高地址+低地址+信道+用户数据       

使用特权

评论回复
8
hanzhen654|  楼主 | 2019-8-25 16:35 | 只看该作者
广播与数据监听:完全可以在此模式下实现一对多检测,满足您的好奇心。模块地址设置为0XFFFF,可以监听相同信道上所有的数据传输。

使用特权

评论回复
9
hanzhen654|  楼主 | 2019-8-25 16:39 | 只看该作者
那么问题来了?模块工作的地址是多少?所在的信道是多少啊?怎么获取,如何得到?这就是配置模式的作用,通过设置AUX = 0; MOD = 1; 进入配置模式,使用AT指令来查询和修改模块的地址和信道。说干就干,打开串口助手,将模块与STM32F103开发板连接,接线示意图如下,只使用开发板板载的CH340来配置模块。
MOD        AUX        RXD        TXD        GND        VCC
3.3V        悬空        CH340-TXD        CH340-RXD        0V        5V

使用特权

评论回复
10
hanzhen654|  楼主 | 2019-8-25 16:39 | 只看该作者
硬件连接示意图如下

使用特权

评论回复
11
hanzhen654|  楼主 | 2019-8-25 16:39 | 只看该作者
发送AT指令,模块回复OK ,可以继续对模块进行正常参数配置和查询。

使用特权

评论回复
12
hanzhen654|  楼主 | 2019-8-25 16:40 | 只看该作者
补充一下常用的AT命令:
AT命令        含义
AT+ADDR=?         查询设备配置地址范围
AT+ADDR?        查询设备地址
AT+ADDR=        配置设备地址
AT+TPOWER=?         查询发射功率配置范围
AT+TPOWER?        查询发射功率
AT+TPOWER=        配置发射功率
AT+WLRATE=?         查询无线速率和信道配置范围
AT+WLRATE?        查询无线速率和信道
AT+WLRATE=        配置无线速率和信道
AT+UART=?        查询串口配置范围
AT+UART?        查询串口配置
AT+UART=        配置串口
AT+CWMODE=?         查询配置工作模式范围
AT+CWMODE?         查询工作模式
AT+CWMODE=         配置工作模式
AT+TMODE=?         查询配置发送状态范围
AT+TMODE?         查询发送状态
AT+TMODE=         配置发送状态
AT+WLTIME=?         查询配置休眠时间范围
AT+WLTIME?         查询休眠时间
AT+WLTIME=         配置休眠时间

使用特权

评论回复
13
hanzhen654|  楼主 | 2019-8-25 16:43 | 只看该作者
Lora模组先按照配置模式来接线
MOD        AUX        RXD        TXD        GND        VCC
3.3V        悬空        CH340-TXD        CH340-RXD        0V        5V

使用特权

评论回复
14
hanzhen654|  楼主 | 2019-8-25 16:43 | 只看该作者
两个模块都按照一下方式进行配置。

使用特权

评论回复
15
hanzhen654|  楼主 | 2019-8-25 16:59 | 只看该作者
再将Lora模组按照通讯模式来接线。
MOD        AUX        RXD        TXD        GND        VCC
0V        悬空        CH340-TXD        CH340-RXD        0V        5V

使用特权

评论回复
16
hanzhen654|  楼主 | 2019-8-25 16:59 | 只看该作者
两个Lora模组测试过程截图如下

使用特权

评论回复
17
hanzhen654|  楼主 | 2019-8-25 17:31 | 只看该作者
完成以上步骤之后,基本上证明Lora模组没有问题,可以双向通讯。在此基础之上增加MCU来实现对环境温度的检测。

使用特权

评论回复
18
hanzhen654|  楼主 | 2019-8-25 17:31 | 只看该作者
焊接了一个终端电路,硬件部分设计: STM32F103RC +OLED + Lora模组,同时也焊接了一个接受指示灯,如下图:

使用特权

评论回复
19
hanzhen654|  楼主 | 2019-8-25 17:34 | 只看该作者
连接的导线,不忍直视………….

使用特权

评论回复
20
hanzhen654|  楼主 | 2019-8-25 17:35 | 只看该作者
经过一天代码编写,完成了终端的代码部分:
1.        OLED驱动部分:
I2C1初始化
void I2C_Configuration(void)
{
        I2C_InitTypeDef  I2C_InitStructure;
        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        /*STM32F103C8T6芯片的硬件I2C: PB6 -- SCL; PB7 -- SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        I2C_DeInit(I2C1);//使用I2C1
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
        I2C_InitStructure.I2C_OwnAddress1 = 0x30;//主机的I2C地址,随便写的
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
        I2C_InitStructure.I2C_ClockSpeed = 400000;//400K
        I2C_Cmd(I2C1, ENABLE);
        I2C_Init(I2C1, &I2C_InitStructure);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

1766

帖子

2

粉丝