關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于STM32的SMS短消息收發系統

        基于STM32的SMS短消息收發系統

        作者: 時間:2012-12-22 來源:網絡 收藏

        對發送隊列緩沖區的操作分為人隊操作和出隊操作,入隊操作是由外部采集模塊產生的中斷事件,在該中斷的處理例程中構造好具有發送具體內容PDU編碼、目標手機號等資訊的結構體,并將構造好的結構體存放到發送隊列中,此時一旦主程序中的短消息控制器在進行收發處理完畢后處于idle狀態,將立即切換到開始發送狀態,完成對發送隊列中歷史積累的發送處理,在發送前首先進行出隊操作。
        對接收隊列緩沖區的操作也分為輸入和輸出部分。系統設定條件為一旦處于idle狀態達到5 ms時間(意味著發送隊列中待發短消息已全部處理完畢)則狀態切換到開始接收狀態,即通過AT指令從模塊讀取短消息協議數據單元,解析為-PDU格式并將其放入接收隊列。輸出部分主要通過定時器設置10 ms輪詢,一旦有解析好的短消息到來,則馬上控制被控設備產生相應動作。
        系統實現中,通過main函數調用短消息控制器循環運作狀態遷移轉換處理程序來實時完成與GSM模塊的交互,通過TIM2中斷處理例程完成對接收隊列中已到達短消息的調度(dispatch)處理,該處理程序會根據接收到的短消息內容的不同來實現具體的控制功能。發送時,也采用類似的中斷方式和隊列形式來完成多線程的模擬。為了防止對接收指令的誤響應和減小與模塊交互讀取時間,每次接收短消息后都將GSM模塊上已收短消息刪除。
        系統采用來實現不同狀態處理的切換,過程中短消息數據收發的狀態遷移圖如圖1所示。

        本文引用地址:http://www.104case.com/article/159593.htm

        d.JPG



        4 處理控制機與GSM模塊的交互
        通過AT指令完成與GSM模塊交互。與GSM模塊交互讀取短消息有多種方式,如AT+CMGR;AT+CMGL等。由于多個用戶可以同時操作,考慮到可能到來的多條短消息,系統中使用CMGL AT指令完成對GSM模塊的通信操作,以便利一次讀取,提高系統的響應速度。
        CMGL指令在SMS PDU mode下的格式如下:
        c.JPG
        SMS規范中定義了message_status的5種不同狀態下的操作:
        0表示已接收到的未讀短信,
        1表示已接收到的已讀短信,
        2表示已存儲的未發送短信,
        3表示已存儲的已發送短信,
        4表示列出全部SMS短信。
        如果GSM模塊成功從存儲區讀到短消息,將會返回到形如:
        b.jpg
        e.JPG
        格式的反饋信息。其中+CMGL后第一個1所在字段作為索引index,指示短消息在短消息存儲區中的位置。注意這個位置小并不表明該短消息是先到達的控制短消息。第二個1所在的字段指示短消息的狀態,同上述message_status的狀態,但只有0~4的取值范圍。24所在字段指示僅隨其后的的TPDU編碼的有效部分長度,以10進制表示。如果CMGL后面不加“=”號和任何數字,默認為“CMGL=0”的效果。系統中根據TPDU編碼的內容進行解析,并將解析結果保存到一個臨時SMS_PDU結構體類型的數據單元中。然后交由短消息處理保存到隊列中進行處理。

        5 結束語
        由于GSM模塊收發SMS的響應速度受運營商服務的限制,短消息控制器的狀態設計中需要把發送AT指令給模塊和從GSM模塊收到響應字符串區分為兩種不同的狀態,以及區分其它預備和執行狀態,并利用MPU定時器產生精準毫秒延時來判定響應是否超時。但這只能提高狀態切換精度,無法保證SMS服務響應的時間精度,即,系統必須等待GSM模塊返回響應信息,這意味著系統實時性的高低瓶頸仍然取決與運營商。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 林口县| 化德县| 洛浦县| 和政县| 拜城县| 溧水县| 融水| 鄱阳县| 杂多县| 七台河市| 东明县| 凤山县| 台中市| 克拉玛依市| 全椒县| 苍山县| 舒城县| 平塘县| 宁明县| 林州市| 涡阳县| 高碑店市| 德令哈市| 新丰县| 常山县| 务川| 隆回县| 双辽市| 澄江县| 东阿县| 台南市| 无为县| 富源县| 深州市| 襄樊市| 景洪市| 吉木乃县| 呼伦贝尔市| 长垣县| 会理县| 佛教|