예제 #1
0
파일: wpan.c 프로젝트: JDsolution/ST-Node
//接收数据包
//0,ok;1,err
u8 rec_pkt(pkt_t * pkt)
{
    u32 t;
    u8 res = 1;
    RX_Mode(&ch);   //使用对端地址接收
    t = systick;
    while(systick - t < 10 && NRF24L01_IRQ); //等待20ms,读取返回值
    if(systick - t < 10)
    {
        NRF24L01_RxPacket((u8 *)pkt); //170us读取
        res = 0;
    }
    RX_Mode(&mych);//最后返回本机接收模式
    return res;
}
예제 #2
0
void main()
{
	unsigned char testdisplay[8]={'1','1','1','1','1','1','1','1'};
	uchar i; //自己加的
//	uchar datedisplay[7];
	init_io();
	P0=0x00;//屏蔽数码管
	 delay(10);                 //延时
//    wela=0;
//	dula=0; 
//	inte();
 lcd_init2();	
	lcd12864(testdisplay);
	/******************自己加的**************************/
	while(NRF_Check());	

	RX_Mode();//	
	interface();
	while(NRF24L01_RxPacket(RxBuf)!=0);
	while(1)
	{
		if(NRF24L01_RxPacket(RxBuf)==0)		
		{
			for(i=0;i<8;i++)
			datedisplay[i]=RxBuf[i];	
		}

	checkbutton();
	lcd12864(datedisplay);

	}		
}
예제 #3
0
/******************************以下finsh中测试函数*****************************/
static void rt_rf_thread_entry(void* parameter)
{
  rt_uint8_t buf[TX_ADR_WIDTH] = {0x00};

  NRF24L01_Init();  
  if(NRF24L01_Check()==RT_EOK)
  {
    rt_kprintf("\r\n RF1 模块初始化成功!\r\n");
  }
  else  
  {
    rt_kprintf("\r\n RF1 模块不存在!\r\n");
    return;
  }
  RX_Mode();
  while (1)
  {  
    if(NRF24L01_RxPacket(buf) == RT_EOK)
    {
       rt_kprintf("\r\n RF1 接收到数据:\r\n"); 
        {
          rt_kprintf((char const*)buf);
        }
    }
     
    rt_thread_delay(RT_TICK_PER_SECOND/100);        
  }
}
int main(void)
{
	unsigned int nCount;
	unsigned char vEncoder[20]="--------------------";
	int i;
  RCC_Configuration();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	NVIC_Configuration();
		EXTI_Configuration();
  USART1_Init();
	USART2_Init();															
	USART3_Init();
	UART4_Init();
	UART5_Init();
	SPI2_Init();
	SysTick_Init();
	//init_NRF24L01();
	RX_Mode();
	//nRF24L01_ISR();
	
  while(1)
{

	//Serial_PutString("While ");


}
}	 
예제 #5
0
파일: main.c 프로젝트: nvero/fmhobby
//=======================================
void main(void)
{   
  uint8_t remote_id1_packet[NRFR_LENGTH_REPORT_1], remote_id2_packet[NRFR_LENGTH_REPORT_2];
  uint8_t i;
//=======================================
  CLKCTL=0;
  RFCE=0;
  RFCTL=0x10;
  rf_init();									// RF初始化
//=======================================
  hal_usb_init(true, device_req_cb, reset_cb, resume_cb, suspend_cb);   
  hal_usb_endpoint_config(0x81, 32, ep_1_in_cb); // Configure 32 byte IN endpoint 1
  EA=1;
  app_keep_alive_cnt=0;
  RX_Mode();									//进入接收模式
  while(true)                                                                               
  {
     	  if(RX_DR)
     	  {
			sta=0;
			for(i=0;i<5;i++)
			{
			   remote_id1_packet[i]=rx_buf[i];
			}
			for(i=0;i<9;i++)
			{
			   remote_id2_packet[i]=rx_buf[i+5];
			}
			app_transfer_to_usb(remote_id1_packet, remote_id2_packet);
			app_keep_alive_cnt=1;
			delay(100);
          }
		  app_maintain_keep_alive();        
  }
}                          
예제 #6
0
void rf1send(rt_uint8_t * str)
{ 
      rt_kprintf("\r\n \r\n"); 
      TX_Mode();
      rt_kprintf("\r\n RF1 发送数据:%s \r\n", str); 
      NRF24L01_TxPacket(str);
      RX_Mode();
}
예제 #7
0
파일: wpan.c 프로젝트: JDsolution/ST-Node
void wpan_init(NRF24L01_CH_TypeDef *init_ch)
{
    NRF24L01_Init();
    while(NRF24L01_Check());
    memcpy(&mych, init_ch, sizeof(NRF24L01_CH_TypeDef));
    CH_USE(&mych);
    RX_Mode(&ch);
}
예제 #8
0
파일: wpan.c 프로젝트: JDsolution/ST-Node
//发送数据包, 发送完成后自动返回监听自己的通道
//0,ok;1,err
 u8 send_pkt(pkt_t * pkt)
{
    u32 t;
    u8 res;
    TX_Mode(&ch);//准备发射//130us
    t = systick;
    do {
        res = NRF24L01_TxPacket((u8 *)pkt);//发送数据 //发送次数超限用时10.7ms//发送成功830us
    }while(res != TX_DS && (systick - t < 10));//20ms内不停尝试//5us 
    RX_Mode(&mych);//最后返回接收模式//100us
    return (res != TX_DS);
}
void nRF24L01_ISR(void)
{
	int i;
	sta=SPI2_readReg(STATUS);
	SPI2_writeReg(WRITE_REG+STATUS,0xff);
	if(RX_DR)				
	{
		SPI2_readBuf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);
		Serial_PutString(rx_buf);				 //put whatever received to the UART
  }
	if(MAX_RT)
	{
		SPI2_writeReg(FLUSH_TX,0);
  }

	
	RX_Mode();	
}
예제 #10
0
void main()
{
	uchar i; //自己加的
	init_io();
	P0=0x00;//屏蔽数码管
  Delay400Ms();                 //延时
	
	/******************自己加的**************************/
	RX_Mode();
	while(NRF24L01_RxPacket(RxBuf)!=0);
	while(1)
	{
		if(NRF24L01_RxPacket(RxBuf)==0)		
		{
			for(i=0;i<8;i++)
			datedisplay[i]=RxBuf[i];	
		}
		display();
	}		
}
예제 #11
0
void CheckButtons()
{
	P1 |= 0x00;
	if(!(P1 & 0x01))		            // 读取P3^0状态
	{
		delay_ms(20);
		if(!(P1 & 0x01))			    // 读取P3^0状态
		{
			TX_BUF[0] = ~DATA;          // 数据送到缓存
			TX_Mode(TX_BUF);			// 把nRF24L01设置为发送模式并发送数据
			LED = ~DATA;		        // 数据送到LED显示
			Check_ACK(1);               // 等待发送完毕,清除TX FIFO
			delay_ms(250);
			delay_ms(250);
			LED = 0xff;			        // 关闭LED
			RX_Mode();			        // 设置为接收模式
			while(!(P1 & 0x01));
			DATA <<= 1;
			if(!DATA)
				DATA = 0x01;
		}
	}
}
예제 #12
0
void main(void)
{
	init_io();		              // 初始化IO
	RX_Mode();		              // 设置为接收模式
	while(1)
	{
		CheckButtons();           // 按键扫描
		sta = SPI_Read(STATUS);	  // 读状态寄存器
	    if(RX_DR)				  // 判断是否接受到数据
		{
			SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);  // 从RX FIFO读出数据
			flag = 1;
		}
		SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除RX_DS中断标志
		if(flag)		           // 接受完成
		{
			flag = 0;		       // 清标志
			LED = RX_BUF[0];	   // 数据送到LED显示
			delay_ms(250);
			delay_ms(250);
  			LED = 0xff;		       // 关闭LED
		}
	}
}
예제 #13
0
//触摸画板功能演示函数   
void Wireless_Play(void)
{				  	
	u8 err=0,i;		 
	u8 key;	 
	u8 mode;//24L01的模式设置
	u8 tmp_buf[5];//低4个字节,传递坐标值,最高一个字节:0,正常画图,1清除;2,退出;  
	  
	mode=Wireless_Mode_Set();
	if(mode==0)
	{
		SPIx_Init();//设置回原来的				 
		SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
		return;//24L01检测失败,直接退出
	}	 			
	if(mode==2)
	{			    
		Load_Gui_Show("清除","发送","返回");//加载界面 
		TX_Mode();//发送模式
	}else
	{
		Load_Gui_Show("清除","接收","返回");//加载界面 
		RX_Mode();//接收模式
	}
	LCD_Fill(0,0,240,296,LGRAY);//填充灰色 
	POINT_COLOR=BLUE;//设置字体为蓝色  	 
	while(1)
	{	  		   				 
		key=AI_Read_TP(20);//得到触点的状态
		if(mode==1)//接收模式
		{
			if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
			{
				Pen_Point.X=tmp_buf[0];
				Pen_Point.X=(Pen_Point.X<<8)+tmp_buf[1];
 				Pen_Point.Y=tmp_buf[2];
				Pen_Point.Y=(Pen_Point.Y<<8)+tmp_buf[3];
				switch(tmp_buf[4])
				{
					case 0://正常画点
						Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
						break;
					case 1://清除
						LCD_Fill(0,0,240,296,LGRAY);//填充灰色
						break;
					case 2://退出
						Pen_Point.Key_Reg=0;//清除笔状态
						SPIx_Init();//设置回原来的				 
						SPIx_SetSpeed(SPI_SPEED_4);//18Mhz 
						return; 
				}	  
			}
		}
		if(key)//触摸屏被按下						  
		{	
			Pen_Point.Key_Reg|=0x80;//标记按下了按键    
			if(Pen_Point.Y<296&&mode==2)//在画图区域内,且为发送模式
			{
				tmp_buf[0]=Pen_Point.X>>8;
				tmp_buf[1]=Pen_Point.X&0xFF;
				tmp_buf[2]=Pen_Point.Y>>8;	 
				tmp_buf[3]=Pen_Point.Y&0xFF; 
				tmp_buf[4]=0;//功能为0,正常画图  
				Draw_Big_Point(Pen_Point.X,Pen_Point.Y);//画点
				err=0;	      
				while(NRF24L01_TxPacket(tmp_buf)!=TX_OK)//等待发送完成
				{
					err++;
					if(err>10)return;//连续超过10次错误,则返回
				}
			}      
		}else if(Pen_Point.Key_Reg&0X80)//按键松开了