当前位置:首页 > 单片机 > 单片机
[导读] 函数清单和注意事项(底层驱动部分)1. IO口初始化:控制 IO 和通讯 IO,控制包括电源控制,复位和低功耗模式,通讯就是串口啦,相信大家应该都很熟悉了。 当然在这个基础上还可以组合出复位

函数清单和注意事项

(底层驱动部分)

1. IO口初始化:控制 IO 和通讯 IO,控制包括电源控制,复位和低功耗模式,通讯就是串口啦,相信大家应该都很熟悉了。

当然在这个基础上还可以组合出复位的功能,复位在GPRS连接出错的时候会用到。

2. 串口初始化:模块的波特率为115200,8位数据位,1位停止位,没有校验位和流控。

串口还需要两个发送函数,发送一个字节和发送一串字符串的。串口中断处理函数放到后面说。

3. AT指令操作:发送AT指令

设置GPRS数据长度

发送GPRS数据内容

接收GPRS数据内容

AT指令/GPRS数据解析

4. 串口中断函数:包含AT指令/GPRS数据解析 和接收GPRS数据内容,判断AT指令是否发送成功。

AT指令返回的结束符除了设置GPRS数据长度的是'>',其他都是"rn"。但是在判断接收结束的时候不能只考虑这两种情况,还有一个情况需要特殊处理,那就是当接收到GPRS数据的时候,完全有可能会出现'r','n'对应的十六进制数。解决的办法就是在接收到"+CIPRCV:xxx,"的时候,附带判断接收到的数据长度,"xxx"代表的是GPRS数据长度信息,字符型格式,在这里还需要做一个格式转换。数据长度的位数根据字符','来进行判断,',' 将AT命令和GPRS数据进行分割。"xxx"换算过来的数值决定了 ',' 后面接收到的数据长度。

由于目前采用的SIM卡模块内部没有自带缓冲区,在GPRS数据接收的时候,需要另外开辟一个存储空间用于数据的临时存储,建议采用环形缓冲区Buffer, 将串口接收到的数据按顺序存储,这个部分在串口中断函数里面实现。在大循环里面将数据取出处理,并设置相关标志位。我一开始设计的时候只开辟了一个非环形的缓冲区,每次接收到完整的数据,会从缓冲区的0地址重新开始存储,那么就会导致未及时处理的数据被新的数据冲掉。 不知道有没有别家的SIM卡模块是自带缓冲区的。


(主循环部分)

1. TCP/IP连接流程控制:

step1、"ATrn"//检测模块串口工作

step2、"AT+CCIDrn"//检查是否插卡

step3、"AT+CREG?rn"//检查网络注册情况

step4、"AT+CGATT=1rn"//附着网络

step5、"AT+CGDCONT=1,"IP","CMNET"rn"//设置PDP参数

step6、"AT+CGACT=1,1rn"//激活网络

step7、"AT+CIPSTART="TCP","121.41.xxx.xxx",portrn"//连接TCPIP服务器

我用的这个模块硬件初始化差不多就要10秒了,在硬件初始化完成后,按照以上七步进行服务器连接,测试下来,连接的成功率还是蛮高的。前面两步是硬件检测用的,如果这两步都测不过,那就需要检查下硬件是否完整。三到六步如果返回ERROR,可重复发送,直至返回OK,每一步之间可间隔数秒。最后一步如果失败,需先关闭连接,再重新发起连接。如果第七步一直连接不成功,那么可以通过控制 IO 复位模块,当然也可以先确认下你的服务器的端口是否打开。

我的经验是连接和通讯的过程中,如果出现错误的情况,复位模块是最有效和快捷的方式。在确认硬件连接正常的情况下,如果多次发送命令失败,返回ERROR的话,那你还是乖乖的复位它吧。

另外两个AT命令也很好用

"AT+CIPCLOSErn"//关闭TCPIP连接

"ATE0rn"//关闭回显,关闭自己发给模块的串口数据,调试的时候可以不开启这个功能,方便观察


2. 数据链路层数据处理:实现GPRS数据接收/发送控制,存储串口中断接收到的数据,发送GPRS数据长度和GPRS数据内容。

