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