×
单片机 > 单片机程序设计 > 详情

STM32通过GPRS与服务器建立TCP连接

发布时间:2020-05-22 发布时间:
|
u16 USART3_CGREG_Cnt;

u8 USART3_Task_Cnt;

//task_GPRS为GPRS处理任务,每50ms~200ms调用一次

void task_GPRS()
{
  switch(USART3_Task_Cnt)
  {
    case 0:
//       SendUartStr("case0 ",1);
      if(GprsState.bits.Timeout == true)
      {
        GprsState.Flag =0x00000000;
        {
          GPIO_InitTypeDef GPIO_InitStructure;
          
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOC, &GPIO_InitStructure);
          //GPIO_SetBits(GPIOC, GPIO_Pin_9);
          GPIO_ResetBits(GPIOC, GPIO_Pin_9);
          SetGprsTime(3000);
          USART3_Task_Cnt = 1;
        }
      }
      break;
    case 1:
//       SendUartStr("case1 ",1);
      if(GprsState.bits.Timeout == true)
      {
        GPIO_InitTypeDef GPIO_InitStructure;
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
        //GPIO_ResetBits(GPIOC, GPIO_Pin_9);
        SetGprsTime(1000);
        USART3_Task_Cnt = 2;
      }
      break;
    case 2:
//       SendUartStr("case2 ",1);
      if(GprsState.bits.Timeout == true)
      {
        GPIO_InitTypeDef GPIO_InitStructure;
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_SetBits(GPIOC, GPIO_Pin_8);
        //GPIO_ResetBits(GPIOC, GPIO_Pin_8);
        SetGprsTime(50);
        USART3_Task_Cnt = 3;
      }
      break;
    case 3:
//       SendUartStr("case3 ",1);
      if(GprsState.bits.Timeout == true)
      {
        GPIO_InitTypeDef GPIO_InitStructure;
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        //GPIO_SetBits(GPIOC, GPIO_Pin_8);
        GPIO_ResetBits(GPIOC, GPIO_Pin_8);
        SetGprsTime(3000);
        USART3_Task_Cnt = 4;
      }
      break;
    case 4:
      if(GprsState.bits.Timeout == true)
      {
//         SendUartStr("AT+IPR=9600 ",3);
//         Delay(500);
        SendUartStr("AT+CREG=1 ",3);
        USART3_Task_Cnt = 5;
        SetGprsTime(4000);
      }
      break;
    case 5:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT+CGREG=1 ",3);
//         USART3_Task_Cnt = 6;
        USART3_Task_Cnt = 7;
        USART3_CGREG_Cnt = 4000;
        SetGprsTime(1000);
      }
        break;
    case 6:
//       if(GprsState.bits.Timeout == true)
//       {
//         SendUartStr("AT+CREG? ",3);
//         SendUartStr("AT+CGREG=1 ",3);
//         SendUartStr("AT+CGREG? ",3);
//         if(GprsState.bits.AT_CGREG_OK == true)
//         {
//           USART3_Task_Cnt = 7;
//           SetGprsTime(5000);
//         }
//         else
//         {
//           USART3_CGREG_Cnt--;
//           if(USART3_CGREG_Cnt == 0)
//           {
//             USART3_Task_Cnt = 0;
//           }
//         }
//       }
      USART3_Task_Cnt = 7;
      break;
    case 7:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SICS=0,conType,GPRS0 ",3);
        USART3_Task_Cnt = 8;
        SetGprsTime(100);
      }
      break;
    case 8:
      if(GprsState.bits.Timeout == true)
      {
//         SendUartStr("AT^SICS=0,user,gprs ",3);
        USART3_Task_Cnt = 9;
        SetGprsTime(100);
      }
      break;
    case 9:
      if(GprsState.bits.Timeout == true)
      {
//         SendUartStr("AT^SICS=0,passwd,gprs ",3);
        USART3_Task_Cnt = 10;
        SetGprsTime(100);
      }
      break;
    case 10:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SICS=0,apn,"cmnet" ",3);
        USART3_Task_Cnt = 11;
        SetGprsTime(100);
      }
      break;
    case 11:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SISS=1,ConID,0 ",3);
        USART3_Task_Cnt = 12;
        SetGprsTime(100);
      }
      break;
    case 12:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SISS=1,srvType,socket ",3);
        USART3_Task_Cnt = 13;
        SetGprsTime(200);
      }
      break;
    case 13:
      if(GprsState.bits.Timeout == true)
      {
         SendUartStr("AT^SISS=1,address,"socktcp://118.244.164.188:7777" ",3);
        USART3_Task_Cnt = 14;
        SetGprsTime(600);
      }
      break;
    case 14:
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SISO=1 ",3);
        USART3_Task_Cnt = 15;
        SetGprsTime(5000);
        GprsState.bits.Connect_Send_OK = false;
      }
      break;   
    case 15:
      if(GprsState.bits.Connect_Send_OK == true)
      {
        GprsState.bits.Connect_Send_OK = false;
        USART3_Task_Cnt = 16;
        SendUartStr("Connect_OK! ",1);
      }
      if(GprsState.bits.Timeout == true)
      {
        SendUartStr("AT^SISC=1 ",3);
//         USART3_Task_Cnt = 0;
        USART3_Task_Cnt = 7;
        SetGprsTime(3000);
      }
      break;
    case 16:
//       SendUartStr("AT^SISW=1,12 ",3);
      if(GprsState.bits.Timeout == true)
      {
        if(GPRSDataBuf.WaitSend == !0)
        {
          SendUartStr("AT^SISW=1,",3);
          SendUartByte((GPRSDataBuf.length)/10+0x30,3);
          SendUartByte((GPRSDataBuf.length)+0x30,3);
          SendUartStr(" ",3);
          USART3_Task_Cnt = 17;
          SetGprsTime(50);
        }
      }
      break;      
    case 17:
      if(GprsState.bits.Timeout == true)
      {
        if(GPRSDataBuf.WaitSend == !0)
        {
          SendUartStr((char*)GPRSDataBuf.buf,3);
          SendUartStr(" ",3);
          USART3_Task_Cnt = 18;
          SetGprsTime(5000);
        }
             
      break;
    case 18:
      if(GprsState.bits.Timeout == true)
      {
//         USART3_Task_Cnt = 0;
        SendUartStr("AT^SISC=1 ",3);
        USART3_Task_Cnt = 7;
        SetGprsTime(1000);
      }
      if(GprsState.bits.Connect_Send_OK == true)
      {
        GprsState.bits.Connect_Send_OK = false;
        GPRSDataBuf.SendOK = !0;
        GPRSDataBuf.WaitSend = 0;
        USART3_Task_Cnt = 16;
        SetGprsTime(1000);                      //发送间隔时间
      }
      break;
    case 19:
      
      break;
    
    default:
      break;
  }
}

关键字:STM32  GPRS  服务器  TCP连接 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机的多路AD切换程序设计