基於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)。
suizhewangluohexiandaitongxinjishudebuduanfazhan,yuanchengwuxiantongxinjishujingguoduoniandeyanjiuyushijiyingyong,xianrujinzaigongyekongzhilingyuyoulefeichangzhongyaodediwei,bingqiefahuizheyuelaiyuedadezuoyong。wenzhonggenjuchangjiadeyaoqiu,shejidewuxiantongxinmokuai,zhuyaoshixianleduanxinyushujushoufagongneng,bingqiezuodaolemokuaidewending,diaoxianzhihounenggouzidongzhonglian。
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 功能需求
本文設計的無線通信模塊,要求單12Vdianyuanshuru,mokuaishangdianyunxinghouyouxiangyingdezhishidenglaizhishimokuaideyunxingzhuangtai。lingwaiyaoqiumokuainenggoushixianduanxinyijishujutouchuanliangdazhuyaogongneng,zaishoujifasongduanxingeimokuaizhihou,mokuainenggoudongzuo,binggeichuhuiying。zuihouyaoqiuzaijianliTCP鏈接時,仍然能夠收發短信。

圖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管腳作為EXTI15的(de)外(wai)部(bu)中(zhong)斷(duan)輸(shu)入(ru)管(guan)腳(jiao),當(dang)該(gai)管(guan)腳(jiao)的(de)電(dian)平(ping)為(wei)低(di)電(dian)平(ping)的(de)時(shi)候(hou)觸(chu)發(fa),模(mo)塊(kuai)進(jin)入(ru)短(duan)信(xin)模(mo)式(shi),因(yin)此(ci)給(gei)這(zhe)個(ge)中(zhong)斷(duan)一(yi)個(ge)比(bi)較(jiao)高(gao)的(de)優(you)先(xian)級(ji),所(suo)以(yi)定(ding)義(yi)該(gai)中(zhong)斷(duan)先(xian)占(zhan)優(you)先(xian)級(ji)1位,從優先級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、 測試效果
本模塊在設計完成之後,在實驗室穩定運行了2zhoushijian,meiyouchuxianshenmewenti。ranhouyoujinxingleteshuqingkuangdeceshi,zaimokuaiduandianhouhuifugongdian,shujuzhongxinduandianhouzhongxinshangdiandeqingkuangxia,dounenggouzhongxinlianjieshangxian,bingqienenggoujixuwendingyunxing。suihoumokuaiyoubeisongdaochangfangshiyong,zaibeishiyongle3周之後,廠方反應模塊運行情況良好,沒有掉線的情況。
7 、結論
本文設計的無線通信模塊,是利用STM32來控製SIM900Axinpian,laishixianduanxiaoxideshoufayushujudewuxianchuanshu。benshejiwanchenglewuxiantongxindeyingjianbufenheruanjianbufendeshejiyushixian。zaiduociyunxingshiyanshi,benmokuaimeiyouchuxiandiaoxianyijifaredengwenti,feichangwending。bencishejichengbenjiaodi,yunxingwendingkekao,yingyongfanweishifenguangfan,liyongSIM900A,降低了模塊的成本,使其更加具有商業價值。
(作者:霍濤,賈振堂,上海電力學院電子與信息工程)
推薦閱讀:
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 築基AI4S:摩爾線程全功能GPU加速中國生命科學自主生態
- 一秒檢測,成本降至萬分之一,光引科技把幾十萬的台式光譜儀“搬”到了手腕上
- AI服務器電源機櫃Power Rack HVDC MW級測試方案
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索




