国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于STM32的SMS短消息收發(fā)系統(tǒng)

2012-04-29 05:47:22宋維
電腦知識(shí)與技術(shù) 2012年20期
關(guān)鍵詞:短消息

摘要:隨著手機(jī)的廣泛使用,GSM網(wǎng)絡(luò)提供的短消息服務(wù)使得只需要增加少量投入便可以通過手機(jī)實(shí)現(xiàn)生活和生產(chǎn)中的遠(yuǎn)程控制和告警通知成為可能。討論一種基于STM32的SMS短消息收發(fā)系統(tǒng),主要內(nèi)容包含STM32模塊配置和短信收發(fā)系統(tǒng)的實(shí)現(xiàn)。特別對(duì)系統(tǒng)中STM32微處理器的RCC、EXTI、NVIC等模塊的實(shí)現(xiàn)進(jìn)行了詳細(xì)討論。

關(guān)鍵詞:STM32;EXTI;短消息;GPIO;NVIC

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)20-4800-03

STM32 Short News Sending&Receiving System Originated from GSM

SONG Wei

(Guangdong Institute of Science and Technology, Guangzhou 510640,China)

Abstract:With the wide use of mobile phones, short message service GSM networks offered makes life and industrial remote control and alarm inform method through mobile phone possible only through a small increase in investment. This paper puts emphasis on a SMS mes sage sending and receiving system based on STM32, main contents include STM32 module configuration and implementation of SMS send ing and receiving system. Especially for system implementation on STM32 microprocessors, RCC, EXTI, NVIC,etc, were discussed.

Key words:STM32;EXTI;short message service;GPIO;NVIC

隨著生活節(jié)奏的加快和生產(chǎn)效率的提高,不在一線現(xiàn)場也能及時(shí)了解第一手資料,以便及時(shí)處理生產(chǎn)生活過程中的突發(fā)事件,是現(xiàn)代控制系統(tǒng)發(fā)展的趨勢,也是人們對(duì)現(xiàn)代生活便捷性追求的目標(biāo)。隨著手機(jī)的廣泛普及,需要有一種方式讓人們只需要增加少量投入便可以通過手機(jī)遠(yuǎn)程控制家里的電器或生產(chǎn)現(xiàn)場的設(shè)備,遠(yuǎn)程查看設(shè)備或安防系統(tǒng)狀況,以降低時(shí)間和交通成本,提高工作效率。同時(shí),一旦家中發(fā)生非法入侵、火災(zāi)、煤氣泄漏[1]等安全事故時(shí)手機(jī)用戶能夠在短時(shí)間內(nèi)獲知險(xiǎn)情,及時(shí)處理。為此本文設(shè)計(jì)了一種基于STM32和SMS的短信收發(fā)系統(tǒng),在ST公司基于ARM Cortex-M3內(nèi)核的嵌入式CPU上實(shí)現(xiàn)GSM短信的收發(fā),以便處理用戶發(fā)送短信控制設(shè)備,和設(shè)備異常時(shí)發(fā)送通知消息到用戶的情況,實(shí)現(xiàn)用戶和設(shè)備間的雙向通信處理。

1系統(tǒng)結(jié)構(gòu)及工作原理

本文所設(shè)計(jì)的STM32短信收發(fā)系統(tǒng)由CPU模塊、電源模塊、短信收發(fā)模塊、時(shí)鐘模塊、后備電源模塊、鍵盤模塊、LED指示模塊、驅(qū)動(dòng)模塊、檢測模塊等模塊組成,如圖1所示。

系統(tǒng)的工作過程為:用戶通過手機(jī)將控制短信發(fā)送給GSM模塊,STM32對(duì)GSM模塊中的短信進(jìn)行接收和解碼的操作,然后對(duì)解碼后的短信內(nèi)容進(jìn)行分析后控制相應(yīng)電器,如空調(diào)、電源開關(guān),房燈或其它照明設(shè)備的開通或關(guān)斷,或轉(zhuǎn)換為固定在系統(tǒng)中的設(shè)備操作指令,并將指令發(fā)給控制設(shè)備,控制設(shè)備通過配套操作指令產(chǎn)生相應(yīng)動(dòng)作。同時(shí),STM32通過外部設(shè)備中斷等方式獲取外圍煙感、氣體傳感器和防盜系統(tǒng)傳遞給CPU的信號(hào),一旦家中或生產(chǎn)線上發(fā)生諸如非法入侵、火災(zāi)、煤氣泄漏等險(xiǎn)情時(shí),系統(tǒng)立即向固定的手機(jī)發(fā)送告警短信,實(shí)現(xiàn)了家居和生產(chǎn)過程的告警通知和遠(yuǎn)程控制。

