首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 串口實戰:西門子 TC35 模組 AT 指令短信收發完整實現

     編輯:VC 教學

本文作為串口編程系列終篇,給出基於西門子 TC35 GSM 模組的短信收發完整實現:硬體介面、AT 指令集、PDU 模式編解碼、VC 串口通訊框架與 UI 交互邏輯。

TC35 硬體與介面特性

  • 雙頻 EGSM900/GSM1800,3.3~5.5V 供電,CMOS 電平串口(需 MAX232 轉 RS-232)。
  • 波特率 300~115200 bps,支援自動波特率檢測。
  • 內建 GSM 協議棧,透過 AT 指令雙向傳輸指令與數據。
  • 支援文本/PDU 兩種短信格式,中文需 PDU 編碼(UCS2)。

核心 AT 指令集

功能指令說明
初始化/格式AT+CMGF=1設為 PDU 模式(1=PDU, 0=Text)
短信中心AT+CSCA="+8613800531500"設定 SMSC 號碼(營運商提供)
查詢中心AT+CSCA?返回當前 SMSC
新訊息提示AT+CNMI=1,1,0,0,1收到短信主動上報 +CMTI: "SM",index
發送短信AT+CMGS=<length><CR>> <PDU><Ctrl+Z>等待 > 提示符後送 PDU,以 0x1A 結束
讀取短信AT+CMGR=index讀取指定位置 PDU 內容
列出全部AT+CMGL=4一次讀出所有短信
刪除短信AT+CMGD=index釋放 SIM 卡空間

VC 串口通訊架構

  • 採用 CreateFile/ReadFile/WriteFile 同步 I/O 或 Overlapped 異步 I/O。
  • 專用讀取執行緒輪詢 WaitCommEvent(EV_RXCHAR),組裝完整回應行(以 \r\n 分隔)。
  • 指令發送與回應等待封裝為 SendATCommand(cmd, expectedResp, timeout),支援重試與超時。
  • PDU 編解碼獨立模組:EncodePDU(phone, text) → hexString / DecodePDU(pdu) → {phone, time, text}。

UI 交互流程(最小化示例)

// 介面控件:電話號碼編輯框、內容編輯框、發送/清除按鈕、接收列表框
OnSend():
    1. 讀取號碼與內容
    2. EncodePDU → hexString
    3. SendATCommand("AT+CMGS=" + len, ">")
    4. WriteFile(hexString + 0x1A)
    5. 等待 "OK"

OnReceiveThread():
    循環讀取串口
    若收到 +CMTI:"SM",idx → SendATCommand("AT+CMGR="+idx) → DecodePDU → 更新列表
    若收到 +CMGS 確認 → 更新發送狀態

關鍵避坑指南

  • PDU 長度計算:AT+CMGS= 後的長度為 PDU 字節數(不含結束符 0x1A)。
  • 中文編碼:必須使用 UCS2(每字符 2 字節),並在 PDU 頭部標記 Data Coding Scheme = 0x08。
  • SIM 卡存滿會導致無法接收新短信,收到處理後必須 AT+CMGD 刪除。
  • 波特率不匹配會產生亂碼,啟用自動波特率或固定雙端一致(如 9600/115200)。
  • 電源穩定:TC35 發射峰值電流 2A,需足夠電源裕度,否則發送時複位。

完整工程包含串口類、PDU 編解碼、指令狀態機、MFC 對話框 UI,可直接作為短信網關、報警通知、遠程控制等項目的通訊核心模組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved