基於STM32和SIM900A的無線通信模塊設計
發布時間:2019-11-05 來源:霍濤,賈振堂 責任編輯:wenwei
【導讀】設計一個可以實現短信收發與數據無線傳輸的模塊的要求,本文采用了ARM Cortex—M3內核的主流產品STM32作為主控芯片,采用SIMCom公司的SIM900A作(zuo)為(wei)通(tong)信(xin)芯(xin)片(pian)。在(zai)查(zha)閱(yue)大(da)量(liang)相(xiang)關(guan)文(wen)獻(xian)以(yi)及(ji)相(xiang)關(guan)芯(xin)片(pian)的(de)數(shu)據(ju)手(shou)冊(ce)之(zhi)後(hou),本(ben)文(wen)設(she)計(ji)了(le)一(yi)個(ge)遠(yuan)程(cheng)無(wu)線(xian)通(tong)信(xin)模(mo)塊(kuai)。該(gai)模(mo)塊(kuai)在(zai)實(shi)驗(yan)室(shi)試(shi)運(yun)行(xing)一(yi)周(zhou)後(hou),沒(mei)有(you)出(chu)現(xian)掉(diao)線(xian)的(de)情(qing)況(kuang),數(shu)據(ju)收(shou)發(fa)的(de)速(su)度(du)也(ye)很(hen)快(kuai)。該(gai)模(mo)塊(kuai)具(ju)有(you)性(xing)能(neng)穩(wen)定(ding),外(wai)形(xing)小(xiao)巧(qiao),性(xing)價(jia)比(bi)高(gao)等(deng)優(you)點(dian)。廠(chang)方(fang)投(tou)入(ru)使(shi)用(yong)之(zhi)後(hou),反(fan)應(ying)良(liang)好(hao)。
隨(sui)著(zhe)網(wang)絡(luo)和(he)現(xian)代(dai)通(tong)信(xin)技(ji)術(shu)的(de)不(bu)斷(duan)發(fa)展(zhan),遠(yuan)程(cheng)無(wu)線(xian)通(tong)信(xin)技(ji)術(shu)經(jing)過(guo)多(duo)年(nian)的(de)研(yan)究(jiu)與(yu)實(shi)際(ji)應(ying)用(yong),現(xian)如(ru)今(jin)在(zai)工(gong)業(ye)控(kong)製(zhi)領(ling)域(yu)有(you)了(le)非(fei)常(chang)重(zhong)要(yao)的(de)地(di)位(wei),並(bing)且(qie)發(fa)揮(hui)著(zhe)越(yue)來(lai)越(yue)大(da)的(de)作(zuo)用(yong)。文(wen)中(zhong)根(gen)據(ju)廠(chang)家(jia)的(de)要(yao)求(qiu),設(she)計(ji)的(de)無(wu)線(xian)通(tong)信(xin)模(mo)塊(kuai),主(zhu)要(yao)實(shi)現(xian)了(le)短(duan)信(xin)與(yu)數(shu)據(ju)收(shou)發(fa)功(gong)能(neng),並(bing)且(qie)做(zuo)到(dao)了(le)模(mo)塊(kuai)的(de)穩(wen)定(ding),掉(diao)線(xian)之(zhi)後(hou)能(neng)夠(gou)自(zi)動(dong)重(zhong)連(lian)。
1、無線通信模塊整體設計方案
模塊主要有電源部分、主控部分、通信部分、數據傳輸部分4個部分組成。通信模塊采用SIM900A進行無線通信。主控模塊采用STM32作zuo為wei主zhu控kong芯xin片pian,來lai控kong製zhi短duan信xin的de收shou發fa與yu數shu據ju傳chuan輸shu的de順shun利li進jin行xing。遠yuan程cheng終zhong端duan可ke以yi是shi手shou機ji或huo者zhe上shang位wei機ji的de數shu據ju中zhong心xin軟ruan件jian,經jing過guo處chu理li之zhi後hou,儲chu存cun下xia來lai,方fang便bian日ri後hou的de查zha詢xun。本ben模mo塊kuai具ju有you低di功gong耗hao,方fang便bian靈ling活huo,操cao作zuo簡jian單dan並bing且qie穩wen定ding,掉diao線xian之zhi後hou可ke以yi自zi動dong連lian接jie,運yun行xing過guo程cheng十shi分fen穩wen定ding,並bing且qie成cheng本ben較jiao低di。
2、無線通信模塊硬件設計
2.1 功能需求
本文設計的無線通信模塊,要求單12V電(dian)源(yuan)輸(shu)入(ru),模(mo)塊(kuai)上(shang)電(dian)運(yun)行(xing)後(hou)有(you)相(xiang)應(ying)的(de)指(zhi)示(shi)燈(deng)來(lai)指(zhi)示(shi)模(mo)塊(kuai)的(de)運(yun)行(xing)狀(zhuang)態(tai)。另(ling)外(wai)要(yao)求(qiu)模(mo)塊(kuai)能(neng)夠(gou)實(shi)現(xian)短(duan)信(xin)以(yi)及(ji)數(shu)據(ju)透(tou)傳(chuan)兩(liang)大(da)主(zhu)要(yao)功(gong)能(neng),在(zai)手(shou)機(ji)發(fa)送(song)短(duan)信(xin)給(gei)模(mo)塊(kuai)之(zhi)後(hou),模(mo)塊(kuai)能(neng)夠(gou)動(dong)作(zuo),並(bing)給(gei)出(chu)回(hui)應(ying)。最(zui)後(hou)要(yao)求(qiu)在(zai)建(jian)立(li)TCP鏈接時,仍然能夠收發短信。