設(shè)計(jì)中采用STM32單片機(jī)和西門子公司的TC35i GSM模塊實(shí)現(xiàn)具有中文短信功能的短消息收發(fā)系統(tǒng)。通過RS232串口將GSM模塊與STM32相連,并在STM32平臺(tái)上開發(fā)軟件,實(shí)現(xiàn)中文短信點(diǎn)對(duì)點(diǎn)[2]的雙向收發(fā),從而實(shí)現(xiàn)與用戶手機(jī)與GSM模塊的遠(yuǎn)程通信功能。

發(fā)送和接收SMS短信有兩種方式:基于AT命令的文本模式和基于AT命令的PDU(Protocol Description Unit Mode)模式。TC35i模塊既支持文本模式也支持PDU模式,文本模式通常用來發(fā)送純西文短信,PDU模式用于發(fā)送中文短信。在PDU模式下短信息正文經(jīng)過編碼后轉(zhuǎn)換成UNICODE碼被傳送[3]。

2 STM32系統(tǒng)配置過程

系統(tǒng)采用意法半導(dǎo)體公司推出的STM32單片機(jī)作為嵌入式處理器。STM32系列微控制器基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計(jì)的ARM Cortex-M3內(nèi)核。該內(nèi)核產(chǎn)品按性能可分成不同的系列:STM32F103“增強(qiáng)型”系列和STM32F101“基本型”系列[4],以及接口豐富的“互聯(lián)型”系列等。增強(qiáng)型系列時(shí)鐘頻率達(dá)到72MHz,是同系列產(chǎn)品中主頻最高的產(chǎn)品。各個(gè)系列均內(nèi)置FLASH存儲(chǔ)器,不同的是閃存容量、SRAM的最大容量和外設(shè)接口的組合。在選擇型號(hào)時(shí)重點(diǎn)考慮FLASH容量和SRAM空間大小[5]。系統(tǒng)實(shí)現(xiàn)了固定內(nèi)容的短信收發(fā),不需要?jiǎng)討B(tài)生成可能使用所有漢字內(nèi)容的短信,因此節(jié)省了短信PDU編解碼所需要的漢字碼表空間,對(duì)于32K的FLASH即已足夠。

系統(tǒng)運(yùn)行時(shí)首先要對(duì)STM32進(jìn)行初始化。初始化過程如圖2所示:

如圖所示,系統(tǒng)首先進(jìn)行的是時(shí)鐘和復(fù)位配置。時(shí)鐘是STM32單片機(jī)的脈搏,是單片機(jī)片上外設(shè)和內(nèi)部總線的驅(qū)動(dòng)源。因此初始化代碼中首先進(jìn)行RCC時(shí)鐘的配置。STM32單片機(jī)的時(shí)鐘可以由以下3個(gè)時(shí)鐘源提供:HSI、HSE、LSE。其中LSE一般作為RTC時(shí)鐘精確定時(shí)使用。程序中使用HSE來產(chǎn)生PLL時(shí)鐘,然后倍頻為72M后作為系統(tǒng)時(shí)鐘。STM32單片機(jī)將時(shí)鐘信號(hào)經(jīng)過分頻或倍頻(PLL)后,使能PLL時(shí)鐘,得到系統(tǒng)時(shí)鐘,系統(tǒng)時(shí)鐘經(jīng)過分頻,產(chǎn)生外設(shè)所使用的時(shí)鐘。具體過程如下:

STM32上電默認(rèn)是使用內(nèi)部高速RC時(shí)鐘(HSI)啟動(dòng)運(yùn)行,程序中首先打開HSE,等待其穩(wěn)定,然后配置倍頻并使能PLL,再等PLL穩(wěn)定后設(shè)置為系統(tǒng)時(shí)鐘,等系統(tǒng)時(shí)鐘切換完成后就可以提供給外設(shè)使用。由于使用任何一個(gè)外設(shè)都必須打開相應(yīng)的時(shí)鐘,在RCC_Config函數(shù)中還完成了對(duì)各使用到的外設(shè)進(jìn)行時(shí)鐘使能操作。對(duì)于系統(tǒng)中不需要使用到的外設(shè),就把它的時(shí)鐘關(guān)掉,這樣可以降低系統(tǒng)的功耗,達(dá)到節(jié)能目的,實(shí)現(xiàn)低功耗的效果。

