OpenEdv-开源电子网

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

【求教!!】stm32+GPS数据使用wifi传输,esp8266发送命令出错

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-12
在线时间
2 小时
发表于 2019-5-13 16:36:15 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 练习簿 于 2019-5-13 16:36 编辑

所用的是*火wifi esp8266透传例程,在此基础上,参考DH11温湿度数据传输,将GPS数据通过wifi传输给PC,但是程序加入GPS功能后出现了以上一些问题,运行不到GPS数据读取解码和传输部分。程序的压缩包附在后面。


问题1:
在程序运行AT_test()时,判断 if( ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) return;语句中ESP8266_Cmd 返回值一致是0,请问是什么原因呢?

#include "bsp_esp8266.h"
#include "common.h"
#include <stdio.h>  
#include <string.h>  
#include <stdbool.h>
#include "bsp_SysTick.h"
#include "stm32f10x_it.h"

static void                   ESP8266_GPIO_Config                 ( void );
static void                   ESP8266_USART_Config                ( void );
static void                   ESP8266_USART_NVIC_Configuration    ( void );

struct  STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 };

/**
  * @brief  ESP8266初始化函数
  * @param  无
  * @retval 无
  */
void ESP8266_Init ( void )
{
ESP8266_GPIO_Config ();

ESP8266_USART_Config ();


macESP8266_RST_HIGH_LEVEL();
macESP8266_CH_DISABLE();


}

/**
  * @brief  初始化ESP8266用到的GPIO引脚
  * @param  无
  * @retval 无
  */
static void ESP8266_GPIO_Config ( void )
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;

/* 配置 CH_PD 引脚*/
macESP8266_CH_PD_APBxClock_FUN ( macESP8266_CH_PD_CLK, ENABLE );
              
GPIO_InitStructure.GPIO_Pin = macESP8266_CH_PD_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
   
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init ( macESP8266_CH_PD_PORT, & GPIO_InitStructure );  

/* 配置 RST 引脚*/
macESP8266_RST_APBxClock_FUN ( macESP8266_RST_CLK, ENABLE );
              
GPIO_InitStructure.GPIO_Pin = macESP8266_RST_PIN;
GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure );  

}

/**
  * @brief  初始化ESP8266用到的 USART
  * @param  无
  * @retval 无
  */
static void ESP8266_USART_Config ( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;


/* config USART clock */
macESP8266_USART_APBxClock_FUN ( macESP8266_USART_CLK, ENABLE );
macESP8266_USART_GPIO_APBxClock_FUN ( macESP8266_USART_GPIO_CLK, ENABLE );

/* USART GPIO config */
/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin =  macESP8266_USART_TX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(macESP8266_USART_TX_PORT, &GPIO_InitStructure);  
  
/* Configure USART Rx as input floating */
GPIO_InitStructure.GPIO_Pin = macESP8266_USART_RX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(macESP8266_USART_RX_PORT, &GPIO_InitStructure);

/* USART1 mode config */
USART_InitStructure.USART_BaudRate = macESP8266_USART_BAUD_RATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(macESP8266_USARTx, &USART_InitStructure);


/* 中断配置 */
USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); //使能串口接收中断
USART_ITConfig ( macESP8266_USARTx, USART_IT_IDLE, ENABLE ); //使能串口总线空闲中断  
ESP8266_USART_NVIC_Configuration ();


USART_Cmd(macESP8266_USARTx, ENABLE);


}

/**
  * @brief  配置 ESP8266 USART 的 NVIC 中断
  * @param  无
  * @retval 无
  */
static void ESP8266_USART_NVIC_Configuration ( void )
{
NVIC_InitTypeDef NVIC_InitStructure;


/* Configure the NVIC Preemption Priority Bits */  
NVIC_PriorityGroupConfig ( macNVIC_PriorityGroup_x );
/* Enable the USART2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = macESP8266_USART_IRQ;  
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}


/*
* 函数名:ESP8266_Cmd
* 描述  :对WF-ESP8266模块发送AT指令
* 输入  :cmd,待发送的指令
*         reply1,reply2,期待的响应,为NULL表不需响应,两者为或逻辑关系
*         waittime,等待响应的时间
* 返回  : 1,指令发送成功
*         0,指令发送失败
* 调用  :被外部调用
*/
bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u32 waittime )
{   
strEsp8266_Fram_Record .InfBit .FramLength = 0;               //从新开始接收新的数据包
macESP8266_Usart ( "%s\r\n", cmd );  //发送AT
if ( ( reply1 == 0 ) && ( reply2 == 0 ) )                      //不需要接收数据
  return true;
// Delay_ms ( waittime );                 //延时
// printf ( "\r\n6hereeeeeeeeeeeeeeeeeeee\r\n" );

strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]  = '\0';
//增加一个结束符(参考USART2中断)
macPC_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF );//利用USART1打印
  
if ( ( reply1 != 0 ) && ( reply2 != 0 ) )
  return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ||
       ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
else if ( reply1 != 0 )
{  printf ( "\r\n5hereeeeeeeeeeeeeeeeeeee\r\n" );
  return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ); //str(a,b),若a=b,reture 1
//  return 1;
}
else
{ printf ( "\r\n7hereeeeeeeeeeeeeeeeeeee\r\n" );
  return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
}
}

/*
* 函数名:ESP8266_AT_Test
* 描述  :对WF-ESP8266模块进行AT测试启动
* 输入  :无
* 返回  : 无
* 调用  :被外部调用
*/

void ESP8266_AT_Test ( void )
{
char count=0;
macESP8266_RST_HIGH_LEVEL();   
// Delay_ms ( 1000 );  
while ( count < 10 )
{  
  if( ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) return;
  printf ( "\r\n4hereeeeeeeeeeeeeeeeeeee\r\n" );
  ESP8266_Rst();
  ++ count;
}
}


问题2:
修改后的程序执行到delay()函数的时候,都会卡住(标红位置),原先的例程中没有这样的问题


3.LCD_U2 - GPS1.zip

9.27 MB, 下载次数: 32

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-5-14 01:55:04 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 21:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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