(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串口之間的定義。