GPRS底層驅動



char GPRS_LINK = 0; 
char gprs_send_id = 0;
uint16_t gprs_time = 5000;
 struct Config_Info GPRS_Cmd[]={
  "AT+CGATT?\r\n", "+CGATT: 1",50,\
  "AT+CIPMODE=0\r\n","OK",50,\
  "AT+CSTT=\"CMNET\"\r\n", "OK",25,\
  "AT+CIICR\r\n","OK",25,\
  "AT+CIFSR\r\n", ".", 25,\
  "AT+CIPSTART=\"UDP\",\"120.25.67.66\",\"9718\"\r\n","CONNECT",50
};


unsigned char send_gprs[200] = {0};


void Delay_MS(uint32_t nCount)
{
  TimingDelay = nCount;


  while(TimingDelay != 0)
  {
  }
}


void GPRS_INIT(void)
{
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
  GPIO_InitTypeDef GPIO_InitStructure;
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_0 | GPIO_Pin_2|GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   //複用模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //推輓
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;     //  內部上拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_SetBits(GPIOC, GPIO_Pin_9);
  GPIO_ResetBits(GPIOC, GPIO_Pin_9);
//  GPIO_SetBits(GPIOC, GPIO_Pin_9);
  


  
  GPIO_SetBits(GPIOC, GPIO_Pin_1);
  GPIO_ResetBits(GPIOC, GPIO_Pin_2);
  
  GPIO_ResetBits(GPIOC, GPIO_Pin_0);
  Delay_MS(1000);
  GPIO_SetBits(GPIOC, GPIO_Pin_0);
  
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB, GPIO_Pin_2);
 // GPIO_ResetBits(GPIOB, GPIO_Pin_2);
  
  
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOD, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOB, GPIO_Pin_2);     //485 EN
  
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA, GPIO_Pin_1);     //SD EN
  GPIO_SetBits(GPIOA, GPIO_Pin_11);    // RF EN
  GPIO_ResetBits(GPIOA, GPIO_Pin_8);   //3.3  EN
  
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOC, GPIO_Pin_6);   //5V  EN
  
 
 
  GPIO_SetBits(GPIOB, GPIO_Pin_2);     //485 EN
  GPIO_ResetBits(GPIOA, GPIO_Pin_11);    // RF EN


    
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOD, GPIO_Pin_2);     //M0
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_SetBits(GPIOC, GPIO_Pin_12);     //M1
}


void send_gprsData(unsigned char *ptmp,unsigned char len)
{
  unsigned char tmp[20] = "AT+CIPSEND=15\r\n";
  tmp[11] = len/10 + 48;
  tmp[12] = len%10 + 48;
//  sprintf(tmp,"AT+CIPSEND=%2d\r\n",len);
  USART_SEND(tmp,15,USART2);
  Delay_MS(50);
 
  USART_SEND(ptmp,len,USART2);
}


void GPRS_SEND(void)
{
  if(GPRS_LINK == 0)
  {
    gprs_time = GPRS_Cmd[gprs_send_id].time * 100;
    if(gprs_send_id == 6)
    {
      USART_SEND("ATE0\r\n",6,USART2);
    }
    else
      USART_SEND(GPRS_Cmd[gprs_send_id].command,strlen((const char *)GPRS_Cmd[gprs_send_id].command),USART2);
 //   gprs_send_id++;
  }
  else 
  {
//    gprs_time = 10000;
    gprs_data_send();
 //   send_gprsData("AT+CIPSTART=\"UDP\",\"120.25.67.66\",\"9718\"\r\n",16);
  }
}


void GPRS_READ(unsigned char *usart2_dat,unsigned char len)
{
  if(GPRS_LINK == 0)
  {
    if(gprs_send_id == 6)
    {
      gprs_send_id = 0;
      GPRS_LINK = 1;
    }
    else if(strstr((const char *)usart2_dat, (const char *)GPRS_Cmd[gprs_send_id].retComd))
    {
      gprs_send_id++;
    }
  }
  else
  {
    
  }
  usart_clea(usart2_dat,len);


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章