历史上的今天
返回首页

历史上的今天

今天是:2025年04月22日(星期二)

正在发生

2018年04月22日 | GPRS模块与STM32的数据传输

2018-04-22 来源:eefocus

函数清单和注意事项

(底层驱动部分)

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

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

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

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

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

                        设置GPRS数据长度

                        发送GPRS数据内容

                        接收GPRS数据内容

                        AT指令/GPRS数据解析

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

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

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


(主循环部分)

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

    step1、"AT\r\n"//检测模块串口工作

    step2、"AT+CCID\r\n"//检查是否插卡

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

    step4、"AT+CGATT=1\r\n"//附着网络

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

    step6、"AT+CGACT=1,1\r\n"//激活网络

    step7、 "AT+CIPSTART=\"TCP\",\"121.41.xxx.xxx\",port\r\n"//连接TCPIP服务器

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

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

    另外两个AT命令也很好用

"AT+CIPCLOSE\r\n"//关闭TCPIP连接

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


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

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

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


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


推荐阅读

史海拾趣

E-Z-HOOK公司的发展小趣事

E-Z-HOOK公司非常重视与客户的关系建立与维护。他们始终坚持以客户为中心的经营理念,努力为客户提供高质量的产品和优质的服务。为了更好地了解客户需求和反馈,公司建立了完善的客户服务体系,包括售前咨询、售后服务和技术支持等。此外,公司还定期组织客户交流会和技术研讨会等活动,加强与客户的沟通与互动。这些努力使得E-Z-HOOK公司赢得了广大客户的信任和支持。

Datakey Electronics公司的发展小趣事

Datakey Electronics公司自创立之初,就深知技术创新的重要性。在面临激烈市场竞争的情况下,公司投入大量资源进行研发,成功推出了一款具有革命性意义的数据存储产品。这款产品以其高可靠性、大容量和易用性迅速赢得了市场的认可,使Datakey Electronics在数据存储领域崭露头角。

FCI [First Components International]公司的发展小趣事

在环境问题日益严重的今天,绿色环保已经成为电子产品行业的重要发展趋势。Datakey Electronics积极响应国家号召,致力于绿色产品的研发和生产。公司投入巨资研发环保材料和生产工艺,成功推出了一系列符合环保标准的产品。这些产品不仅满足了客户的需求,还为公司赢得了良好的社会声誉。

Fujisoku Corporation公司的发展小趣事

在电子行业的早期,一家名为“未来电子”的公司(虚构名称,代指类似Fujisoku Corporation的企业)通过自主研发,成功突破了半导体材料的瓶颈,开发出了一种新型的高效能硅基材料。这一创新不仅大幅提升了芯片的性能和稳定性,还降低了生产成本,使“未来电子”迅速在半导体市场崭露头角。公司凭借这一技术优势,不断推出具有竞争力的电子产品,逐步建立起行业领先地位。

Chipcon AS公司的发展小趣事

Chipcon AS公司深知人才是企业发展的核心力量。因此,公司一直注重人才的引进和培养。通过与高校和研究机构建立合作关系,公司吸引了大量优秀的研发人才加入。同时,公司还建立了完善的培训体系,为员工提供了广阔的职业发展空间。这些措施使得Chipcon AS公司的研发实力不断增强,为公司的持续发展提供了有力保障。

Ferroxcube公司的发展小趣事

随着全球环保意识的日益增强,电子行业也开始面临着越来越严格的环保要求。Ferroxcube公司作为行业领军企业,积极响应环保号召,开始研发更加环保的磁性元件。

经过长时间的研发和试验,公司成功推出了一款采用环保材料制成的新型磁芯。这款磁芯不仅性能优异,而且在使用寿命结束后可以方便地进行回收再利用,大大降低了对环境的污染。

这一创新产品一经推出,就受到了市场的热烈欢迎。许多环保意识强烈的客户纷纷选择使用Ferroxcube的环保磁芯,以支持绿色环保事业。这也使得Ferroxcube在环保领域的声誉大大提升,为公司赢得了更多的市场份额和客户认可。

问答坊 | AI 解惑

TI电源管理指南

TI的电源管理芯片及应用介绍。…

查看全部问答>

求助:软件外包公司

有哪位朋友知道从事手机软件开发的中小型公司吗?能否提供一些,或者是我该如何才能查到这方面的公司信息?多谢。…

查看全部问答>

2410 usb 电路请教

怎么发布了电路图啊? 我的usb调试部出来想让帮忙看看 怎么发电路图啊…

查看全部问答>

想自己制作一块51的开发板,却不知道如何下手?请教师兄们

准备学习单片机,本想买一块开发板,不过想到自己搭的话可以熟悉硬件部分,不过我还没有实战过实际电路,所以感到一头雾水,请教高手具体步骤怎么干?谢谢啊…

查看全部问答>

新建一超级群:26993639,欢迎加入

本群主题:研究led阻容降压,探讨led驱动电源等技术话题--------   格式:职业+公司+姓.男+R女+S   欢迎加入…

查看全部问答>

求助:www.micrium.com上的ucos谁移植成功过?

自己试了一次,很多问题,没成功。那位在real view下成功过,请发一份代码到checkcode@126.com我想参考一下,第一次接触ucos,有点吃力。…

查看全部问答>

2.4G方向性问题

现在国内2.4G的方案还不是太成熟,想讨论下2.4G方向性的问题,现在有什么好的办法能让2.4G方向性做的很精确,传输距离可调…

查看全部问答>

ADI实验室电路

ADI实验室电路 下载…

查看全部问答>

G2553模拟串口驱动12864求高手指点怎么写读取12864里的数据

这是12864头文件部分             注意我用的是模拟串口  不是串行通信 #include void int_port(void)                  &nbs ...…

查看全部问答>