我是靠谱客的博主 负责枫叶,这篇文章主要介绍STM32学习笔记Lora(一)目录正文,现在分享给大家,希望可以做个参考。

目录

本文将分为以下几个部分,分别是

  • Lora的介绍
  • 相关AT指令
  • 部分源码理解



正文

Lora介绍

物联网应用中的无线技术有多种,可组成局域网或广域网。组成局域网的无线技术主要有2.4GHz的WiFi,蓝牙、Zigbee等,组成广域网的无线技术主要有2G/3G/4G等。

LoRa 是LPWAN通信技术中的一种,是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案。这一方案改变了以往关于传输距离与功耗的折衷考虑方式,为用户提供一种简单的能实现远距离、长电池寿命、大容量的系统,进而扩展传感网络。目前,LoRa 主要在全球免费频段运行,包括433、868、915MHz等。

本文是使用ATK-LORA-01作为开发模块,是一款体积小,微功率,低功耗,高性能远距离LORA无线串口模块。模块采用高效的ISM频段射频SX1278扩频芯片。
在这里插入图片描述
ATK-LORA-01 模块具有:体积小、灵敏度高、支持低功耗省电,特点包括:
1、工业频段:433Mhz 免申请频段
2、多种功率等级(最大 20dBm,最大 100mW)
3、多种串口波特率、空中速率、工作模式
4、支持空中唤醒功能,低接收功耗
5、双 512 环形 FIFO
6、频率 410-441Mhz,提供 32 个信道
7、接收灵敏度达-136dBm,传输距离 3000 米
8、自动分包传输,保证数据包的完整性




在这里插入图片描述
模块根据MD0的配置与AUX引脚的状态会进入不同的功能,如下所示
在这里插入图片描述
其中通信功能如下,包含4中工作模式:
在这里插入图片描述




相关AT指令

设备地址配置

查询设备配置地址范围
在这里插入图片描述



无线速率和信道配置

配置设备信道和无线速率
在这里插入图片描述
查询设备信道和无线速率设置范围
在这里插入图片描述


发射功率设置

配置设备发射功率
在这里插入图片描述
查询设备配置的发射功率范围
在这里插入图片描述
0:11dbm
1:14dbm
2:17dbm
3:20dbm(默认)



工作模式配置

查询工作模式配置范围
在这里插入图片描述
在这里插入图片描述



发送状态配置

查询设备发送状态配置范围
在这里插入图片描述
在这里插入图片描述



串口配置

在这里插入图片描述
在这里插入图片描述



相关代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//lora发送命令 //cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串. //ack:期待的应答结果,如果为空,则表示不需要等待应答 //waittime:等待时间(单位:10ms) //返回值:0,发送成功(得到了期待的应答结果) // 1,发送失败 sprintf((char*)sendbuf,"AT+TPOWER=%d",LoRa_CFG.power);//设置发射功率 lora_send_cmd(sendbuf,"OK",50); u8 lora_send_cmd(u8 *cmd,u8 *ack,u16 waittime) { u8 res=0; USART3_RX_STA=0; if((u32)cmd<=0XFF) { while((USART3->SR&0X40)==0);//等待上一次数据发送完成 USART3->DR=(u32)cmd; }else u3_printf("%srn",cmd);//发送命令 if(ack&&waittime) //需要等待应答 { while(--waittime) //等待倒计时 { delay_ms(10); if(USART3_RX_STA&0X8000)//接收到期待的应答结果 { if(lora_check_cmd(ack))break;//得到有效数据 USART3_RX_STA=0; } } if(waittime==0)res=1; } return res; } //lora发送命令后,检测接收到的应答 //str:期待的应答结果 //返回值:0,没有得到期待的应答结果 //其他,期待应答结果的位置(str的位置) u8* lora_check_cmd(u8 *str) { char *strx=0; if(USART3_RX_STA&0X8000) //接收到一次数据了 { USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符 strx=strstr((const char*)USART3_RX_BUF,(const char*)str); } return (u8*)strx; }



Lora模块发送数据

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
u8 Dire_Date[]={0x11,0x22,0x33,0x44,0x55};//定向传输数据 u8 date[30]={0};//定向数组 //Lora模块发送数据 void LoRa_SendData(void) { static u8 num=0; u16 addr; u8 chn; u16 i=0; if(LoRa_CFG.mode_sta == LORA_STA_Tran)//透明传输 { sprintf((char*)Tran_Data,"ATK-LORA-01 TEST %d",num); u3_printf("%srn",Tran_Data); LCD_Fill(0,195,240,220,WHITE); //清除显示 Show_Str_Mid(10,195,Tran_Data,16,240);//显示发送的数据 num++; if(num==255) num=0; }else if(LoRa_CFG.mode_sta == LORA_STA_Dire)//定向传输 { addr = (u16)obj_addr;//目标地址 chn = obj_chn;//目标信道 date[i++] =(addr>>8)&0xff;//高位地址 date[i++] = addr&0xff;//低位地址 date[i] = chn;//无线信道 for(i=0;i<Dire_DateLen;i++)//数据写到发送BUFF { date[3+i] = Dire_Date[i]; } for(i=0;i<(Dire_DateLen+3);i++) { while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);//循环发送,直到发送完毕 USART_SendData(USART3,date[i]); } //将十六进制的数据转化为字符串打印在lcd_buff数组 sprintf((char*)wlcd_buff,"%x %x %x %x %x %x %x %x", date[0],date[1],date[2],date[3],date[4],date[5],date[6],date[7]); LCD_Fill(0,200,240,230,WHITE);//清除显示 Show_Str_Mid(10,200,wlcd_buff,16,240);//显示发送的数据 Dire_Date[4]++;//Dire_Date[4]数据更新 } }



Lora模块接收数据

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//Lora模块接收数据 void LoRa_ReceData(void) { u16 i=0; u16 len=0; //有数据来了 if(USART3_RX_STA&0x8000) { len = USART3_RX_STA&0X7FFF; USART3_RX_BUF[len]=0;//添加结束符 USART3_RX_STA=0; for(i=0;i<len;i++) { while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 USART_SendData(USART1,USART3_RX_BUF[i]); } LCD_Fill(10,260,240,320,WHITE); if(LoRa_CFG.mode_sta==LORA_STA_Tran)//透明传输 { Show_Str_Mid(10,270,USART3_RX_BUF,16,240);//显示接收到的数据 }else if(LoRa_CFG.mode_sta==LORA_STA_Dire)//定向传输 { //将十六进制的数据转化为字符串打印在lcd_buff数组 sprintf((char*)rlcd_buff,"%x %x %x %x %x", USART3_RX_BUF[0],USART3_RX_BUF[1],USART3_RX_BUF[2],USART3_RX_BUF[3],USART3_RX_BUF[4]); Show_Str_Mid(10,270,rlcd_buff,16,240);//显示接收到的数据 } memset((char*)USART3_RX_BUF,0x00,len);//串口接收缓冲区清0 } }

最后

以上就是负责枫叶最近收集整理的关于STM32学习笔记Lora(一)目录正文的全部内容,更多相关STM32学习笔记Lora(一)目录正文内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部