圖1 無線通信模塊結構圖
2.2 電源部分
在主電路中,主控芯片STM32的工作電壓為2.0~3.6 V,通信芯片SIM900A的工作電壓為3.1~4.6 V,為使模塊各個部分正常工作,必須對兩者進行分別供電,電源供電電路如下:
圖中V12外接12 V電源,經過電容濾波後輸入到LM2576,實現12 V到4 V的轉換,R1、R2在線路中起到分壓作用,D2燈亮起時,表示模塊已經正常供電。LM2576是美國國家半導體公司生產的3 A電流輸出降壓開關型集成穩壓電路,具有完善的保護電路,比較穩定。

圖2 電源模塊
2.3 主控芯片
主控模塊采用STM32單片機作為微控製器,該芯片能工作於-40~105℃的溫度範圍,MAX3232芯片用於串行口的電平變換,實現控製器與通信接口之間的通信。串口1與電源電平轉換芯片Max3223相連,USART1_TX(輸出,所以在配置GPIO時,定義該口的模式為推拉輸出,USART1_ RX為輸入,定義為懸浮輸入模式。串口2與SN65LBC184D通信,實現數據的收發,USART2_RTS、USART2_RX為輸入端口,模式定義為懸浮輸入模式,USART2_CTS、USART2_TX為輸出端口,模式定義為推拉輸出。串口3用來控製SIM900A芯片,USART3_RTS、USART3_RX為輸入端口,模式定義為懸浮輸入,USART3_CTS、USART3_TX為輸出端口,模式定義為推拉輸出。

圖3 主控芯片STM32
2.4 通信芯片
通信芯片采用SIMCom公司的新型緊湊型產品SIM900A,它屬於雙頻GSM/GPRS模塊,完全采用SMT封裝形式,性能穩定,外觀精巧,性價比高,並且能夠滿足用戶的多種需求。在實現斷線自動重連功能時,涉及到DCD、RI兩個引腳的使用。DCD引腳用來實現模數轉換,當模塊掉線時,會給DCD引腳一個高電平,當這個電平被DCD引腳檢測到之後,模塊就是采取相應的動作,來重新連接上線。RI引腳在模塊上線之後,就一直保持高電平,在有電話和短信進來的時候,RI管腳就會有一個低電平出現,當RI引腳檢測到這個低電平的時候,模塊就會采取相應動作,進入到短信或者電話模式。

圖4 SIM900A通信芯片
3 、無線通信模塊軟件設計
3.1 STM32的底層配置
為了實現STM32單片機與SIM900A模mo塊kuai之zhi間jian的de數shu據ju通tong信xin,實shi現xian短duan信xin收shou發fa與yu數shu據ju傳chuan輸shu兩liang大da功gong能neng。首shou先xian要yao搭da建jian開kai發fa平ping台tai,在zai工gong程cheng中zhong加jia入ru需xu要yao用yong到dao的de庫ku函han數shu以yi及ji配pei置zhi文wen件jian,然ran後hou配pei置zhi係xi統tong時shi鍾zhong、中斷控製器、輸入輸出的GPIO以yi及ji相xiang應ying的de串chuan口kou。在zai配pei置zhi這zhe些xie參can數shu的de時shi候hou,首shou先xian需xu要yao對dui照zhao原yuan理li圖tu進jin行xing編bian寫xie,然ran後hou查zha看kan芯xin片pian用yong到dao哪na些xie端duan口kou和he這zhe些xie端duan口kou的de作zuo用yong,這zhe樣yang才cai能neng保bao證zheng無wu誤wu。接jie下xia來lai就jiu要yao對dui各ge個ge部bu分fen進jin行xing配pei置zhi,以yi保bao證zheng模mo塊kuai能neng夠gou正zheng常chang運yun行xing。
3.1.1 串口配置
開發環境搭建好之後,就可以配置端口參數了。對於本模塊,設置USART傳輸的比特率為9 600 b/s,字長為8 bit,1bit停止位,無檢驗模式。在對串口1、2、3初始化之後,打開串口的中斷響應函數:USART_ITConfig(USART1,USART_IT_RXNE,ENABLE)(以串口1為例),使能相應的串口:USART_Cmd(USART1,ENABLE),這樣串口的配置就基本完成了。
3.1.2 中斷控製器的配置
首先配置優先級分組,設置先占優先級1位,從優先級3位。本模塊定義了5個全局中斷,分別為:兩個RTC全局中斷、USART1全局中斷、USART2全局中斷、USART3全局中斷,分別對每一個中斷配置優先級,使能串口再初始化即可。需要注意的是,PC15管腳作為EXTI15dewaibuzhongduanshuruguanjiao,danggaiguanjiaodedianpingweididianpingdeshihouchufa,mokuaijinruduanxinmoshi,yincigeizhegezhongduanyigebijiaogaodeyouxianji,suoyidingyigaizhongduanxianzhanyouxianji1位,從優先級0位。在設置優先級的時候,必須根據模塊的運行情況,選擇最優的中斷分組和優先級,才能保證程序運行時,能夠快速的響應中斷。
3.2 無線通信模塊短信功能的實現
1) 短信收發具體過程
短信功能的實現主要涉及到兩個關鍵部分,一個是AT命令,另一個是串口的讀寫。AT命令是主控芯片STM32和SIM900A之間的通信協議,完成對SIM900A的控製。短信的收發主要有兩種模式,一種是文本模式,該模式隻支持英文內容,另一種是PDU模式。本模塊在完成初始化之後,首先通過USART向SIM900A發送“AT+回車”命令來檢查AT命令是否正常工作,如果返回OK,則表示能夠進行接下來的短信功能。
SIM900A的短信功能主要分為兩個部分,第一:讀取短消息。讀取短消息的設置命令為:AT+CMGR,該命令生效後有兩個返回值:index和mode,index就是接收到的短信的編號,我們將接收到的index內容放在一個長度為30的buf中,再將buf寫入到串口3中,然後再讀取串口3中的內容,這樣,短信的編號就獲取完畢。獲取了短信的編號之後,就能去獲取短信的具體內容,而短信的內容則存放在alpha中,它處於響應的第三個位置,通過get_fw(at_string,phnum,19,2)可將短信的內容取出來,這樣短信的內容就獲取到了。第二:發送短消息。發送短消息的設置命令為:AT+CMGS,首先將發送短信的電話號碼存入到一個buf中,將這個buf寫入到串口3中,以此獲取手機號碼。而短信在發送的時候,短信內容之前會帶一個“>”號,在程序設計時,隻要檢測到“>”號時,後麵的內容也就是短信發送的內容,最後將短信的內容寫到串口3即可。
2)相應的AT命令

3.3 短信命令的定義
本模塊自定義了許多短消息命令來設置或者查詢模塊的參數,具體為:SIP:IP地址設置命令、SPT:端口號設置命令、DID:ID號設置命令、ACON:自動連接命令、PRT:打印命令、LIVE:心跳操作命令、CSQ:信號強度查詢命令。這些指令通過短信的方式來實現對模塊的操作。
拿SIP來舉例,它的實現過程為:首先把短信中的‘=’之前的字符取出來存放在sms_cmd中,然後將sms_cmd與SIP、SIT、DID、ACON、PRT、LIVE、CSQ來比較,如果等於其中一個,則程序跳轉到相應的部分來執行相應的操作。這裏,strcmp(sms_cmd,“SIP”)==0,程序跳轉到SIP部分來執行IP部分的操作。然後,將‘=’之後的字符取出來存放在sms_para中。通過字符串比較函數來判斷它是‘?’還是數字。如果是‘?'''',則表示該短信命令是一個查詢命令,就隻需要用輸出顯示IP號給用戶看。如果是數字,則表示該短信命令是一個設置命令,就需要重新設置某些參數值,來改變模塊的運行過程。對於SIP,如果''''=’之後是數字,就表示該短信是用戶用來設置模塊的IP地址的。此時,就要把當前的IP值賦給模塊的IP值就可以了。最後輸出顯示IP地址設置成功,則SPT部分的操作就完成了。
4、 無線通信模塊數據傳輸的實現
4.1 數據格式的定義
數據包的具體格式如下:
數據包頭已經定義為S_PACKET_HEADER結構類型,link_id為DWORD類型,對於發送,填寫目標link_id,對於接收到的數據包,則為源link_id(由服務器自動轉換填寫),結束標誌為0x01,數據Data則根據具體的命令而各不相同。

4.2 登陸、退出的協議過程
後台軟件根據指定的服務器地址和端口號發起TCP連接請求,連接成功後開始命令交互。工作過程描述如下:
1)後台軟件首先采用CMD_LOGIN命令,登陸到通信服務器,在登陸成功之前,發送其他任何命令服務器都不處理。發送CMD_LOGIN:FORWARD給服務器,攜帶數據為S_TERMINAL。該命令的目標link_id設為0,表示發送給服務器,而不是給其他終端。
2)服務器在CMD_LOGIN:RESPONSE_OK中將其他在線模塊的信息發送過來,從而在客戶端應用程序形成在線模塊列表。後台若收到CMD_LO GIN:;RESPONSE_FAILED回應,則失敗。收到CMD_LOGIN:RESPONSE_OK回應,則成功,攜帶數據為S_TERMINAL。
3)後台軟件定時發送CMD_KEEP_LIVE命令,以維持鏈路不被網絡和服務器終止。每個在線設備必須在一定的時間間隔內向服務器發送CMD_ KEEP_LIVE信息。服務器將對此作檢查,若某設備在一定的時間間隔內沒有發送CMD_KEEP_LIVE信息,則認為該設備已經“死亡”,服務器將斷開其連接。
4)後台軟件可對模塊列表中的任意模塊進行操控。
5)後台軟件退出時,用戶設備應首先發送CMD_LOGOFF命令到服務器,告訴服務器“我要退出”,該命令的目標link_id設為0。在發送CMD _LOGOFF:FORWARD給服務器時,不需要攜帶數據。

圖5 登陸,推出的協議過程
4.3 數據傳輸具體過程
首先要定義建立TCP連接與關閉TCP連接的函數,涉及到的AT指令為AT+CIPSTART和AT+CIPCLOSE。建立TCP連接時,先把AT+CIPSTART指令寫到串口3中,然後該指令生效後,會返回一個“CONNECT”,之後隻要檢測到有返回值“CONNECT”,就表示TCP連接已經建立成功。關閉TCP連接與建立TCP連接類似,AT+CIPCLOSE指令生效後會返回一個“CLOSE OK”,隻要檢測到“CLOSE OK”,就表示TCP連接已經關閉。
TCP連接建立好以後,透傳模式就已經被開啟,此時就可以實現數據的發送與讀取。
當用戶要發送數據時,就必須根據數據包的結構來發送數據,首先把包頭寫入到串口3中,如果有數據,則把數據內容和接收對象一並寫入到串口3中,這樣數據的發送就完成了。
讀取數據時,隻要有數據過來,就一次一個字節,把數據存放到user_string[i]中,然後i++,再次接收數據。
至於數據讀取到什麼時候結束,本程序定義了3種結束的情況:1)如果用戶定義了數據的長度,就讀取到最後一個字節才結束。2)如果用戶沒有定義數據的長度,就在讀取到回車符的時候結束。3)如果遇到既沒有已定義的數據包長度,又沒有讀取到回車符的情況時,就在數據存放的長度超過user_string[i]總長度的四分之三的時候結束,或者在超過100毫秒沒有數據發過來的時候結束數據的讀取。
4.4 相應的AT命令

