一、最近的项目中用到了GSM模块,总结一下,模块型号是SIM800C,mcu还是stm32rtc6。
1、首先了解一下专业术语
SIM–用户识别码
GPRS–General Packet Radio Service, 通用分组无线电业务。GPRS是一种新的GSM数据业务,它可以给移动用户提供无线分组数据接入服务。GPRS主要是在移动用户和远端的数据网络(如支持TCP/IP、X.25等网络)之间提供一种连接,从而给移动用户提供高速无线IP和无线X.25业务。
GSM–Pan-European digital cellular land mobile telecommunication system ,泛欧数字蜂窝移动通信系统。

*GPRS相关AT指令集
GPRS指令
AT+CGATT=1 //返回OK,附着网络
AT+CGACT=1,1 //激活网络,之后就可以使用tcpip的指令了
AT+CREG?=1 //查询模块是否注册成功
TCP/IP指令
AT+CIPSTART=“TCP”,“121.41.97.28”,60000 //连接TCPIP服务器
AT+CIPSEND=20 //返回>,就可以输入要发送的内容20表示有20个字节
AT+CIPCLOSE //关闭TCPIP连接
+CIPRCV:5,12345 //收到服务器返回的5个字节

多路TCP/IP连接指令
AT+CGDCONT=1,“IP”,“cmnet” //设置PDP参数
AT+CGACT=1,1 //激活PDP
AT+CIPSTATUS? //查询ip连接情况,共有8路,实际最多支持同时开4路tcpip连接
AT+CIPCLOSE //关闭该链路
AT+CIPMUX? //查询是否开启多连接
AT+CIPMUX=1 //开启多链接

AT+CGPADDR //显示PDP地址
ATD99**1# //请求GPRS服务

mcu通过串口发送相关AT指令控制sim模块
例子:
//拨号流程

USART2_Init_Config(115200);  //此模块使用的是串口2
if((UART2_SendString("AT+CREG?"));     //查询模块是否注册成功
UART2_SendString("ATD13017688718;\r\n")//电话号可修改

//接听电话流程

USART2_Init_Config(115200);  //此模块使用的是串口2
if((UART2_SendString("AT+CREG?"));     //查询模块是否注册成功
{//注册成功while(1){if(find("CRING"||find("RING")) //查询串口接收数组中是否有这两个指令{clear_buf();  //若有先清除串口接收缓存UART2_SendString("ATA\r\n");//接听来电指令}delay_ms(1000);//每秒轮询检查一次}
}

//接收发送短信语音等等也是同理,在此不做记录,项目中主要是用到了gprs,即通过ip地址进行数据传输。

首先总结下流程:
首先检查硬件 1、AT //检查串口模块 2、AT+CCID //检测是否插卡
硬件没问题了进行下面步骤(1到6步可以重复发送,直到成功为止 )
1、第一步:AT+CSQ 查询网络信号质量 //返回值越大,信号越好
2、第二步:AT+CREG? 查询网络注册情况//判断返回值的第二个参数,为1或5则注册成功
3、第三步:AT+CGATT? 查询模块是否附着 GPRS 网络
4、第四步:AT+CSTT 设置APN
5、第五步:AT+CIICR 激活移动场景
6、第六步:AT+CIPSTART=“TCP”,“183.235.86.3”,1234 建立TCP/IP连接 // 测试时广东珠海公网动态IP:183.235.86.3 //若是udp直接改下就行AT+CIPSTART=“UDP”,“183.235.86.3”,1234
注意:第六步如果连接不成功,需要关闭连接再发起连接,先发送 AT+CIPCLOSE。如果一直不成功,检查服务器端口是否打开,若打开了,可以选择io口复位。 如果前面的步骤也一直不成功,直接io复位最快
代码:

const char *string = "AT+CIPSTART=\"TCP\",\"14.125.48.205\",9015";//选择的是tcp
USART2_Init_Config(115200);  //此模块使用的是串口2
Second_AT_Command(u8 *cmd,u16 len,u8 *ack,u16 waittime);//这个函数封装了串口2发送指令及检查收到的数据
if((UART2_SendString("AT+CREG?"));     //查询模块是否注册成功
{//注册成功,连接服务器Connect_Server();
}void  Connect_Server(void)
{UART2_SendString("AT+CIPCLOSE=1"); //关闭连接Delay_ms(100);Second_AT_Command("AT+CIPSHUT","SHUT OK",2);  //关闭移动场景Second_AT_Command("AT+CGCLASS=\"B\"","OK",2);//设置GPRS移动台类别为B,支持包交换和数据交换 Second_AT_Command("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",2);//设置PDP上下文,互联网接协议,接入点等信息Second_AT_Command("AT+CGATT=1","OK",2);//附着GPRS业务Second_AT_Command("AT+CIPCSGP=1,\"CMNET\"","OK",2);//设置为GPRS连接模式Second_AT_Command("AT+CIPHEAD=1","OK",2);//设置接收数据显示IP头(方便判断数据来源,仅在单路连接有效)Second_AT_Command((char*)string,"OK",5);Delay_ms(100);clear_buf();
}

至此,gprs的驱动代码部分就算完成了,下面进行应用部分,收发函数及解析

u8 SIM800C_GPRS_SEND_DATA(u8 *temp_data,u16 size)
{  unsigned char Tx_Buf[32]="AT+CIPSEND=";To_STR(size,Tx_Buf+11);//将数字转换为字符串,用于计算发送的字符数if(Second_AT_Command(Tx_Buf,sizeof(Tx_Buf),(u8 *)">"))  return 1;//先发送长度帧指令if(Second_AT_Command(temp_data,size,(u8 *)"SEND OK")) return 2; //再发送datareturn 0;
}

注意:发送完GPRS长度帧后,返回字符’>’,接着发送数据帧,在模块返回"OK"之前,发送的数据都会被发送到服务器。即长度帧与数据帧要连着发,不能分开处理。

项目中一般发送数据后只要接收到ok状态码即可。在串口中断内还要判断是否有在线升级的指令,有的话还需要对数据包进行处理。此刻收集的传感器的数据包是停止发送的。

之后,在定时器中断内,每隔30秒发送一个数据包给后台。 //这个板作为数据中转用的,不光上传自己板上的数据,也上传其他板上的数据,与其他板间通信是通过cc2500模块实现的,下次总结。

void TIM3_IRQHandler(void)   //TIM3中断函数
{static unsigned int times=7200;if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查中断标志位{TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //   清除中断标志位
(times%30)==0){Second_AT_Command(heart_packet.buf,11);if(times >=7200){if(SIM800C_CHECK_TCP_LINK())//检查连接Soft_Reset;printf("TCP check ok!\r\n");times = 0;}}if((times%300)==0){TimeNow = RTC8563_ReadTime();if(TimeNow.day == 0)Soft_Reset;  //}elseRTC8563_ADD_NS(&TimeNow,1);times++;//printf("Time_Now:%.2x %.2x:%.2x:%.2x\r\n",TimeNow.day,TimeNow.hour,TimeNow.min,TimeNow.sec);}
}

gprs数据传输流程相关推荐

  1. PCIE学习笔记(二)PCIe总线的拓扑结构,协议层,数据传输流程

    目录 PCIe总线的拓扑结构 PCI Express协议分层 物理层(Physical Layer) 数据链路层(Link Layer) 处理层(Transaction Layer) 软件层(Soft ...

  2. 4G网络数据传输流程 四

    原文:微信公众号Wisdom365 上回书讲到4G网络物理层处理共11个步骤(Bob小编看一个小视频的背后发生了这么多事-),并且详细介绍第一部分:第一步到第五步,从传输块到码字的处理流程,重点是信道 ...

  3. 4G网络数据传输流程 三

    原文:微信公众号 Wisdom365 摘要:这是4G网络数据传输流程系列的第三课,上一课讲了资源调度,备好粮草,这一课我们集结兵马,趟一趟物理层处理流程.先讲从传输块TB到码字(CW,Code Wor ...

  4. 4G网络数据传输流程 一

    原文:微信公众号 Wisdom365 生命不息,提速不止.4G时代,百兆.双百兆.300兆速率的广告比比皆是,现在1Gbps也要来了.本系列5篇文章将围绕4G速率做系统介绍,包括数据传输流程.终端等级 ...

  5. 4G网络数据传输流程 二

    原文:微信公众号 Wisdom365 摘要:兵马未动,粮草先行.要在4G网络下传小视频得有资源呀,资源怎么分配?作为<4G网络数据传输系列>第二篇文章,本文将介绍下行和上行的资源调度过程. ...

  6. 网络基础和网络设备传输流程(广域网数据传输流程)

    目录 一.IP网络基础 1.IP地址和MAC地址 [1]IP地址 [2]MAC地址 [3]一跳一跳的网络数据传输 [4]IP地址和MAC地址的区别 2.子网掩码 3.网络设备及相关技术 [1]集线器: ...

  7. 简析 Binder 数据传输流程

    本文是一篇流程解析,而非源码解析,虽然文章中包含对源码的解读,但源码中的细节基本已经砍光,仅保留主要部分. 所有源码来源于文章发布时间近期 AOSP 的 master 分支. 聊到 Android 中 ...

  8. android gps时间格式,android gps 数据传输流程

    Android GPS数据流程分析 概述: 该文档将介绍android GPS数据流程分析,在debug的时候可以做为数据流的捕捉的参考. ============================== ...

  9. 数据传输流程和socket简单操作

    一.***C/S架构:客户端(client)/服务端(server)架构, B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构:浏览器,qq,微信,陌陌等等硬件cs架构 ...

  10. 和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/7921846 对于SPI的一些结构体都有所了解之后呢,那么再去瞧瞧SPI的那些长见的操作 ...

最新文章

  1. 操作VR界面仅需眼神,Eyefluence眼控技术解放你的双手
  2. mount查看linux分区大小,Linux磁盘管理----分区格式化挂载fdisk、mkfs、mount
  3. Dubbo-go 发布 1.5 版,朝云原生迈出关键一步
  4. linux为什么要交换内存,Linux系统中交换内存是什么?
  5. 面试被问进线程的区别
  6. mqtt等待来自服务器响应超时,等待来自服务器的响应时超时 (32000) at org.eclipse.paho.client.mqttv3.interna...
  7. Rust: Lifetime小心要你命!
  8. 51单片机c语言秒表,51单片机秒表C程序
  9. 机器学习导论——关于数据集的概念
  10. Python Matplotlib设置坐标轴范围,以及旋转轴标签(xtickslabels)
  11. 使用POI给word文档加水印
  12. 如何安装虚拟机———一台电脑,多个系统体验
  13. mysqlOracle导入导出txt格式的数据
  14. 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法...
  15. crs 与RAC是什么关系,如何区分
  16. Mission Planner初学者安装调试教程指南(APM或PIX飞控)3——连接与烧录
  17. 基于51单片机的脉搏测量仪
  18. Scrum 敏捷开发 基础考试
  19. 政府网站群适老化与无障碍改造
  20. iOS学习之如何正确配置——PCH文件

热门文章

  1. SAP BAPI_EXCHANGERATE_GETDETAIL计算货币转换汇率
  2. 史上超级详细:银行外包java面试题目
  3. 从一坨「便便」说起,大V亲测iPhone X为什么这么贵!
  4. lightdm .service: Start request repeated too quickly. grub正常,不显示登录和桌面 Endeavour
  5. Apifiny任命FBI前高管Timothy Murphy为董事会成员,帮助公司完成上市计划
  6. ajax发送put请求参数,请求参数和PUT方法(Request params and PUT method)
  7. python:网络爬虫之遍历单个域名获取电影名称及年份
  8. MySQL 常见的 9 种优化方法
  9. ARM开发(二)ARM体系结构——ARM,数据和指令类型,处理器工作模式,寄存器,状态寄存器,流水线,指令集,汇编小练习题
  10. < abbr >标签 缩写