SIM800发送数据 AT+CIPSEND ERROR

2019-04-15 12:18发布

要求开机发送三次数据,发现当发送间隔为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, " AT+CIPSEND "); //发送数据 DelayMs(100); UsartPrintf(USART2, send_data); //发送加密后的数据 UsartPrintf(USART2, stopbit); //结束码 heartbeat_en = 0; }下面为函数的使用SIM800SendData(0x07); //开机发送三次 DelayXms(500); SIM800SendData(0x07); //开机发送三次 DelayXms(500); SIM800SendData(0x07); //开机发送三次 DelayXms(500);