你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

請問 ESP8266 , ESP8266_ReceiveString()在 main 裡 , 無法正常收data?

[复制链接]
jeffhe1 提问时间:2018-11-5 18:07 /
我是使用霸道者 STM32F103ZET6 , 火哥的 wifi 透傳 demo code 修改, esp8266 當 STA , PC 當 server , PC送 data 給 ESP8266 接收,
但在 main() 調用 ESP8266_ReceiveString() ,無法正常接收資料 , 但在 ESP8266_ReceiveString() , 可以看到正常收到的 data  , 不知道有哪位大神 可以幫忙解答一下 , 真的跪求 ,感恩不盡 > . < !


char *test;


test = ESP8266_ReceiveString(0);


   macPC_Usart ( "test=%s\n", test );





main()

main()

ESP8266_ReceiveString()

ESP8266_ReceiveString()
收藏 评论15 发布时间:2018-11-5 18:07

举报

15个回答
踏平幼稚园 回答时间:2018-11-6 09:37:00
pRecStr赋值判断是不是写错了,函数里走的是else分支但其中没有对pRecStr幅值,main函数里返回的是空指针







jeffhe1 回答时间:2018-11-6 09:55:55
本帖最后由 jeffhe1 于 2018-11-6 09:57 编辑
踏平幼稚园 发表于 2018-11-6 09:37
pRecStr赋值判断是不是写错了,函数里走的是else分支但其中没有对pRecStr幅值,main函数里返回的是空指针

...

那個是由 server 發 data 給 esp8266 wifi module, 再給 STM32 uart , 根據模式 ,放進 strEsp8266_Fram_Record .Data_RX_BUF , 然後再指定 給 pRecStr  (pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;)
應該沒有錯且再函式裡 , data 都可正確打印出來
踏平幼稚园 回答时间:2018-11-6 18:13:26
本帖最后由 踏平幼稚园 于 2018-11-6 18:17 编辑
jeffhe1 发表于 2018-11-6 09:55
那個是由 server 發 data 給 esp8266 wifi module, 再給 STM32 uart , 根據模式 ,放進 strEsp8266_Fram_Re ...

第一张图   pRecStr = strEsp8266_Fram_Record .Data_RX_BUF是 if 判断为真才会执行,之所以第一张图能显示串口信息是走了else分支。

楼主自己看看第一张图里的代码
{
    char* pRecStr  = 0;
    if(真)
    {
        //程序根本没走到这
        pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
    }
    else
    {
        //程序走的这里
        print("...");  //所以这里调用print能打印
    }
    return pRecStr; //由于if为假,pRecStr没有赋值还是NULL;
}


你试试把上面的"return pRecStr;"改成"return strEsp8266_Fram_Record .Data_RX_BUF;",main函数里肯定能打印









评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

jeffhe1 回答时间:2018-11-7 08:42:48
踏平幼稚园 发表于 2018-11-6 18:13
第一张图   pRecStr = strEsp8266_Fram_Record .Data_RX_BUF是 if 判断为真才会执行,之所以第一张图能显 ...

樓友抱歉 , 你看到的是我 debug 時 , 故意 mark 掉的 , 實際函式如下 , 無論 if () 是或否 , 都會有值填入 pRecStr , 只是在 main () 裡呼叫 , 就不會有正確的 data

/*
* 函数名:ESP8266_ReceiveString
* 描述  :WF-ESP8266模块接收字符串
* 输入  :enumEnUnvarnishTx,声明是否已使能了透传模式
* 返回  : 接收到的字符串首地址
* 调用  :被外部调用
*/
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
        char * pRecStr = 0;
       
       
        strEsp8266_Fram_Record .InfBit .FramLength = 0;
        strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
       
        while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
       
        if ( enumEnUnvarnishTx )
                pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
       
        else
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
                        pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;

        }

        return pRecStr;
       
}
hu9977 回答时间:2018-11-7 09:22:36
这个数应该是通过串口中断接受的,先看看串口有没有收到数据

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

jeffhe1 回答时间:2018-11-7 09:26:14
hu9977 发表于 2018-11-7 09:22
这个数应该是通过串口中断接受的,先看看串口有没有收到数据

有的, 我在函式裡 , 是可以打印出正確的 data
hu9977 回答时间:2018-11-7 09:38:37
jeffhe1 发表于 2018-11-7 09:26
有的, 我在函式裡 , 是可以打印出正確的 data

那应该问题不大。仔细检查打印是否执行,打印的buf是否有数据

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

踏平幼稚园 回答时间:2018-11-7 09:51:05
jeffhe1 发表于 2018-11-7 08:42
樓友抱歉 , 你看到的是我 debug 時 , 故意 mark 掉的 , 實際函式如下 , 無論 if () 是或否 , 都會有值 ...

if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
还是判断啊,判断逻辑假,依然不会赋值。建议楼主编译选项设置成none,然后下断点看看pRecStr赋值有没有走到吧。
jeffhe1 回答时间:2018-11-7 11:21:52
hu9977 发表于 2018-11-7 09:38
那应该问题不大。仔细检查打印是否执行,打印的buf是否有数据

函式裡有打印出來正確值 , 到main() 裡 打印出來是亂碼
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版