SIM800发送数据 AT+CIPSEND ERROR

要求开机发送三次数据,发现当发送间隔为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);

你可能感兴趣的:(项目调试,PIC单片机学习)