5 、斷線重連的處理
5.1 TCP鏈接的關閉和建立
TCP鏈接的建立涉及到的AT命令是at+cipstart,該指令有兩個返回值,分別是模塊的IP地址和端口號。首先將at+cipstart指令返回的當前模塊的IP地址和端口號存放到一個buf中,然後將這個buf寫入到串口3中,如果之後能夠讀取到返回值“CONNECT”,就表示TCP鏈接已經建立好。
TCP鏈接的關閉涉及到的AT命令是at+cipclose,該指令沒有返回值,可以直接將該指令寫到串口3中,如果檢測到“CLOSE OK”,就表示TCP鏈接已經被關閉。
5.2 DCD的檢測
當TCP建立起來之後,DCD引腳的電壓值便由高電平變為低電平,因此DCD引腳的電平狀態可以用過來指示TCP的連接情況。在程序中,本文設置時鍾在檢測DCD引腳的狀態值,當該引腳的電平值由高電平變為低電平時,就表示模塊模塊已經掉線,然後模塊就重新開始登陸,直到登陸上為止。
5.3 TCP鏈接下的短信收發
本文定義了一個全局中斷,當有短信或者電話到達模塊時,RI引腳的電平便會由高電平變為低電平,此時便會觸發全局中斷,模塊立即轉而處理短信收發或者數據傳輸。
6、 測試效果
本模塊在設計完成之後,在實驗室穩定運行了2周zhou時shi間jian,沒mei有you出chu現xian什shen麼me問wen題ti。然ran後hou又you進jin行xing了le特te殊shu情qing況kuang的de測ce試shi,在zai模mo塊kuai斷duan電dian後hou恢hui複fu供gong電dian,數shu據ju中zhong心xin斷duan電dian後hou重zhong新xin上shang電dian的de情qing況kuang下xia,都dou能neng夠gou重zhong新xin連lian接jie上shang線xian,並bing且qie能neng夠gou繼ji續xu穩wen定ding運yun行xing。隨sui後hou模mo塊kuai又you被bei送song到dao廠chang方fang使shi用yong,在zai被bei使shi用yong了le3周之後,廠方反應模塊運行情況良好,沒有掉線的情況。
7 、結論
本文設計的無線通信模塊,是利用STM32來控製SIM900Axinpian,laishixianduanxiaoxideshoufayushujudewuxianchuanshu。benshejiwanchenglewuxiantongxindeyingjianbufenheruanjianbufendeshejiyushixian。zaiduociyunxingshiyanshi,benmokuaimeiyouchuxiandiaoxianyijifaredengwenti,feichangwending。bencishejichengbenjiaodi,yunxingwendingkekao,yingyongfanweishifenguangfan,liyongSIM900A,降低了模塊的成本,使其更加具有商業價值。
(作者:霍濤,賈振堂,上海電力學院電子與信息工程)
推薦閱讀:
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 1200餘家企業齊聚深圳,CITE2026打造電子信息產業創新盛宴
- 掌握 Gemini 3.1 Pro 參數調優的藝術
- 築牢安全防線:電池擠壓試驗機如何為新能源產業護航?
- Grok 4.1 API 實戰:構建 X 平台實時輿情監控 Agent
- 電源芯片國產化新選擇:MUN3CAD03-SF助力物聯網終端“芯”升級
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
音頻變壓器
引線電感
語音控製
元件符號
元器件選型
雲電視
雲計算
雲母電容
真空三極管
振蕩器
振蕩線圈
振動器
振動設備
震動馬達
整流變壓器
整流二極管
整流濾波
直流電機
智能抄表
智能電表
智能電網
智能家居
智能交通
智能手機
中電華星
中電器材
中功率管
中間繼電器
周立功單片機
轉換開關





