OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4066|回复: 4

ESP86266与GSM的融合过程中遇到的问题

[复制链接]

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-1-13
在线时间
8 小时
发表于 2016-1-10 22:27:08 | 显示全部楼层 |阅读模式
1金钱
同时使用USART1,USART2,USART3遇到的问题!!!!
简单介绍一下,最近我利用战舰板做一个试验,利用ESP8266接收数据,然后利用GSM的GPRS数据功能,把接收到的数据发送到服务器端;

我是直接利用ESP和GSM的寄存器板例程改的,单独试验两个例程时,工作都很正常;之后我把ESP的例程精简化,去掉了LCD,MALLOC,FATFS等,只留了启动WIFI—STA 服务器端模式的必要代码,测试了一下也是可行的。最后我把精简化后的ESP代码,移植到GSM的例程中,用的是《扩展实验5 ATK-SIM900A GSM模块测试实验 》,结果问题来了。。。。
ESP的通信串口3一直不能正常发送,所以ESP-WIFI 一直不能正常使用。因为整个试验中3个串口都使用到了,所以是不是使用3个串口的时候,有什么要注意的地方?
下面是我精简过的ATK-ESP WIFI-STA服务器端的代码。
[mw_shl_code=applescript,true]
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                            
#include "key.h"     
#include "usart3.h"
#include "common.h"