其次是進(jìn)行GPIO的配置。GPIO配置函數(shù)用來設(shè)置LED,KEY,外部觸發(fā)中斷口和串口的輸入輸出屬性。在配置IO口時(shí),先要打開相應(yīng)GPIO組對(duì)應(yīng)的時(shí)鐘。對(duì)于LED需要將GPIO配置為推挽輸出狀態(tài)。對(duì)于按鍵,需要根據(jù)外接電路的狀態(tài)將其設(shè)置為上拉輸入或下拉輸入狀態(tài),還需要進(jìn)行EXTI的設(shè)置。EXTI是STM32產(chǎn)品上專用的外部中斷控制模塊,它負(fù)責(zé)管理映射到GPIO引腳上的外中斷和片內(nèi)幾個(gè)集成外設(shè)的中斷,以及軟件中斷。它的輸出最終被映射到NVIC的相應(yīng)通道。EXTI配置中有關(guān)鍵影響的一點(diǎn)是觸發(fā)模式EXTI_Trigger的選擇,這和按鍵外圍電路有關(guān)。系統(tǒng)中的按鍵接法是,按下時(shí)接通到GND,因此GPIO配置時(shí)應(yīng)設(shè)為上拉輸入模式,且EXTI中需要使用下降沿觸發(fā)EXTI_Trigger_Falling,這樣可以確保按鍵動(dòng)作能夠正確產(chǎn)生中斷。

然后進(jìn)行NVIC的設(shè)置。NVIC是Cortex-M3核心的一部分,用來指示中斷源的優(yōu)先級(jí)級(jí)別。系統(tǒng)設(shè)計(jì)中對(duì)USART1和USART2,以及RTC,KEY,外部開關(guān)信號(hào)都使用了中斷操作,因此需要設(shè)定各種中斷的優(yōu)先級(jí)別。包含搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)設(shè)置。設(shè)置時(shí)首先選擇優(yōu)先級(jí)分組為NVIC_PriorityGroup_1。然后對(duì)串口優(yōu)先級(jí)進(jìn)行設(shè)定。由于GSM模塊的返回信息需要及時(shí)保存和處理,因此將連接到GSM模塊的串口搶占和子優(yōu)先級(jí)都設(shè)置為最高,為0。對(duì)于其它中斷源,將搶占優(yōu)先級(jí)設(shè)置為1,這樣防止其它各中斷對(duì)GSM模塊返回值處理過程的干擾。優(yōu)先級(jí)設(shè)置順序?yàn)椋谧罡?,按鍵其次,外部中斷再次,RTC最低。由于系統(tǒng)中并不需要非常精確的確定事件發(fā)生時(shí)間,相比而言,用戶控制短信及時(shí)收取并處理,以及及時(shí)通知用戶的意義更大,因此RTC計(jì)時(shí)只是作為參考,將其設(shè)置為搶占優(yōu)先級(jí)最低。

3 STM32短消息收發(fā)處理

