新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2018-7-22
- 在线时间
- 5 小时
|
10金钱
谢谢各位前辈点进来,先谢过各位前辈了。我最近在参加学校的电赛,需要用到STM32和ESP8266模块之间做通信,我用的是咱们正点原子的战舰V3和ATK-8266,程序也是按照标准历程改的,只保留了wifi透传的功能。
这是配置wifi透传部分的代码:
#include "common.h"
#include "stdlib.h"
u8 atk_8266_wifista_test(void)
{
u16 rlen=0;
u8 *p;
atk_8266_send_cmd("AT+CWMODE=1","OK",50); //设置WIFI STA模式
atk_8266_send_cmd("AT+RST","OK",20); //DHCP服务器关闭(仅AP模式有效)
delay_ms(1000); //延时3S等待重启成功
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
//设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由器设置进行修改!!
sprintf((char*)p,"AT+CWJAP_CUR=\"%s\",\"%s\"",wifista_ssid,wifista_password);//设置无线参数:ssid,密码
while(atk_8266_send_cmd(p,"WIFI GOT IP",300)); //连接目标路由器,并且获得IP
delay_ms(1000);
atk_8266_send_cmd("AT+CIPMUX=0","OK",20); //0:单连接,1:多连接
delay_ms(1000);
sprintf((char*)p,"AT+CIPSTART=\"UDP\",\"192.168.43.1\",8087"); //配置目标TCP服务器
while(atk_8266_send_cmd(p,"OK",200));
delay_ms(1000);
atk_8266_send_cmd("AT+CIPMODE=1","OK",200); //传输模式为:透传
delay_ms(1000);
USART3_RX_STA=0;
atk_8266_quit_trans();
delay_ms(1000);
sprintf((char*)p,"ATK-8266测试\r\n");//测试数据
atk_8266_send_cmd("AT+CIPSEND","OK",20); //开始透传
u3_printf("%s",p);
delay_ms(1000);
while(1)
{
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
rlen=USART3_RX_STA&0X7FFF; //得到本次接收到的数据长度
USART3_RX_BUF[rlen]=0; //添加结束符
printf("%s",USART3_RX_BUF); //发送到串口
USART3_RX_STA=0;
}
atk_8266_at_response(1);
}
}
这个是模块调用函数:
void atk_8266_test(void)
{
while(atk_8266_send_cmd("AT","OK",20))//检查WIFI模块是否在线
{
atk_8266_quit_trans();//退出透传
atk_8266_send_cmd("AT+CIPMODE=0","OK",200); //关闭透传模式
delay_ms(800);
}
while(atk_8266_send_cmd("ATE0","OK",20));//关闭回显
while(1)
{
delay_ms(10);
atk_8266_at_response(1);//检查ATK-ESP8266模块发送过来的数据,及时上传给电脑
atk_8266_wifista_test();//WIFI STA测试
}
}
这个是主函数:
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
usart3_init(115200); //初始化串口3
delay_ms(1500);
atk_8266_test(); //进入ATK_ESP8266测试
}
上面的代码都是根据标准历程改的,数据收发的函数都没有动,问题就在于,如果修改上面那段加粗的代码,或者是删掉,即时是放在主函数里循环都会导致,模块停在连接路由器那一段,不能往下进行。
这是保留加粗代码的电脑串口信息,能够正常通信。
这是注释掉加粗代码while循环里的函数之后,代码的信息,串口信息就停在这了。
想了好些天都没有找出问题,希望各位前辈能帮帮忙~( TロT)σ。
|
|