SIM800发送数据 AT+CIPSEND ERROR

本文探讨了使用SIM800模块时遇到的问题:开机发送数据时出现ERROR及宕机现象。分析了可能的原因,并通过调整发送间隔和确保每次发送前断开连接来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求开机发送三次数据,发现当发送间隔为200ms时,会出现ERROR情况,出现宕机情况。

开始以为原因是,因为发送数据的返回处理要有一定时间,发送过快时,上一步的数据没有处理完,将延迟由200ms改为500ms解决问题。但是后来还是会发生ERROR的情况。

判断应该是上次尚处于连接状态,导致发送出现问题,每次上电前首先断开连接,有

AT+CIPCLOSE

发送数据函数,这个函数时基于SIM800已经连接上对应的IP和端口

extern unsigned char heartbeat_en;
/******************************************************************
发送数据函数,在SIIM800已经连接网络后,通过该函数发送数据。
1.首先确认需要发送的11个数据,然后对数据进行加密
2.发送数据
入参:	command 需要发送的指令
出参:	无
******************************************************************/
void SIM800SendData(unsigned char command)
{
	unsigned char i;
	char stopbit[1]={0x1A};
	unsigned short temp_crc = 0; 
	
	original_data[7] = command;						//指令码由入参决定
	original_data[8] = (TIM2->CNT)%256;		//使用定时器2产生的随机数来作为发送的随机码
	
	for(i = 0;i < 9;i++)
	{
		temp_crc += original_data[i];
	}
	
	original_data[9] = (unsigned char)(temp_crc>>8);	//累加和的高位
	original_data[10] = (unsigned char)(temp_crc);			//累加和的低位
	
	//上面11位原始数据均已确认,下面进行加密操作
	DataEncrypt(); 	
	UsartPrintf(USART2, "\r\nAT+CIPSEND\r\n");	//发送数据
	DelayMs(100);
	
	
	UsartPrintf(USART2, send_data);		//发送加密后的数据
	UsartPrintf(USART2, stopbit);				//结束码
	heartbeat_en = 0;
}

下面为函数的使用

SIM800SendData(0x07);		//开机发送三次
DelayXms(500);
SIM800SendData(0x07);		//开机发送三次
DelayXms(500);
SIM800SendData(0x07);		//开机发送三次
DelayXms(500);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值