这个函数里面需要注意的是发送GPRS长度和数据的操作,需要在一次操作流程里面完成。我一开始脑残的将GPRS数据长度和数据发送分开处理,导致设置完数据长度后,发送状态处于准备好的状态,此时只要检测到有数据是需要发送的,便会通过GPRS发送出去,而无法保证是当前数据长度对应的数据帧(我在这里一共开辟了8个数据缓存,但是没有对发送状态进行分开判断)。在设置完数据长度后,需要判断是否接收到字符'>',大概需要50毫秒的时间。一开始分开发送也是和这个'>'字符的操作有关的,我已经帮大家试过了,连在一起发就好了。

发送完GPRS长度帧后,返回字符'>',接着发送数据帧,在模块返回"OK"之前,发送的数据都会被发送到服务器,导致通讯出错。所以在数据发送后,需要等待判断模块是否已经发送成功。


3. 超时判断:检测GPRS数据是否发送失败,失败后可关闭TCP/IP连接,进行重连,如果还是失败,可复位模块,重新进行TCP/IP连接流程。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在当今数字化时代,5G 通信技术以前所未有的速度改变着我们的生活,从高速的数据传输到实时的物联网应用,5G 的影响力无处不在。然而,在这一系列令人瞩目的技术背后,有一个常常被忽视却至关重要的角色 —— 晶振。它如同幕后的...

关键字: 通信 数据传输 晶振

在当今数字化时代,汽车不再仅仅是一种交通工具,更是一个移动的智能空间。随着人们对汽车电子设备依赖程度的不断提高,车内 USB 接口的重要性也日益凸显。从最初单纯为手机充电,到如今支持数据传输、连接各种智能设备,USB 接...

关键字: 接口 数据传输 汽车供电

上海 2025年6月23日 /美通社/ -- 近期,黑芝麻智能分享了其如何通过零拷贝共享内存技术,解决车载多域间大数据传输的延迟与资源消耗问题。核心技术包括全局内存管理单元和dmabuf机制优化,显著降低CPU负载与D...

关键字: 内存 数据传输 大数据 BUF

从通信原理的角度看,缓存机制是通过在通信链路的关键节点存储数据副本,以空间换时间的核心优化策略。它通过减少冗余数据传输、降低延迟和提升系统吞吐量。

关键字: 缓存机制 数据传输

本文深入介绍GMSL™技术,重点说明用于视频数据传输的像素模式和隧道模式之间的差异。文章将阐明这两种模式之间的主要区别,并探讨成功实施需要注意的具体事项。

关键字: 数据传输 像素模式 隧道模式

在人工智能(AI)技术迅猛发展的当下,边缘 AI 已成为行业瞩目的焦点。边缘 AI 旨在将 AI 的能力拓展至网络边缘设备,实现实时数据处理与决策,避免了数据传输至云端带来的延迟与带宽限制等问题。而在边缘 AI 系统中,...

关键字: 人工智能 边缘 AI 数据传输

火电厂作为主要能源供应单位 ,其环保措施的实施和效果评估显得尤为重要 。为提高火电厂环保电价的考核效率 和准确性 ,研究并开发了一套智能感知预警系统 ,该系统通过实时监测火电厂数据传输链路中软硬件运行状态 , 结合大数据...

关键字: 环保 数据传输 智能感知 预警

在当今数字化时代,数据传输在各类电子设备与系统中无处不在,从高速的计算机网络通信到智能家居中的设备互联,数据传输的稳定性与可靠性至关重要。然而,电路中不可避免地会遭受各种瞬态电压冲击,如静电放电(ESD)、电气快速瞬变脉...

关键字: 数据传输 瞬态电压抑制二极管 保护元件

GPRS通信模块是采用高性能工业级无线模块及嵌入式处理器,以实时操作系统作为软件支撑平台,内嵌自主知识产权的TCP/IP协议,为用户提供高速,稳定可靠,永远在线的透明数据传输通道。

关键字: GPRS 通信模块

在信息技术飞速发展的今天,数据中心和人工智能(AI)的发展对数据传输速度和效率提出了更高的要求。IBM近期宣布的一项重大光学技术突破,有望彻底改变这一现状。这项技术被称为共封装光学(CPO)技术,它能够将芯间通信速度提升...

关键字: 数据中心 人工智能 数据传输
关闭