NRF24L01无线模块发送和接收数据代码 - STM32
#include"sys.h"\n#include"delay.h"\n#include"usart.h"\n#include"led.h"\n#include"lcd.h"\n#include"key.h"\n#include"usmart.h"\n#include"24l01.h"\n#include"timer.h"\n#include"lsens.h"\n#include"exti.h"\n\nextern u8 time;\nextern u8 mode;\nint main(void)\n{\n int i; \n\tu8 key,key1;\n\tu16 t=0;\n\tu8 adcx;\n\tu8 tmp_buf[33];\n\tu8 a[7]={"IOT-BCU"},bin[1]={"0"},bon[3]={0};\n\tStm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz\n\tdelay_init(168); //延时初始化 \n\tuart_init(84,115200); //初始化串口波特率为115200\n\tEXTIX_Init(); //初始化外部中断输入\n\tLED_Init(); //初始化LED\n\tLCD_Init(); //LCD初始化 \n\tKEY_Init(); //按键初始化\n\tNRF24L01_Init(); //初始化NRF24L01\n\tLsens_Init(); //初始化光敏传感器\n\tTIM3_Int_Init(10000-1,8400-1);//10Khz的计数频率,计数5K次为500ms->1s\n\n\n\tPOINT_COLOR=RED;//设置字体为红色\n\tLCD_ShowString(30,50,200,16,16,"2020/6/1"); \n\tLCD_ShowString(30,70,200,16,16,"NRF24L01 TEST"); \n\tLCD_ShowString(30,110,200,16,16,"");\n\twhile(NRF24L01_Check())\n\t{\n\t LCD_ShowString(30,130,200,16,16,"NRF24L01 Error");\n\t delay_ms(200);\n\t LCD_Fill(30,130,239,130+16,WHITE);\n\t delay_ms(200);\n\t}\n\tLCD_ShowString(30,130,200,16,16,"NRF24L01 OK");\n\n\tLCD_Fill(10,150,240,166,WHITE);//清空上面的显示 \n\tPOINT_COLOR=BLUE;//设置字体为蓝色 \n\n\tif(mode==2)//进入key1长按\n\t{\n\t LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode2"); \n\t NRF24L01_TX_Mode();\n\t mode=0;//从0键开始 \n\t while(1)\n\t { \n\t if(NRF24L01_TxPacket(tmp_buf)==TX_OK)\n\t {\n\t LCD_ShowString(30,170,239,32,16,"Sended DATA:""); \n\t LCD_ShowString(30,190,55,16,16,tmp_buf); \n\t key=mode;\n\t key1=mode;\n\t for(t=0;t<32;t++)\n\t { \n\t tmp_buf[t]=a[key-key1];\n\t key++;\n\t if(key>=key1+7)key=0; \n\t }\n\t mode++;\n\t tmp_buf[31]=1;\n\t tmp_buf[32]=0;//加入结束符\n\t for(mode=0;mode<6;mode++)\n\t {\n\t bin[0]=a[mode];\n\t a[mode]=a[mode+1];\n\t a[mode+1]=bin[0];\n\t }\n\t }else\n\t { \n\t LCD_Fill(0,170,lcddev.width,170+163,WHITE);//清空显示 \n\t LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed "); \n\t };\n\t mode=0;\n\t while(1)\n\t {\n\t if(time>=2){time=0;break;}\n\t }\n\t //delay_ms(2000); \n\t };\n\t}\n\t \n\t if(mode==1)//进入key1短按\n\t{\n\t LCD_Fill(0,170,lcddev.width,170+163,WHITE);//清空显示 \n\t LCD_ShowString(30,150,200,16,16,"NRF24L01 TX_Mode1"); \n\t NRF24L01_TX_Mode();\n\t while(1)\n\t {\n\t adcx=Lsens_Get_Val();\n\t bon[0]=adcx/10;\n\t bon[1]=adcx%10;\n\t bon[2]=37;\n\t if(NRF24L01_TxPacket(tmp_buf)==TX_OK)\n\t {\n\t LCD_ShowString(30,170,239,32,16,"Sended DATA:(LSENS_VAL)"");\n\t LCD_ShowString(30,190,55,16,16,tmp_buf);\n\t LCD_DrawLine(47, 205, 56, 191); \n\t LCD_Draw_Circle(50,192,2); \n\t LCD_Draw_Circle(54,202,2);\n\t tmp_buf[0]=bon[0]+48; \n\t tmp_buf[1]=bon[1]+48;\n\t for(t=3;t<32;t++)\n\t {\n\t tmp_buf[t]=' ';\n\t }\n\t tmp_buf[31]=1;\n\t tmp_buf[32]=0;//加入结束符 \n\t }else\n\t {\n\t LCD_Fill(0,170,lcddev.width,170+163,WHITE);//清空显示\n\t LCD_ShowString(30,170,lcddev.width-1,32,16,"Send Failed "); \n\t };\n\t while(1)\n\t {\n\t if(time>=1){time=0;break;}\n\t }\n\t //delay_ms(1000);\n\t };\n\t}\n\n\tif(mode==3)//进入key2短按\n\t{\n\t LCD_Fill(0,170,lcddev.width,170+163,WHITE);//清空显示\n\t LCD_ShowString(30,150,200,16,16,"NRF24L01 RX_Mode"); \n\t LCD_ShowString(30,170,200,16,16,"Received DATA:""); \n\t NRF24L01_RX_Mode();\n\t while(1)\n\t {\n\t if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.\n\t {\n\t tmp_buf[32]=0;//加入字符串结束符\n\t for(i=i;i<32;i++)//?for???tmp_buf??????,?????\n\t {\n\t tmp_buf[i]=tmp_buf[i+1];\n\t }\n\t if(tmp_buf[0]<58&&tmp_buf[31]==1&&tmp_buf[0]!='-')\n\t {\n\t LCD_ShowString(150,170,200,16,16,"(LSENS_VAL)"");\n\t LCD_DrawLine(47, 205, 56, 191); \n\t LCD_Draw_Circle(50,192,2); \n\t LCD_Draw_Circle(54,202,2);\n\t }\n\t if(tmp_buf[0]<58&&tmp_buf[31]==2&&tmp_buf[0]!='-')\n\t {\n\t LCD_ShowString(150,170,200,16,16,"(LSENS_VAL)"");\n\t LCD_DrawLine(47, 225, 56, 211); \n\t LCD_Draw_Circle(50,212,2); \n\t LCD_Draw_Circle(54,222,2);\n\t }\n\t if(tmp_buf[0]<58&&tmp_buf[31]==3&&tmp_buf[0]!='-')\n\t {\n\t LCD_ShowString(150,170,200,16,16,"(LSENS_VAL)"");\n\t LCD_DrawLine(47, 245, 56, 231); \n\t LCD_Draw_Circle(50,232,2); \n\t LCD_Draw_Circle(54,242,2);\n\t }\n\t if(tmp_buf[31]==1)LCD_ShowString(30,190,55,16,16,tmp_buf);\n\t if(tmp_buf[31]==2)LCD_ShowString(30,210,55,16,16,tmp_buf);\n\t if(tmp_buf[31]==3)LCD_ShowString(30,230,55,16,16,tmp_buf);\n\t }\n\t else delay_us(100);\n\t t++;\n\t if(t==10000)//大约1s钟改变一次状态\n\t {\n\t t=0;\n\t LED0=!LED0;\n\t } \n\t }; \n\t}\n}\n
原文地址: https://www.cveoy.top/t/topic/puMe 著作权归作者所有。请勿转载和采集!