NRF24L01 会出现跑了一会儿就停止了或者距离远一些也停止了呢?
为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "24l01.h"
//收发都做在一个函数里面,通过按键来确定进入发送模式,还是接收模式
int main(void)
{
u8 key,mode;
u16 count1,count2;
u8 tmp_buf[33]={'1','2','3','4','5'};
u8 flag=0;
u8 Sec_Cho_Fir=0,Sec_Cho_Sec=0; //二次选择
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
KEY_Init(); //按键初始化
LED_Init(); //LED初始化
NRF24L01_Init(); //初始化NRF24L01
while(NRF24L01_Check())//检测不到24L01 //检查无线模块是否存在,不影响时间
{
LED0=!LED0;//DS0闪烁
}
/////////////////////////////正式选择部分////////////////////////////////////////
while(1) //在该部分确定进入哪个模式!
{
key=KEY_Scan();
if(key==1)
{
mode=0;
break;
}else if(key==2)
{
mode=1;
break;
}
}
/////////////////////////////mode==0////////////////////////////////////////
if(mode==0)
{
while(1)
{
if(0==flag)
{
RX_Mode(); //接收模式
while(0==flag)
{
if(NRF24L01_RxPacket(tmp_buf)==0) //一旦接收到信息 点亮LED0
{
count1++;
printf("count1=%d\n",count1); //打印串口发送次数计数标志
LED0=!LED0;
Sec_Cho_Fir++;
if(Sec_Cho_Fir>=10)
{
flag=1;
Sec_Cho_Fir=0;
}
}
}
}
if(0!=flag)
{
TX_Mode(); //发送模式
while(0!=flag)
{
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
count2++;
printf("count2=%d\n",count2);
LED1=!LED1;
// flag = 0;
Sec_Cho_Fir++;
if(Sec_Cho_Fir>=10)
{
flag=0;
Sec_Cho_Fir=0;
}
}
}
}
}
} else
/////////////////////////////mode==1////////////////////////////////////////
{
while(1)
{
if(0==flag)
{
TX_Mode(); //发送模式
while(0==flag)
{
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
count2++;
printf("count2=%d\n",count2);
LED1=!LED1;
Sec_Cho_Sec++;
if(Sec_Cho_Sec >= 10) //一次发送10个包
{
Sec_Cho_Sec = 0;
flag=1;
}
}
}
}
if(0!=flag)
{
RX_Mode(); //接收模式
while(0!=flag)
{
if(NRF24L01_RxPacket(tmp_buf)==0) //一旦接收到信息 点亮LED0
{
count1++;
printf("count1=%d\n",count1); //打印串口发送次数计数标志
LED0=!LED0;
// flag=0;
Sec_Cho_Sec++;
if(Sec_Cho_Sec >= 10) //一次发送10个包
{
Sec_Cho_Sec = 0;
flag=0;
}
}
}
}
}
}
}
沙发自己做把
工作期间,外围的一些电压参数是否会变化?
距离远了,自然就掉码了。你发一个包之后FIFO没清,所以一上电或复位只能发一次的。