//接收数据包 //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; }
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); } }
/******************************以下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 "); } }
//======================================= 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(); } }
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(); }
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); }
//发送数据包, 发送完成后自动返回监听自己的通道 //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(); }
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(); } }
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; } } }
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 } } }
//触摸画板功能演示函数 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)//按键松开了