参考的原子哥的例程,谢谢原子哥,你真伟大。佩服!!!
他们都是 比较牛的人,就是把自己会的毫无保留的分享给后辈学习。
代码是先.c 文件 后.h文件。
注意其中的的IO 口配置。
我亲自测试通过,接收可以收到准确的信息。
KEIL 4 编译通过,keil5 编译通过。
有错误一定给说说,我好进步谢谢。
#include “sys.h”
#include “usart.h”
#include “delay.h”
#include “lora.h”
int main(void)
{
u8 suk;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,); //串口初始化为9600
printf(“开始 Lora 无线测试\r\n”);
suk = LoRa_Init();
while(LoRa_Init())
{
delay_ms(300);
printf("\r\n 初始化 不成功 \r\n");
}
printf("\r\n 初始化 成功 \r\n");
printf("初始化 LoRa_Init = %d\r\n",suk); printf("\r\n 配置 lora 模块 \r\n"); LoRa_Set(); //lora 配置 设置串口波特率 while(1) { delay_ms(1000); printf("Lora 正在 发送 数据 \r\n"); if(!LORA_AUX&&(LoRa_CFG.mode!=LORA_MODE_SLEEP))//空闲且非省电模式 { LoRa_SendData();//发送数据 } //数据接收 //LoRa_ReceData(); }
讯享网
}
#include “lora.h”
#include “stdarg.h”
#include “stdio.h”
#include “string.h”
#include “sys.h”
#include “usart.h”
#include “delay.h”
#include “usart2.h”
//设备参数初始化(具体设备参数见lora_cfg.h定义)
_LoRa_CFG LoRa_CFG=
{
.addr = LORA_ADDR, //设备地址
.power = LORA_POWER, //发射功率
.chn = LORA_CHN, //信道
.wlrate = LORA_RATE, //空中速率
.wltime = LORA_WLTIME, //睡眠时间
.mode = LORA_MODE, //工作模式
.mode_sta = LORA_STA, //发送状态
.bps = LORA_TTLBPS , //波特率设置
.parity = LORA_TTLPAR //校验位设置
};
/
//将1个字符转换为16进制数字
//chr:字符,09/AF/a~F
//返回值:chr对应的16进制数值
*/
u8 chr2hex(u8 chr)
{
if(chr>=‘0’&&chr<=‘9’)return chr-‘0’;
if(chr>=‘A’&&chr<=‘F’)return (chr-‘A’+10);
if(chr>=‘a’&&chr<=‘f’)return (chr-‘a’+10);
return 0;
}
/*
//字符转成16进制数据
//test[] 存储位置
//buffer[] 需转换的数组
//len: 长度
*/
void char2hex_buff(u8 test[],u8 buff[],u8 len)
{
u8 i=0;
for(i=0;i<len;i++)
{
test[i] = chr2hex(buff[i]);
}
}
/
//将16进制数据转换成数字
/
u32 hexbuff_num(u8 test[],u8 buff[],u8 len)
{
u8 i=0;
u32 num=0;
讯享网for(i=0;i<len;i++) test[i] = chr2hex(buff[i]); if(len==5) num = test[0]*10000+test[1]*1000+test[2]*100+test[3]*10+test[4]; else if(len==4) num = test[0]*1000+test[1]*100+test[2]*10+test[3]; else if(len==3) num = test[0]*100+test[1]*10+test[2]; else if(len==2) num = test[0]*10+test[1]; else if(len==1) num = test[0]; return num;
}
/*
//计算数字位数
//如:100,3位数、10,1位数
*/
u8 num_count(u32 num)
{
u32 date=0;
u8 count=0;
date = num; do { count++; date/=10; }while(date>0); return count;
}
/
LoRa 发送命令后,检测接收到的应答
str:期待的应答结果
返回值: 0, 没有得到期待的应答结果
其他,期待应答结果的位置(str的位置)
*/
u8 lora_check_cmd(u8 str)
{
char strx=0;
if(USART2_RX_STA&0X8000) //接收到一次数据了
{
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
strx=strstr((const char)USART2_RX_BUF,(const char)str);
}
return (u8)strx;
}
strstr(str1,str2);
函数用于判断字符串str2 是否是str1 的子串
如果 是 则该函数返回str2 在str1 中首次出现的地址;
否 返回NULL
*/
/*
LoRa 发送命令:
cmd 发送的命令字符串 不需要添加回车
当cmd<0xff发送数字 大于发送字符串
ack 期待的应答结果 如果为空 则表示不需要等待应答
waitime 等待时间 单位是10ms
返回: 0 发送成功
1 发送失败
/
u8 lora_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
讯享网USART2_RX_STA=0; //接收置 0 if((u32)cmd<=0XFF) //发送数字 { while((USART2->SR&0x40)=

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47655.html