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

发布者:RadiantJourney最新更新时间:2015-10-08 来源: eefocus关键字:STM32  GPRS  服务器  TCP连接 手机看文章 扫描二维码
随时随地手机看文章
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连接 引用地址:STM32通过GPRS与服务器建立TCP连接

上一篇:fatfs文件系统移植到STM32F10x
下一篇:意法半导体推出新款软件和评估板支持STM32L4系列

推荐阅读最新更新时间:2024-03-16 14:34

STM32单片机(1) 总记 学习资料+参考手册+LED灯
学习资料 视频教程 李想stm32视频教程49集 http://pan.baidu.com/s/1kTyt03P 原子教你玩STM32 http://pan.baidu.com/s/1gd25r6F 刘洋STM32(好) http://pan.baidu.com/s/1mgkeNsG http://www.iqiyi.com/u/1005856393 http://yun.baidu.com/share/home?uk=2853967793 http://www.zxkjmcu.com/ 参考文档 STM32的函数说明(中文).pdf http://download.csdn.net/detail/ley
[单片机]
STM32的CAN总线调试
这一周调试STM32的CAN,从网上搜集了一些资料,感谢原作的无私奉献。 重点说明几个问题: 1、CAN的过滤器 对于过滤器,看中文手册上写的不是太清楚,STM32共有14组过滤器,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。对于过滤器组,可以将其配置成屏蔽位模式,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。过滤器组还可以被配置成标识符列表
[单片机]
stm32之滴答定时器(3):滴答定时器的初始化设置
所谓初始化呢,实际就是对于定时器的参数的设置,这里实际只有一个函数,SysTick_Config,这个函数如下 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SysTick_LOAD_RELOAD_Msk) return (1); SysTick- LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; NVIC_SetPriority (SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1);
[单片机]
串行通讯到以太网多路转换的实现
1 引言   某装置有4台光导液位二次表,根据工艺要求,需要把二次表显示改造为DCS监视。光导液位二次表只能输出RS-485的串行信号,监视操作站要求能同时进行监视。因此本系统的技术实质是实现多路串行通讯到多路以太网通讯的转换。 2 设计方案 2.1 简单方案   串行通讯(无论是RS-232还是RS-485)只是点对点的通讯,因此可以将4台光导液位二次表接入一台操作服务器上,另三台操作客户机从操作服务器取数据。这样就能满足上述要求,如图1所示。   图1 服务器-客户机模式方案结构示意   但是,出于安全性考虑,操作服务器明显成为系统的瓶颈,一旦出现服务器故障将造成系统瘫痪,这是工艺不能允许的。因此,
[网络通信]
stm32所有I/O和控制引脚的电流能力
疑问 :所有I/O和控制引脚上的总注入电流(4) ±25 照这句话 理解如果点个 10mA的光耦 那只能点 2只半了??那这个电流也太小了点吧? 答案:在注2中给出了注入电流的定义:当VIN VDD时,有一个正向注入电流;当VIN VSS时,有一个反向注入电流。 从这个定义可以看出,注入电流与正常的输出电流和正常的入地的吸收(Sink)电流是不同的。注入电流是当VIN VDD时或当VIN VSS时才会出现,而正常的时候是不会有注入电流的。 正常的输出电流和正常的入地的吸收(Sink)电流的极限值分别是:I VDD 和I VSS ,它们分别有150mA。 请注意,这个表里的参数是极限值,即如果任何一个参数超过了这里列
[单片机]
<font color='red'>stm32</font>所有I/O和控制引脚的电流能力
这样学习STM32单片机,从菜鸟到牛人很简单!
我想说,为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习stm32呢?应该如何零基础学习电子产品设计呢? 这本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。 你要考虑的是, 我可以用STM32实现什么?创客学院带你走进stm32世界 为什么使用STM32而不是8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?是51的内存太小而你要存储的东西太多? 当你需要使用STM32某些功能,而51实现不了的时候, 那STM3
[单片机]
关于STM32函数定义
1.*(__IO uint8_t *) CIR_BYTE3_ADDRESS #define __IO volatile /*! Defines 'read / write' permissions 声明 volatile ,目的:使编译器不优化该变量。从相应变量内存中取数。 /* Check the parameters */ assert_param(IS_TIM_ALL_PERIPH(TIMx)); //assert _param函数作参数检查用 2. static: static局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别: 1)位
[单片机]
如何用外设复位修改只读寄存器
有STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC[7:0]和TEC[7:0]两个字段来体现,CAN硬件会根据错误数据大小做适当响应或处理。 根据寄存器描述得知,TEC[7:0]和REC[7:0]的值在这个寄存器里面是只读的。而此时的STM32用户有个强烈的需求,就是期望能适时地对这两个出错记录字段做清零。他自己也尝试编写一些代码想让二者清零,均以失败告终,便邮件咨询有无解决办法。 我们在阅读CAN_ESR寄存器内容时倒有个发现,即该寄存器的复位值是0x00000000。 也就是说
[单片机]
如何用外设复位修改只读寄存器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved