【单片机开发】ESP8266模块死机的解决方案

(一)背景介绍

ESP8266是现在嵌入式领域中非常常用的WIFI模块,它的优点在于它便宜,皮实耐用。但是它也有它自身的缺陷。笔者实验发现,在ESP8266传输过程中有很大的概率会死机。这取决于接收设备的传输速度,因为串口的速度是非常快的,而发送的速度可能无法匹配所以在大量数据传输时非常容易因为堵塞模块内部内存而导致死机的现象,这里的死机并不是指单片机死机,但其实也差不多,因为在做TCP主机的时候,发送的数据量时必须事先给定的,这个时候死机就必须进行复位。

(二)实现方式

那么怎么做复位呢,之前想的办法就是定时器复位,可是总是这样复位也不行,于是就从底层的代码下手,做了一个死机判断,给一个固定时间超过就复位。这里因为我的工程本身不强调实时性,复位对进程影响不大如果你的工程非常强调实时性,你可以拉一根复位线出来,通过高低电平去复位模块效果一样。

(三)软件实现

u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
	u8 res=0; 
	USART3_RX_STA=0;
	u3_printf("%s\r\n",cmd);	//发送命令
	if(ack&&waittime)		//需要等待应答
	{
		while(--waittime)	//等待倒计时
		{
			delay_ms(10);
           //在这里插入死机判断给复位信号

 
			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
			{
				if(atk_8266_check_cmd(ack))
				{
					printf("ack:%s\r\n",(u8*)ack);
					break;//得到有效数据 
				}
					USART3_RX_STA=0;
			} 
		}
		if(waittime==0)res=1; 
	}
	return res;
} 
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与光同程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值