用GSM模塊進(jìn)行短信收發(fā)處理,主要有兩個(gè)部分需要考慮,一個(gè)是AT指令,一個(gè)串口讀寫。AT指令作為主控芯片和GSM模塊之間的通信協(xié)議,完成對(duì)GSM模塊的控制功能。TC35i GSM模塊在收發(fā)短信時(shí),分為兩種模式,一種是TEXT模式,一種是PDU模式,如果只需要發(fā)送英文內(nèi)容,TEXT模式就可以。系統(tǒng)實(shí)現(xiàn)中文短信的收發(fā)以增強(qiáng)交互性,因此使用PDU模式。模式的設(shè)置通過AT指令完成。系統(tǒng)在初始化后,首先通過USART1向GSM模塊發(fā)送“AT ”命令查詢短信模塊是否工作正常。這個(gè)過程是首先發(fā)送“AT ”,然后延時(shí)100ms,然后查詢GSM模塊返回值(這個(gè)返回值是在100ms內(nèi)由GSM模塊通過USART1把返回字符一個(gè)個(gè)依次保存到自定義的串口緩沖區(qū)中完成賦值的),將返回字符串和“OK”字符串作比較,如果返回結(jié)果中能找到“OK”字符串即表示模塊工作正常。然后通過USART1發(fā)送"AT+CMGF=0 "[6]指令給GSM模塊,初始化短信發(fā)送狀態(tài)為PDU模式。然后進(jìn)入主循環(huán),在主循環(huán)中進(jìn)行兩個(gè)動(dòng)作:一個(gè)是根據(jù)外圍設(shè)備的狀態(tài)取得告警事件,即安全狀態(tài)掃描;一個(gè)是檢測是否有新的短信到來,這通過"AT+ CMGL=0 "指令完成,該指令會(huì)列出未讀短信。通過取得返回值“+CMGL”后第7個(gè)位置的值,得到新短信的index號(hào),再通過AT+ CMGS=index指令獲得新短信的PDU編碼。如果有新短信到來,從PDU編碼中提取出短信號(hào)碼和短信內(nèi)容,將短信號(hào)碼與指定號(hào)碼進(jìn)行比較,判斷是否為指定用戶的號(hào)碼,如果是,再將短信內(nèi)容與固定的漢字UNICODE內(nèi)容字符串進(jìn)行比較,判斷具體是哪條操作控制命令,如提取的內(nèi)容是“5F00542F5E039632”,則表示“開啟布防”控制命令,于是系統(tǒng)控制相應(yīng)的繼電器動(dòng)作來控制門禁系統(tǒng)的布防開關(guān)。這樣固定的漢字處理方式不需要進(jìn)行PDU編碼的轉(zhuǎn)碼過程,節(jié)省了FLASH空間和處理時(shí)間。

以上過程實(shí)現(xiàn)了用戶對(duì)設(shè)備的遠(yuǎn)程操控。對(duì)短消息的遠(yuǎn)程發(fā)送處理流程,則在主循環(huán)中調(diào)用一個(gè)安全監(jiān)測函數(shù)來處理。在安全監(jiān)測函數(shù)中輪詢IO口高低電平的狀態(tài)標(biāo)志。這個(gè)狀態(tài)標(biāo)志是在外部設(shè)備異常時(shí)通過IO中斷處理例程來設(shè)置的。如果某個(gè)設(shè)備狀態(tài)標(biāo)志異常,則轉(zhuǎn)入該設(shè)備的告警例程,通過構(gòu)造固定的PDU字符串向用戶發(fā)送提示短消息。系統(tǒng)中通過AT+CMSS=index直接從SIM卡中取得預(yù)存的固定中文短信并發(fā)送給用戶手機(jī),這種方式省去了構(gòu)造短信PDU字符串的麻煩。

為了方便計(jì)時(shí),在系統(tǒng)中實(shí)現(xiàn)了實(shí)時(shí)時(shí)鐘,用于家庭火災(zāi)、煤氣泄露、工廠被盜等各種險(xiǎn)情發(fā)生時(shí)間點(diǎn)的記錄。因此需要進(jìn)行RTC實(shí)時(shí)時(shí)鐘的配置,還需要進(jìn)行RTC與外界時(shí)間的同步操作。系統(tǒng)的RTC外部晶振采用負(fù)載電容為6pF的32.768kHz晶振以便起振容易,降低功耗。RTC配置涉及對(duì)電源相關(guān)配置寄存器(PWR)、備份區(qū)域(BKP)和RCC寄存器的改寫。備份區(qū)域中有可寫入標(biāo)志數(shù)據(jù)的空間,由于掉電后備份區(qū)域中的內(nèi)容仍保持,可以通過對(duì)寫入的標(biāo)志數(shù)據(jù)的比較,知道備份區(qū)域中的設(shè)置是否存在。若不存在,則向備份寄存器寫入一個(gè)標(biāo)志數(shù)據(jù)。通過這種方式來判斷實(shí)時(shí)時(shí)鐘RTC是否設(shè)置。