unsigned char KQFU[19]="AT+CIPSERVER=1,8086";
unsigned char test[9]="atk_sever";
int main(void)
{
        u8 ipbuf[16];         //IP»o′æ
        u8 i=5,j=0;
        u16 t=999;                //¼óËùμúò»′λñè¡á′½ó×′ì¬

        u16 rlen=0;
        u8 constate=0;        //ᬽó×′ì¬
        u8 key;
       
           Stm32_Clock_Init(9);        //Ïμí3ê±ÖóéèÖÃ
        delay_init(72);                        //Ñóê±3õê¼»ˉ
        uart_init(72,115200);         //′®¿ú13õê¼»ˉ
        usart3_init(36,115200);  //′®¿ú33õê¼»ˉ

        LED_Init();                 //LED3õê¼»ˉ        
        KEY_Init();                                //°′¼ü3õê¼»ˉ         
         
       
                         while(atk_8266_send_cmd("AT","OK",20))//¼ì2éWIFIÄ£¿éêÇ·ñÔúÏß
        {
                atk_8266_quit_trans();//íË3öí¸′«
                atk_8266_send_cmd("AT+CIPMODE=0","OK",200);  //1رÕí¸′«Ä£ê½               
                delay_ms(800);

        }
                while(atk_8266_send_cmd("ATE0","OK",20));//1رջØÏÔ
        delay_ms(10);
        atk_8266_at_response(1);//¼ì2éATK-ESP8266Ä£¿é·¢Ëí1yà′μÄêy¾Y,¼°ê±éÏ′«¸øμçÄÔ
       
        while(i--)
        {delay_ms(500);
                printf("test1\r\n");

}
//
        atk_8266_send_cmd("AT+CWMODE=1","OK",50);                //éèÖÃWIFI STAÄ£ê½
printf("STA j=%d\r\n",j);
//
        atk_8266_send_cmd("AT+RST","OK",20);                //DHCP·tÎñÆ÷1رÕ(½öAPÄ£ê½óDD§)
printf("RST j=%d\r\n",j);
//
        delay_ms(1000);         //Ñóê±3Sμè′yÖØÆô3é1|
        delay_ms(1000);
        delay_ms(1000);
//        delay_ms(1000);
//
        //éèÖÃᬽóμ½μÄWIFIíøÂçÃû3Æ/¼óÃü·½ê½/ÃüÂë,Õa¼¸¸ö2ÎêyDèòa¸ù¾YÄú×Ô¼oμÄ·óéÆ÷éèÖýøDDDT¸Ä!!
while(atk_8266_send_cmd("AT+CWJAP=\"715\",\"713meiyoumimama\"","WIFI GOT IP",300));                                        //ᬽóÄ¿±ê·óéÆ÷,2¢Çò»ñμÃIP
        printf("AT+CWJAP=715,713meiyoumimama\r\n");

        delay_ms(1000);
        //delay_ms(1000);
//
        j=atk_8266_send_cmd("AT+CIPMUX=1","OK",20);   //0£oμ¥ᬽó£¬1£o¶àᬽó
        printf("AT+CIPMUX  j=%d \r\n",j);
//¿aÆôServerÄ£ê½(0£¬1رÕ£»1£¬′ò¿a)£¬¶Ë¿úoÅÎaportnum
        delay_ms(1000);
        j=atk_8266_send_cmd("AT+CIPSERVER=1,8086","OK",100);   
  printf("AT+CIPSERVER  j=%d  \r\n",j);
//
atk_8266_get_wanip(ipbuf);
  printf(ipbuf);
                        printf("\r\n");

                        USART3_RX_STA=0;
                        while(1)
                        {
                                key=KEY_Scan(0);
                                if(key==WKUP_PRES)                        //WK_UP íË3ö2aêÔ                 
                                {
                                               
                                        atk_8266_quit_trans();        //íË3öí¸′«
                                        atk_8266_send_cmd("AT+CIPMODE=0","OK",20);   //1رÕí¸′«Ä£ê½
                                //        break;                                                                                                 
                                }
                                else if(key==KEY0_PRES)        //KEY0 ·¢Ëíêy¾Y
                                {
                                    //TCP Server
                                                atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200);  //·¢ËíÖ¸¶¨3¤¶èμÄêy¾Y
                                                delay_ms(200);
                                                atk_8266_send_data(test,"OK",100);  //·¢ËíÖ¸¶¨3¤¶èμÄêy¾Y
                               
                                        }
                                t++;
                                delay_ms(10);
                                if(USART3_RX_STA&0X8000)                //½óêÕμ½ò»′Îêy¾YáË
                                {
                                        rlen=USART3_RX_STA&0X7FFF;        //μÃμ½±¾′νóêÕμ½μÄêy¾Y3¤¶è
                                        USART3_RX_BUF[rlen]=0;                //ìí¼ó½áêø·û
                                        printf("%s",USART3_RX_BUF);        //·¢Ëíμ½′®¿ú   
                                         
                                        USART3_RX_STA=0;
                                }  
                                if(t==1000)//á¬Dø10ÃëÖóûóDêÕμ½èÎoÎêy¾Y,¼ì2éᬽóêÇ2»êÇ»1′æÔú.
                                {

                                        constate=atk_8266_consta_check();//μÃμ½á¬½ó×′ì¬
                                        if(constate=='+')printf("ᬽó3é1|\r\n");  //ᬽó×′ì¬
                                        else printf("ᬽó꧰ü\r\n");         
                                        t=0;
                                }
                                if((t%20)==0)LED0=!LED0;
                                atk_8266_at_response(1);
                        }
       

}
[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

找到问题了,触摸屏初始化过程中,用到了的I2C,共用了PB10、PB11,因而产生了冲突!将串口3端口部分重映射到PC10、PC11时即可。要注意的是,如果SD卡使用的是SDIO模式,PC10、PC11就不能用了,改用完全重映射,使用端口PD9,PD10。 ~~~~~~ 最后再分享一点ESP-GSM融合的经验,建议串口中断优先级的设置次序为串口3(ESP接收)>串口2(GSM)>串口1。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-1-13
在线时间
8 小时
 楼主| 发表于 2016-1-10 22:27:09 | 显示全部楼层
本帖最后由 dogwaves 于 2016-1-11 14:49 编辑

找到问题了,触摸屏初始化过程中,用到了的I2C,共用了PB10、PB11,因而产生了冲突!将串口3端口部分重映射到PC10、PC11时即可。要注意的是,如果SD卡使用的是SDIO模式,PC10、PC11就不能用了,改用完全重映射,使用端口PD9,PD10。
~~~~~~
最后再分享一点ESP-GSM融合的经验,建议串口中断优先级的设置次序为串口3(ESP接收)>串口2(GSM)>串口1。
回复

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-1-13
在线时间
8 小时
 楼主| 发表于 2016-1-10 22:32:54 | 显示全部楼层
本帖最后由 dogwaves 于 2016-1-10 22:36 编辑

下面是我整理过的ESP-GSM主程序。我用硬件仿真过,发现串口3不能正常发送数据,即这个函数u3_printf("%s\r\n",cmd)。最后程序在while(atk_8266_send_cmd("AT","OK",200))测试ESP硬件是否连接的这个地方就卡住了。

原子哥,能不能帮看一下,给点意见,在此拜谢~
回复

使用道具 举报

9

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2015-1-13
在线时间
8 小时
 楼主| 发表于 2016-1-10 22:33:16 | 显示全部楼层
本帖最后由 dogwaves 于 2016-1-10 22:34 编辑



#include "sys.h"
#include "usart.h"               
#include "delay.h"       
#include "led.h"            
#include "key.h"                  
#include "exti.h"                  
#include "wdg.h"          
#include "timer.h"                                   
#include "lcd.h"
#include "usmart.h"       
#include "rtc.h"                  
#include "wkup.h"       
#include "dma.h"          
#include "24cxx.h"          
#include "flash.h"          
#include "touch.h"          
#include "malloc.h"
#include "string.h"
#include "mmc_sd.h"
#include "ff.h"
#include "exfuns.h"            
#include "fontupd.h"
#include "text.h"               
#include "usart2.h"
#include "usart3.h"
#include "common.h"
#include "sim900a.h"


int main(void)
{
        u8 key,fontok=0,i=5;
           Stm32_Clock_Init(9);        //Ïμí3ê±ÖóéèÖÃ
        delay_init(72);                        //Ñóê±3õê¼»ˉ
        uart_init(72,115200);         //′®¿ú13õê¼»ˉ
        usart3_init(36,115200);  //′®¿ú33õê¼»ˉ
        LCD_Init();                                //3õê¼»ˉòo¾§
        LED_Init();                 //LED3õê¼»ˉ         
        KEY_Init();                                //°′¼ü3õê¼»ˉ         
        usmart_dev.init(72);        //usmart3õê¼»ˉ       
        USART2_Init(36,115200);        //3õê¼»ˉ′®¿ú2
        TP_Init();                                //3õê¼»ˉ′¥ÃtÆá
        mem_init(SRAMIN);                //3õê¼»ˉÄú2¿Äú′æ3Ø            
        exfuns_init();                        //ÎafatfsÏà1رäá¿éêÇëÄú′æ  
          f_mount(0,fs[0]);                 //1òÔØSD¿¨
        key=KEY_Scan(0);  
        if(key==KEY_RIGHT)                //Ç¿ÖÆD£×¼
        {
                LCD_Clear(WHITE);        //ÇåÆá
                TP_Adjust();                  //ÆáÄ»D£×¼
                TP_Save_Adjdata();          
                LCD_Clear(WHITE);        //ÇåÆá
        }
        fontok=font_init();                //¼ì2é×Ö¿aêÇ·ñOK
        if(fontok||key==KEY_DOWN)//Dèòa¸üDÂ×Ö¿a                                 
        {
                LCD_Clear(WHITE);                           //ÇåÆá
                POINT_COLOR=RED;                        //éèÖÃ×ÖìåÎaoìé«                                
                LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
                while(SD_Initialize())                //¼ì2aSD¿¨
                {
                        LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
                        delay_ms(200);
                        LCD_Fill(60,70,200+60,70+16,WHITE);
                        delay_ms(200);                    
                }                                                                                                                     
                LCD_ShowString(60,70,200,16,16,"SD Card OK");
                LCD_ShowString(60,90,200,16,16,"Font Updating...");
                key=update_font(20,110,16,0);//′óSD¿¨¸üDÂ
                while(key)//¸üDÂ꧰ü               
                {                                           
                        LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
                        delay_ms(200);
                        LCD_Fill(20,110,200+20,110+16,WHITE);
                        delay_ms(200);                       
                }                   
                LCD_ShowString(60,110,200,16,16,"Font Update Success!");
                delay_ms(1500);       
                LCD_Clear(WHITE);//ÇåÆá                        
        }  
        ///////////////// ESP 2aêÔ     //////////////////////
        LCD_ShowString(60,90,200,16,16,"WIFI Updating...");
        while(atk_8266_send_cmd("AT","OK",200))//¼ì2éWIFIÄ£¿éêÇ·ñÔúÏß
        {
                atk_8266_quit_trans();//íË3öí¸′«
                printf("wifi\r\n");
                atk_8266_send_cmd("AT+CIPMODE=0","OK",200);  //1رÕí¸′«Ä£ê½               
                delay_ms(800);

        }
                while(atk_8266_send_cmd("ATE0","OK",200));//1رջØÏÔ
        delay_ms(10);
atk_8266_at_response(1);//¼ì2éATK-ESP8266Ä£¿é·¢Ëí1yà′μÄêy¾Y,¼°ê±éÏ′«¸øμçÄÔ
       
        while(i--)
        {delay_ms(500);
                printf("test1\r\n");

}
/////////////////////////        ////////////////////////////////////
        sim900a_test();
}











回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-10 22:40:34 | 显示全部楼层
监控下串口3的数据,看看正常不.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 08:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表