LoRa 无线通信模块 之 发送0.01V

参考的原子哥的例程,谢谢原子哥,你真伟大。佩服!!!
他们都是 比较牛的人,就是把自己会的毫无保留的分享给后辈学习。
代码是先.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,115200); //串口初始化为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;
}

/*****************
strx=strstr((const char*)USART2_RX_BUF,(const char*)str);

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)=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值