疯仔嵌入式 2012-09-08
(1)项目需求:
将ARM与GPRS模块(型号为深圳市普众通信技术有限公司SIM300-EVB_V2.02)通过串口连接,实现ARM来控制GPRS模块,将数据发送至远程联网PC终端,即实现GPRS模块上网功能。这个功能的实现,需要ARM给GPRS模块发送8条AT指令,即:
1) 发送 AT+CPIN? // 查询模块是否有设置pin码
收回响应 +CPIN: READY
OK
2)发送 AT+CSQ // 查询天线信号质量
收回响应 +CSQ: 16,0
OK
3)发送 AT+CGREG? // 查询模块是否有注册网络
收回响应 +CGREG: 0,1
OK
4)发送 AT+CGATT? // 查询模块是否附着GPRS网络
收回响应 +CGATT: 1
OK // 以上返回正常后在操作TCP/IP应用
5)发送 AT+CSTT // 设置APN
收回响应 OK
6)发送 AT+CIICR // 激活移动场景
收回响应 OK
7)发送 AT+CIFSR // 获得本地IP地址
收回响应 10.29.125.44
8)发送 AT+CIPSTART="TCP","113.89.205.35",1985 // 建立TCP/IP连接
收回响应 OK
CONNECT OK
这样就设置成功了,可以发送数据了,例如:AT+CIPSEND
> 123456
SEND OK
这样发送过去,远程联网PC上面的SOCKET服务器端,可以接受到数据123456
9)最后,发送 AT+CIPSHUT
收回响应 SHUT OK
(2)问题分析:
1)将AT命令通过ARM板子串口发送给GPRS,但是却无法收到GPRS的正确回应,即不能正确的接受到OK
2)将ARM板子的调试串口和上位机主机后面的COM1连接,板子另外的一个COM0串口(COM2)和上位机COM3(我使用USB转换COM装置转出了一个COM3)连接,通过串口通信软件SecurCRT来控制板子,运行我编写的串口收发程序,可以发送AT命令给Windows系统的串口调试助手,串口调试助手可以显示发送过来的字符串AT,也可以通过串口调试助手给我的Windows系统串口通信软件SecurCRT发送字符串过来可以道道回应。但是这些只是测试只是模拟,当GPRS模块和ARM板子通过串口相连接时,串口通信软件SecurCRT却无法收到GPRS的回应。
3)首先,检查硬件(串口线或者usb转串等),都没有问题。
其次,查找串口的参数配置或读串口数据的函数,没有问题。
再次,直连线、交叉联系,ARM与PC通讯都验证,结论是只要ARM和GPRS连
就收不到数据。
最后,更换ARM开发板上的串口,问题终于得到结局。
(3)解决方法:
将ARM板子的调试串口和上位机主机后面的COM1连接,板子另外的一个COM1串口(COM3)和上位机COM3(我使用USB转换COM装置转出了一个COM3)连接。问题就得到解决。(即更换ARM开发板上的串口问题就得到解决)
(4)原因分析:
COM0:RS232/RS485(带隔离) 3线
COM2:RS232/RS485(带隔离) 3线
COM1:RS232 5线
COM3:RS232/TTL 3线
COM0、COM2带有7、8为485信号而不是流控信号(RTS、CTS),故ARM和GPRS连就收不到数据。
串口数据传输在大多数嵌入式设备中可使用最简单的异步串口的连接方式:3线串口。
COM1为3线串口,故ARM和GPRS连就收到数据。
COM3为5线串口,带有7(RTS)、8(CTS)两个流控信号,故ARM和GPRS连也能收到数
据。
(5) 反省:
以后在串口编程时,一定要知道每个DCE模块的串口定义,配置好每个DCE模块的串口和开发板DTE串口之间的定义。