程序中使用BKP_ReadBackupRegister來讀取備份區(qū)域的備份寄存器BKP_DR1的值,該值與事先定義的標(biāo)志數(shù)據(jù)作比較,如果相等表明RTC已配置。如果不相等則開始配置RTC,這種配置只需要一次,由于RTC的預(yù)分頻器、計(jì)數(shù)器和鬧鐘寄存器在備份區(qū)域中,這可以保證系統(tǒng)掉電后,在電池供電時(shí)仍能計(jì)數(shù)。在配置之前首先使用BKP_WriteBackupRegister固件庫函數(shù)向BKP_DR1寫入標(biāo)志數(shù)據(jù),以便下次不用重復(fù)配置。配置程序中首先啟用PWR和BKP的時(shí)鐘,然后將后備域解鎖以使能RTC和備份寄存器的訪問,再選擇LSE作為為RTC時(shí)鐘并等待其穩(wěn)定后開啟RTC驅(qū)動(dòng)時(shí)鐘源,開啟后等待APB1時(shí)鐘與RTC時(shí)鐘同步,并確定上一次操作已經(jīng)結(jié)束,然后進(jìn)行寄存器讀寫操作。這個(gè)操作主要完成對(duì)RTC分頻器的設(shè)置,將預(yù)分頻值設(shè)置為32767,這樣使得RTC時(shí)鐘頻率為1Hz,即可實(shí)現(xiàn)秒計(jì)數(shù)的功能。每次讀寫RTC的寄存器操作后都要等待寄存器寫入完成。然后使能秒中斷,RTC計(jì)數(shù)器即開始計(jì)數(shù),并在每秒結(jié)束時(shí)產(chǎn)生一個(gè)中斷事件。

RTC與外界時(shí)間的同步是通過接收到的配置短信來提取出接收時(shí)間,并將其作為RTC計(jì)數(shù)器的值,以實(shí)現(xiàn)與北京時(shí)間同步。

4結(jié)束語

系統(tǒng)實(shí)現(xiàn)了STM32下的短信收發(fā)處理過程,短消息的收發(fā)采用輪詢順序處理方式,即收到控制短信后就處理控制短信,控制短信處理完后再去查看告警裝置的狀態(tài),如果狀態(tài)異常就轉(zhuǎn)入發(fā)送告警短信處理過程,長此往復(fù)。系統(tǒng)實(shí)現(xiàn)了通過手機(jī)實(shí)現(xiàn)生活和生產(chǎn)中的遠(yuǎn)程控制和告警通知,只需要增加少量投入,但未考慮收發(fā)的時(shí)間因素和多用戶情況下同時(shí)處理的可能。

參考文獻(xiàn):

[1]鮮曉東,常超,胡穎,等.基于WSNs和GSM的室內(nèi)環(huán)境監(jiān)測預(yù)警系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2011, 30(6):141-145.

[2]黃道斌,黃明和,王海華.基于短消息中文尋址的設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用,2007, 23(7):35-37.

[3]劉晉.手機(jī)短消息服務(wù)在OA系統(tǒng)中的實(shí)現(xiàn)[J].計(jì)算機(jī)工程.2004, 30(z1):202-204.

[4] Cortex-M3內(nèi)核32位MCU提供增強(qiáng)與基本兩種類型選擇[J].電子設(shè)計(jì)技術(shù),2007, 14(8):35-37.

[5]宋維,崔曉坤.基于STM32的GSM模塊綜合應(yīng)用[J].電腦知識(shí)與技術(shù),2012,18(8):4536-4537.

[6]呂芳,胡林靜,臧琛.基于TC35 GSM的汽車防盜報(bào)警系統(tǒng)的軟件設(shè)計(jì)[J].測控技術(shù),2009,28(z1) :125-127.

猜你喜歡
短消息
試論電視新聞短消息的采寫策略
新聞傳播(2018年14期)2018-11-13 01:12:58
淺談廣播短消息的采寫
新聞傳播(2018年1期)2018-04-19 02:09:00
Android手機(jī)系統(tǒng)中的短消息加密研究與實(shí)現(xiàn)
短消息業(yè)務(wù)評(píng)估體系的研究與實(shí)現(xiàn)
iPhone如何群發(fā)短消息
電腦迷(2012年13期)2012-04-29 19:26:28
體驗(yàn)動(dòng)感
元谋县| 霞浦县| 壶关县| 务川| 乌鲁木齐县| 永年县| 漳平市| 石屏县| 手游| 灵宝市| 湟源县| 新河县| 南康市| 疏勒县| 海晏县| 高邑县| 临猗县| 富锦市| 克什克腾旗| 盱眙县| 晋州市| 乐山市| 北宁市| 元谋县| 大丰市| 景洪市| 兰溪市| 甘洛县| 灵寿县| 黄石市| 望谟县| 巴里| 四川省| 方正县| 金阳县| 金塔县| 长春市| 大田县| 望奎县| 墨脱县| 大姚县|