RAK439 创建AP失败



  • 初始化可以通过,但是调用启动AP的时候失败
    打印信息如下:
    WIFI rak439 init start
    240 main.c:137 WIFI rak439 init successed!
    244 main.c:140 rak wifi LibVersion:1.0.6-2.1.41
    249 main.c:142 rak wifi module-MAC:60:C5:A8:68:B1:8F
    30838 ap_sta.c:43 rw_ipConfig error =-1
    30842 ap_sta.c:48 rw_ipConfig error =-1
    30846 ap_sta.c:79 rw_startAP error =-1
    30850 main.c:155 WIFI rak439 rw_network_startAP filed!



  • 请帮忙看看这个应该如何调试?
    调用rw_network_startSTA 目前没有问题,但是我们一开始想让RAK439作为路由器,调用rw_network_startAP 失败



  • 是每次都会失败吗?



  • @xc.c 就没有成功过,每次都失败,也没有给出具体错误信息



  • 截图看下你的rw_network_startAP 函数,修改了什么?





  • 把这个注释掉。
    0_1493701274922_upload-26ff0d64-f254-4256-a788-7e8e6025453f



  • @xc.c 注释掉,试了试也不行



  • 你是NOS还是OS的?



  • @xc.c 用的是NOS的



  • 有在while(1)里循环调用rw_sysDriverLoop函数吗?



  • 有调用的,但是while(1)里循环调用rw_sysDriverLoop函数,不是在rw_network_startAP或者rw_network_startSTA 之后吗? 同步运行情况下,需要等到rw_network_startAP执行完成后,再执行rw_sysDriverLoop的啊
    0_1493776921263_upload-5ec27db2-fd7e-4a09-a5da-84a81ecc4f8b



  • 是的,RAK439 NOS的代码每执行一个命令后都要调用rw_sysDriverLoop函数一次



  • @xc.c 也就是说 rw_network_startAP 的失败 和调用 rw_sysDriverLoop 没有关系啊。因为在调用rw_sysDriverLoop 之前它就已经返回失败了



  • 不是,有关系。RAK439的不阻塞的,你发下你的主函数截图。



  • @xc.c

              int main(void)
             {
    	 FRESULT fres;
    	 FATFS fs;
    	 FIL file;
    	 FIL* f_jpg=&file;
    	 u32 bwr;
    	 u32 i = 0;
    	 u8 buff[20];
    	 u8 *pbuf;
    	 char pname[50];
    	 float adc4,adc5;
    	 OV2640_IDTypeDef OV2640_Camera_ID;
    	 rw_DriverParams_t     params;
             int   ret =0;
    	 char  libVersion[20]="";
             char  module_mac[6] ="";
    	 memset(&OV2640_Camera_ID,0x0,sizeof(OV2640_IDTypeDef));
    	Stm32_Clock_Init(336,25,2,7);//ÉèÖÃʱÖÓ,168Mhz 
          LED_GPIO_Config();//GPIO¹Ü½Å³õʼ»¯
          NVIC_SDIO_Config();	
    	///////////////Delay³õʼ»¯//////////////////		
    	delay_init(168);			//ÑÓʱ³õʼ»¯ STM32F4 µÄƵÂÊΪ168M
    	///////////////USART1³õʼ»¯/////////////////
    	uart_init(84,115200);		//³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200 
        #if 0	 //µ÷ÊÔspi wifi Ä£¿éÏÈ×¢Ê͵ôÆäËûµÄ
    	Adc_Init(); 				//³õʼ»¯ADC
    	OV2640_HW_Init();					//IIC³õʼ»¯
    	OV2640_ReadID(&OV2640_Camera_ID);	//¶ÁÈ¡OV2640ID£¬²âÊÔÓ²¼þ£¬ÒÀ
        ´ÎΪ:0x7F,0xA2,0x26,0x42
    	OV2640_JPEGConfig(JPEG_320x240);	//ÅäÖÃOV2640Êä³ö320*240ÏñËصÄJPGͼƬ
    	//OV2640_JPEGConfig(JPEG_1024x768);	//
        ÅäÖÃOV2640Êä³ö1024*768ÏñËصÄJPGͼƬ
    	//ÉèÖÃ×Ô¶¯ÆعâºÍ°×ƽºâ
    	OV2640_BrightnessConfig(0x20);
    	OV2640_AutoExposure(2);
    	OV2640_CaptureGpioInit();				//Êý¾Ý²É¼¯Òý½Å³õʼ»¯
    #endif	
    	//rak module driver init
    	printf("WIFI rak439 init start \r\n");
    	host_platformInit();	
          wifi_init_params(&params);	
    	ret =rw_sysDriverInit(&params);
    	if(ret != RW_OK)
    	{
    		DPRINTF("RAK module platform init...failed code=%d\r\n", ret);
    		//while(1); 
    	}
    	else
    	{
    		DPRINTF("WIFI rak439 init successed! \r\n");
    	}
          rw_getLibVersion(libVersion); 
          DPRINTF("rak wifi LibVersion:%s\r\n", libVersion);
          rw_getMacAddr(module_mac);
          DPRINTF("rak wifi module-MAC:%02X:%02X:%02X:%02X:%02X:%02X\r\n", 
    	         module_mac[0],module_mac[1],module_mac[2],
    	         module_mac[3],module_mac[4],module_mac[5]);
    	rw_appdemo_context_init();
          //ret = rw_network_startSTA();
    	//rw_sysDriverReset();
    	ret = rw_network_startAP();
    	if( RW_OK == ret)
    	{
    			DPRINTF("WIFI rak439 rw_network_startAP successed! \r\n");
    	}
    	else
    	{
    			DPRINTF("WIFI rak439 rw_network_startAP filed! \r\n");
    	}
    	//printf("OV2640 init ok! \r\n");
    	//USART1_Transmit(0x1);
        #if 0 ////µ÷ÊÔspi wifi Ä£¿éÏÈ×¢Ê͵ôÆäËûµÄ
    	fres = f_mount(&fs,"0:",1); 		//¹ÒÔØSD¿¨  
    	if( 0 == fres)
    	{
    		fres=f_mkdir("0:/PHOTO1");		//´´½¨PHOTOÎļþ¼Ð
    		if( fres!=FR_EXIST && fres!=FR_OK ) 	//·¢ÉúÁË´íÎó
    		{		    
    			testflag = 1;	
    			printf("\r\nf_mkdir failed: fres=0x%x",fres);//´®¿Ú´òÓ¡
    		} 
    		else
    		{
        /*	
    			fres=f_open(f_jpg,"0:PHOTO1/hj1.txt",FA_WRITE|FA_CREATE_ALWAYS);//
        ģʽ0,»òÕß³¢ÊÔ´ò¿ªÊ§°Ü,Ôò´´½¨ÐÂÎļþ	 
    			if(fres==FR_OK || fres==FR_EXIST)
    			{		
    				fres=f_write(f_jpg,"haha oh yeah!\r\n",strlen("haha oh yeah!\r\n"),&bwr);
    				printf("\r\n write hj.txt: bwr=%d",bwr);//´®¿Ú´òÓ¡
    				f_lseek(f_jpg,f_size(f_jpg));
    				fres=f_write(f_jpg,"the second line!\r\n",strlen("the second line!\r\n"),&bwr);
    				f_close(f_jpg); 
    				sprintf((char*)pname,"0:PHOTO1/PIC%05d.bmp",0);
    				fres=f_open(f_jpg,pname,FA_READ);//³¢ÊÔ´ò¿ªÕâ¸öÎļþ
    				if(fres==FR_NO_FILE || fres==FR_NO_PATH)
    					testflag = 1;	
    				else
    					fres=f_read(f_jpg,buff,strlen("haha oh yeah!\r\n"),&bwr);
    					f_close(f_jpg);
    				//fres = f_mount(NULL,"0:",1); 		//È¥¹ÒÔØSD¿¨  
    			}
       */
    		printf("\r\nf_mkdir successed!");//´®¿Ú´òÓ¡
    		}
    	}
    	else
    	{
    		testflag = 1;	
    		printf("\r\nf_mount failed: fres=0x%x",fres);//´®¿Ú´òÓ¡
    	}
    	My_RTC_Init();		 		//³õʼ»¯RTC
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
    	RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);		//ÅäÖÃWAKE UPÖжÏ,1ÃëÖÓÖжÏÒ»´Î
        #endif
          while (1)
      {
        #if 0 //µ÷ÊÔspi wifi Ä£¿éÏÈ×¢Ê͵ôÆäËûµÄ
    		if(VsyncActive == 2)
    		{
    			//printf("\r\nVsyncActive:%d  testflag:%d",VsyncActive,testflag);//´®¿Ú
        ´òÓ¡JPEGÎļþ´óС
    			//·âÖ¡¸ñʽΪ£º0xAA CMD 0x55
        #if 1
    			if(1)	/*UsartBuf[0] == 0xAA && UsartBuf[1] == 0x02*/			
    			{	//´®¿ÚÃüÁһֱ·¢
    				for(i = 0; i < JpegDataCnt; i ++)
    				{
    					USART1_Transmit(JpegBuffer[i]);
    				}
    			}
        #endif
    			//±£´æͼƬ¿ªÊ¼
        #if 0
    			if (testflag == 0)
    			{
    				sprintf((char*)pname,"0:PHOTO1/PIC%05d.jpg",0);
    				fres=f_open(f_jpg,(const TCHAR*)pname,FA_WRITE|FA_CREATE_ALWAYS);//
        ģʽ0,»òÕß³¢ÊÔ´ò¿ªÊ§°Ü,Ôò´´½¨ÐÂÎļþ	 
    				if(fres==FR_EXIST || fres==FR_OK)
    				{
    					printf("\r\njpeg data size:%d",JpegDataCnt);//´®¿Ú´òÓ¡JPEGÎļþ´óС
    					pbuf=(u8*)JpegBuffer;
    					for(i=0;i<JpegDataCnt;i++)//²éÕÒ0XFF,0XD8
    					{
    						if((pbuf[i]==0XFF)&&(pbuf[i+1]==0XD8))
    							break;
    					}
    					if(i==JpegDataCnt)
    					{
    						fres=0XFD;//ûÕÒµ½0XFF,0XD8
    						printf("\r\n 0XFF,0XD8 flags is not found!: fres = 0x%x",fres);//´®¿Ú
        ´òÓ¡
    					}
    					else//ÕÒµ½ÁË
    					{
    						pbuf+=i;//Æ«ÒƵ½0XFF,0XD8´¦
    						fres=f_write(f_jpg,pbuf,JpegDataCnt-i,&bwr);
    						if(bwr!=(JpegDataCnt-i))
    						{
    							fres=0XFE; 
    							printf("\r\n write JPG file failed!: fileLen = %d bwr = 
        %d",JpegDataCnt-i,bwr);//´®¿Ú´òÓ¡
    						}
    						else
    						{
    							testflag = 1; //³É¹¦ÒÔºó¾Í²»±£´æͼƬÁË
    						}						
    					}
    					f_close(f_jpg); //Îļþ²»¹Ø±Õ£¬ÓпÉÄÜ×îºóÎļþÀïµÄÊý¾Ý»¹ÊÇ¿ÕµÄ
    				}	
    			}
        #endif
    			//±£´æͼƬ½áÊø	
    			JpegDataCnt = 0;						//JPEG¼ÆÊýÆ÷ÇåÁã
    			EXTI->IMR |= EXTI_Line8;				//ʹÄܳ¡Í¬²½Öжϣ¬×¼±¸Ï´βɼ¯
    			EXTI->EMR |= EXTI_Line8;	
    			VsyncActive = 0;				//¿ªÊ¼ÏÂÒ»Ö¡Êý¾Ý²É¼¯				
    		}
    		//adc4 = (float)Get_Adc_Average(ADC_CH4,5)*(3.3/4096); 
    		//adc5 = (float)Get_Adc_Average(ADC_CH5,5)*(3.3/4096); 
        #endif
    		{
            if((ret =rw_sysDriverLoop()) != RW_OK)
    				{
                DPRINTF("rw_sysDriverLoop error =%d\r\n", ret);
            }
            if (app_demo_ctx.rw_connect_status == STATUS_OK && app_demo_ctx.rw_ipquery_status 
        == STATUS_OK) 
    				{
    					RAK_TcpServer_EventHandle();
        //          RAK_TcpClient_EventHandle();
        //          RAK_UdpServer_EventHandle();
        //          RAK_UdpClient_EventHandle();
            }else if (app_demo_ctx.rw_connect_status == STATUS_FAIL || 
        app_demo_ctx.rw_ipquery_status == STATUS_FAIL) 
    				{
              DPRINTF("reconnect and ipquery...\r\n");
              rw_appdemo_context_init();   
              rw_sysDriverReset();
              rw_network_init(&conn, DHCP_CLIENT, NULL);
                }
             }
           }
         }


  • @xc.c 我把源代码粘贴在上面了,我设置断点的情况来看,代码是等rw_network_startAP 执行完成以后 最后才断点到rw_sysDriverLoop 这个函数的。 STM32芯片 函数 调用不是顺序调用的吗?



  • 你跑通过示例代码吗?示例代码建AP可以吗?



  • @xc.c 这个还没有试,demo 工程 keil 打开报错,找不到对应的芯片,就直接移植的
    0_1493802943748_upload-60e7b1de-bee6-436a-b618-3bbc7ef490e2
    0_1493802968104_upload-4de496f6-3ff8-45ec-8f03-19dd193fd746



  • 你没移植完全,请检查移植是否成功。


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待