函数清单和注意事项
(底层驱动部分)
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连接流程。
上一篇:STM32CubeMX 生成的LWIP 调试问题
下一篇:STM32F407和LAN8720调试记录 (1)
推荐阅读最新更新时间:2024-03-16 16:00
设计资源 培训 开发板 精华推荐
- 你是课代表——TI培训最受欢迎课程由你做主 发帖荐课即可参与幸运抽奖!
- 下载有好礼!罗姆带您学习电源设计应用小技巧(电源管理篇)
- 下载白皮书 答题赢好礼|TE《智能监控应用连接解决方案指南》
- 答题赢京东卡|《安森美和安富利物联网创新设计大赛作品集》
- [直播预报名] TI 最新蓝牙技术培训,2017 震撼首发!
- 2018开“芯”学:Mentor两场知识有奖问答邀你新年充电
- 看视频答题,玩转幸运大抽奖:Littelfuse汽车电子电路保护知多少
- 报名观看TI嵌入式主题月直播,场场精彩,好运连连
- 有奖直播【如何在几分钟之内完成高效可靠的USB PD电源设计——PI Expert™分步教程】(9:30开始入场)
- 元戎启行发布L4级自动驾驶传感解决方案,助推行业快速发展
- TE推出具有M12连接的工业以太网交换机,符合EN50155标准
- 一图看懂新能源汽车动力蓄电池回收服务网点建设和运营指南
- Phillips-Medisize 赢得合同, 将生产电子功能组合给药设备
- 贸泽开售Laird Connectivity带功率放大器的BL654PA模块
- 瑞萨电子为其R-Car SoC推出线上Market Place,将车载系统开发速度推向新高 由 winniew
- SABIC发布2020年第三季度财报,销售总额合$78.1亿
- XP Power推出高压DC电源BQ系列,易于维修,降低总体成本
- 威格斯助力中国OEM加快实现电动汽车技术创新
- 倒计时1天,2020中国国际数字经济大会暨展览会盛大来袭