基于單片機的短信收發系統設計_第1頁
基于單片機的短信收發系統設計_第2頁
基于單片機的短信收發系統設計_第3頁
基于單片機的短信收發系統設計_第4頁
基于單片機的短信收發系統設計_第5頁
已閱讀5頁,還剩53頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、南京工程學院自動化學院本科畢業設計(論文)1南京工程學院自動化學院本科畢業設計(論文)Graduation Design The Design Of Messaging System Based On MCUBy Wang HuiSupervised byLecture. SHI XinxinSchool of Automation Nanjing Institute of TechnologyJune, 20151摘 要隨著手機的廣泛使用,GSM網絡提供的短消息服務使得只需要增加少量投入便可以通過手機實現生活和生產中的遠程控制和告警通知成為可能。本設計是基于ARM Cortex-M3內核的3

2、2位單片機STM32的一種短信收發系統。本系統主要實現中英文短信收發及TFT彩屏顯示相關狀態如短信未讀、已讀狀態、短信發送狀態和內容如要讀取短信數、讀取到的短信內容、時間、發件人手機號碼等,并且可以實現通過TFT液晶屏觸摸輸入號碼和功能按鍵如讀取、返回、撥號、掛斷、刪除等。此方案以ST公司32位單片機STM32F103ZET6為主控制器輔以GSM/GPRS模塊SIM900A,64Mb串行Flash存儲器W25Q64,2K串行EEPROM AT24C02,TFT液晶屏ILI9320等硬件,通過C語言編寫程序,用軟硬件結合的方法實現其基本功能。經過多次實踐測試,本系統可以達到預期的穩定性、可靠性,

3、可以應用在遠程控制、智能家居、工業控制等領域。關鍵詞:SIM900A ;STM32;短信;GSM;TFT液晶屏1南京工程學院自動化學院本科畢業設計(論文)ABSTRACTWith the widespread use of mobile phones, short message services provided by the GSM network make it possible that only a slight increase in investment and production will be able to live in the remote control and a

4、larm notification via cell phone.In this thesis , a messaging system base on the 32-bit MCU STM32 which is based on the core of Cortex-M3 by ARM is discussed.The system is mainly a Chinese and English text messaging and that TFT color screen displays the status of messages such as unread, read statu

5、s, SMS status and content, such as the number of messages to be read, read the message content, time, sender's phone number, etc. and can be achieved by TFT LCD touch screen to input the number and function keys such as reading, return, dial, hang up, delete, and so on.This program selects ST co

6、mpany's 32-bit MCU STM32F103ZET6 as controller supplemented GSM / GPRS module SIM900A, 64Mb Serial Flash memory W25Q64,2K serial EEPROM AT24C02, TFT LCD ILI9320 hardware, through C language programming,and achieve its basic functions with the combination of software and hardware.After several pr

7、actice tests, the system can achieve the desired stability, reliability, and can be used in remote control, smart home, industrial control and other fields.Key words: SIM900A; STM32; messaging; GSM; TFT screenII南京工程學院自動化學院本科畢業設計(論文)目 錄第一章 緒 論11.1 引言11.2 選題背景與意義11.3 應用現狀及發展趨勢1第二章 GSM系統及方案設計32.1 GSM系統

8、32.1.1 GSM系統特點32.1.2 GSM系統的體系結構32.2 GSM系統方案設計42.3 本章小結5第三章 系統硬件設計63.1 單片機最小系統63.1.1主控制器63.1.2 主控制器外圍簡單電路73.1.3 JTAG接口83.1.4 電源電路93.2 SIM900A模塊103.2.1 SIM900A模塊的對外接口電路103.2.2 SIM900A模塊初始化113.3 外圍電路設計123.3.1 一鍵下載電路123.3.2 TFT液晶屏接口123.3.3外部存儲器133.3.4 按鍵和指示燈電路153.3.5 蜂鳴器電路163.4 本章小結17第四章 系統軟件設計184.1 總體框

9、圖184.2 系統初始化194.3 文件系統FATFS移植19III4.4 漢字字庫19 4.4.1 更新字庫204.4.2 查找漢字204.5 觸摸屏模塊244.6 RTC顯示254.6.1 RTC簡介254.6.2 設置時間264.6.3備份區域保護264.7 開關機264.7.1 待機模式簡介264.7.2 開關機實現過程274.8 本章小結28第五章 系統調試295.1系統調試過程與方法295.1.1 串口通信295.1.2 系統UI315.1.3 讀取短信325.1.4 發送短信325.1.5 電話測試335.2系統調試結果與分析345.3本章小結42第六章 結 論436.1 主要工

10、作與結論436.2 存在的問題436.3 感想與收獲43致 謝44參 考 文 獻45附錄A:硬件設計原理圖與PCB圖47IV第1章 緒 論1.1 引言移動通信發展到現在,經歷了由模擬到數字的變化,早期的移動通信系統是以AMPS和ETACS為代表的模擬移動通信系統。90年代,隨著移動通信用戶數量的增加,用戶對跨地區,跨國漫游以及各種增值服務要求也隨之增加,同時數字通信技術發展也日趨成熟,歐洲的移動通信運營商開始考慮發展一種新型的數字移動通信系統,GSM系統也就應運而生1。GSM是英文“Global System for Mobile Communications”的縮寫,其全文含義是“全球移動通

11、信系統”2。我國移動通信發展已經進入了一個高速發展的階段,短消息作為其中作為最簡單和方便的數據通信方式,其應用發展速度可想而知,自然也非常迅速。隨著信息化時代的高速發展,短信息也越來越廉價了,并且短信息的及時性、穩定性也得到了更好的保證3。1.2 選題背景與意義在高速發展的信息化時代的今天,物聯網是新一代信息技術的重要組成部分,其覆蓋范圍極廣,包括從傳感器、控制器到云計算的各種應用以及產品服務智能家居、交通物流、環境保護、公共安全、智能消防、工業檢測、工業控制、個人健康等各種領域。它是下一個推動世界高速發展的“重要生產力”,是繼通信網之后的一個萬億級市場。而以GSM/GPRS為代表的通信技術是

12、極其重要的一環,掌握了GSM/GPRS通信技術,就相當于掌握了一個萬億級市場。近些年來,隨著物聯網時代的到來,各種無線技術都得到了迅猛的發展,如比較熱門的Zigbee、WIFI、Bluetooth等,雖然這幾種技術在局域無線網中應用較廣泛、成本也較低,但是都有一個共同的缺點,那就是傳輸距離有限,比較適合民用。而GSM短信息業務費用低廉、覆蓋范圍廣、實現簡單,可以解決上述的不足,具有低成本、可升級和可擴展性,在物聯網時代的今天應具有較廣闊的前景4。1.3 應用現狀及發展趨勢作為一種數據傳輸方式,GSM短消息具有覆蓋面積廣、低成本、信號好的多個優點,對于解決監控采集點分散、覆蓋面廣、監控點移動、實

13、時性要求較低的監控采集系統具有無可比擬的優勢。下面就講述幾個具體的應用:第1、 在智能家居中的應用,隨著近幾年嵌入式產品的高速發展,人們越來越享受科技發展給我們的生活帶來的方便。越來越多的高科技智能化產品,已經被廣泛應用到我們的實際生活中。現在,家用電器如電視、冰箱、空調、微波爐等普遍向智能化方向發展,我們都能直接通過手機操控開關和改變功率。利用GSM模塊,我們可以用手機發送特定的短信,打開或關閉家中的燈、空調、電視等電器,同時還可以發送家中的情況發送到手機上。在GSM系統中再加入一些傳感器,如溫濕度傳感器、污染氣體傳感器、燃氣傳感器等,就可以增加家居的安全性,即使我們在上班或者旅行時,也可以

14、及時獲取家中的安全狀況。一旦發生危急情況,也可以及時采取措施,避免或者減小財產損失以及人身安全5,6。第2、 在汽車中的應用,隨著交通工具的不斷發展,汽車也變得普及了起來,汽車的防盜的解決自然也是迫在眉睫。我們可以將GSM模塊安裝在汽車的隱蔽處,一旦發生盜竊,立即發送短信提醒車主,然后就可以用手機發送一條短信給該模塊,模塊經一定的算法處理判斷短信的合法性后,將附近的GSM基站信息及時發送給車主,這樣就可以有利于警方的快速破案。同時還可以像智能家居一樣,用GSM模塊控制車中的空調,在車主上車之前,就可以打開空調,這樣車主在一上車后就可以感受到合適的溫度7,8。第3、 在工控系統中的應用,由于有的

15、工控系統環境比較惡劣,不適合進行有線網絡的傳輸,需要借助無線技術來實現控制目的。例如,油田檢測、礦產開發時瓦斯濃度監測等,不可能借助人力去檢測,而有線技術也不適合,WIFI、Zigbee等短距離無線技術又不能發揮很好的作用,而借助于GSM網絡的SMS可以很好解決這一問題9。第二章 GSM系統及方案設計2.1 GSM系統2.1.1 GSM系統特點 GSM是在蜂窩系統的基礎上發展而成并根據歐洲電信標準化協會制定的GSM技術規范設計的一種開放式結構的系統,屬于第二代數字移動通信系統。它是目前基于時分多址技術的移動通信中比較成熟、完善、且應用最廣泛的一種系統10。主要具有以下幾個特點:1) GSM系統

16、是由幾個分系統組成的,可與各種公眾通信網互通互聯。2) GSM系統能提供國際的自動漫游功能,全部GSM移動用戶都可進入GSM系統。3) GSM系統具有加密和鑒權功能,能確保用戶保密和網絡安全。4) GSM系統抗干擾能力強,信號強。5) 隨著集成電路技術的快速發展,用戶設備也逐漸向小巧和多功能方向發展。2.1.2 GSM系統的體系結構蜂窩移動通信系統主要是由交換網路子系統(NSS)、無線基站子系統(BSS)和移動臺(MS)三大部分組成,如圖2.1所示。其中NSS與BSS之間的接口為“A”接口,BSS與MS之間的接口為“Um”接口11。圖2.1 蜂窩移動系統組成框圖GSM系統框圖如圖2.2,A接口

17、往右是NSS系統,A接口往左Um接口是BSS系統,Um接口往左是移動臺部分(MS)。NSS由移動業務交換中心(MSC)、拜訪位置寄存器(VLR)、歸屬位置寄存器(HLR)、鑒權中心(AUC)和移動設備識別寄存器(EIR)幾部分組成,主要完成交換功能和客戶數據與移動性管理、安全性管理所需的數據庫功能。圖2.2 GSM系統框圖BSS是在一定的無線覆蓋區中由MSC控制,與MS進行通信的系統設備,由基站控制器(BSC)和基站收發信臺(BTS)兩部分組成,主要功能是完成無線發送接收和無線資源管理等。 MS由移動終端(MS)和客戶識別卡(SIM)組成。2.2 GSM系統方案設計查閱相關資料可知,基于GSM

18、系統的短消息收發系統的實現方案主要有三種。第一種是通過移動網關發送短信息,此方案最大的優點就是不需要額外的硬件,但是需要到電信部門去申請網關,適用于大型的網絡通訊公司開發,如華為、中興等。第二種使用網站提供的短信發送功能,如新浪、網易等網站。這種方法易于實現,所需資源最少,但是對網站依賴性較大,而且只能發送短信,不支持實時接收短信。第三種在電腦或單片機通過GSM 模塊向手機發送短信,對硬件需求較大,比較適合小項目的開發,但能實現自動收發短信12,13,14。第二種方法短信收發通常又分為兩種模式:Text、PDU模式,PDU模式比較復雜,需要用戶編寫專門的函數將文本格式轉換為PDU格式,而應用T

19、ext模式開發,則顯得簡單了很多,本文采用的是第二種方法的Text模式。第二種方法中,我們可以通過PC與GSM模塊進行通信從而獲取相關數據,也可以通過單片機與GSM模塊進行通信。雖然PC功能強大,平臺易于實現,但是不夠便攜,且成本較高,所以不是一個明智之選。我們選擇了單片機與GSM模進行通信,從而與GSM網絡交互通信,從而實現與手機或其他的GSM模塊進行通信,這種方法簡單易于實現,只需要我們熟練掌握串口編程和AT指令即可15,系統框圖如圖2.3所示。圖2.3 GSM系統框圖2.3 本章小結 本部分主要論述了GSM系統,首先介紹了GSM的特點、體系結構,接著提出了GSM系統的設計方案及簡要框圖。

20、第三章 系統硬件設計3.1 單片機最小系統3.1.1主控制器本系統選擇了ST公司的基于ARM Cortex-M3內核的32位處理器STM32F103ZET6作為主控制器,封裝LQFP144。關于STM32F103ZEZT6,我們可以從官方數據手冊上可以看出:其最高72MHz工作頻率,512K字節Flash,64K字節SRAM ,支持2.03.6V寬電壓輸入,12通道DMA 控制器,有112個快速I/O端口,有13個通信接口包括2個I2C接口,5個USART接口其中3個可以配置為UART,3個SPI接口其中2個可復用為I2S接口等。由以上數據可以看出,本系統所選控制器性能是如此的優越,在嵌入式產

21、品開發中必有其一席之地。無論是傳統51單片機或增強型51單片機還是RISC的8位AVR單片機還是16位的MSP430單片機,本處理器在Flash、RAM、工作頻率以及外設上具有絕對的優勢,性價比較高16,17。下面將會介紹系統選擇該處理器作為主控制器的原因:(1)本系統將會移植嵌入式文件系統FATFS,以便讀取外擴Flash中的漢字字庫,所以對控制器RAM、Flash提出了較高要求,而市場上比較熱門的8/16位單片機基本很難勝任。(2)72MHz的工作頻率,而且采用精簡指令集,數據處理能力快。(3)FSMC(可配置的靜態存儲器控制器)可以配置成與多數圖形LCD控制器的無縫連接,可以支持Inte

22、l 8080和Motorola 6800的模式,可以更快速驅動LCD。(4)3.3V供電,且外設時鐘需要程序配置,功耗較低。(5)DMA傳輸數據更快,且不影響CPU運行。(6)112個IO口,可以支持擴展很多功能。 (7)外設接口較多,且性能較好。本系統需要用到兩個串口,一個和電腦串口通信方便調試,可以接受上位機發來的更改信息或命令,另外一個和SIM900A模塊通信。該處理器的串口可配置成全雙工模式,數據位、波特率都可以程序配置18。3.1.2 主控制器外圍簡單電路如圖3.1所示,Y2為外部高速時鐘(HSE)8MHz晶振,C9、C10為負載電容,外部高速時鐘源經STM32內部PLL倍頻可配置為

23、系統時鐘,最高可配置達72MHz,這里采用72MHz位系統時鐘。Y1為外部低速時鐘(LSE)32.768kHz晶振,C4、C5為負載電容,它為實時時鐘或者其他定時功能提供一個低功耗且精確的低速時鐘源。后備區域VBAT腳采用了CR1220和3.3V混合供電的方式,而CR1220供電3V,所以當VCC3.3供電時,二極管D2截止D1導通,然后就直接給VBAT供電。而在外部電源斷開或者外部電源電壓低于CR1220電壓時,D2導通D1截止,CR1220給VBAT供電。在圖3.1中,我們可以看出參考電壓端口VREF+和模擬電源輸入端口VDDA連在了一起,同時也間接和3.3V連接在一起了,這樣AD基準電壓

24、和模擬電源都是3.3V。為了后期維護,我們在圖3.2最小系統(2)中增加了R21和R22兩個0歐姆電阻,如果3.3V電源短路,我們可以用電烙鐵拆下它們來用萬用表測試以確定是STM32部分短路,還是外部3.3V電源部分短路,為我們快速解決電路短路問題提供了很大的便利。圖3.1 最小系統圖一 圖 3.2 最小系統圖二 圖 3.3 復位電路 圖3.4 啟動方式設置接口STM32低電平復位,所以電路與傳統51單片機高電平復位也有點差異,具體如圖3.3,電阻、電容值與時間常數有關,會影響到復位效果,本處選取10K、0.1uF常用值。圖3.4為啟動方式設置接口圖,如表3.1所示,BOOT0、BOOT1設置

25、不同值,在系統時鐘第四個上升沿檢測BOOT引腳信號,STM32確定從哪個地址處開始加載。比如我們要下載程序到該處理器里,然后運行,我們先手動配置BOOT0、BOOT1為1、0,然后再配置為0、0,即我們需要手動配置BOOT0,BOOT1可以接地。為了避免手動配置,我們可以通過軟件結合一鍵下載電路可以自動配置,這點將在一鍵電路中會作進一步分析。表3.1 BOOT0、BOOT1啟動模式表 3.1.3 JTAG接口 由于STM32支持在線調試,支持JTAG、SWD兩種模式,本系統中我們采用的是標準的JTAG接法。STM32的SWD接口與JTAG是共用的,只要接上JTAG,可以使用SWD模式了。具體電

26、路如圖3.5所示。需要注意的是,接口控制線都要加10K上拉電阻。同時JTAG、SWD下載速度都可以在ARM公司的MDK4.70A軟件中可以手動設置。圖3.5 JTAG接口電路3.1.4 電源電路圖3.6 電源電路如圖3.6所示,K1為總電源開關,F1為500ma自恢復保險絲,用于保護電路,同時也可以防止燒壞電腦USB接口,AMS117-3.3為穩壓芯片,輸入電壓為4.75V-12V,輸出3.3V電壓,紋波最大1.0mV,為STM32提供電源。貼片電容C29、C28濾去高頻雜波,貼片鋁電解電容C30隔直流通交流,濾去頻雜低波,從而為電路提供更穩定、較小紋波的電源,防止損壞半導體器件。本電路電源來

27、源于USB供電,最大輸出電流500mA,負載能力有限,但是本系統中并無大的負載,同時GSM模塊是由單獨的電源適配器(12V 1A)供電的,所以是可行的的。在電路中,在5V、3.3V電源處我們都加了TVS保護電路,保護IC器件免受各種瞬態脈沖的沖擊,這里我們選用的是單向瞬態抑制二極管SMBJ5.0A和SMBJ3.3A。3.2 SIM900A模塊 3.2.1 SIM900A模塊的對外接口電路圖3.7 SIM900A對外接口框圖SIM900A對外接口框圖如圖3.7,對外接口包括:RS232接口,語音接口,控制線接口、SIM卡接口等。圖3.8 SIM900A實物3.2.2 SIM900A模塊初始化SI

28、M900A模塊初始化之前,先給模塊上電,由于SIM900A模塊在啟動注冊時,電流峰值會達到2A4V,所以模塊是由12V 1A電源適配器供電的,避免由于模塊功耗的突升,造成的死機或啟動不起來。上電后,長按啟動按鍵,實現模塊的開機。在模塊開機后,模塊上的指示燈,先是快閃,如果手機注冊成功后,指示燈會慢閃。如果長時間快閃沒有變成慢,應長按啟動鍵會關機模塊,檢查天線, SIM卡片的固定情況,還有檢查SIM卡片是否能正常使用。當模塊指示燈變為慢閃時證明網絡注冊成功可以使用了。SIM900A實物如圖3.8,在與單片機通信之前,我們可以通過電腦串口與SIM900A模塊通信調試,來檢測模塊是否能正常工作19,

29、20,21,22。圖3.9 一鍵下載電路3.3 外圍電路設計3.3.1 一鍵下載電路上文已提及一鍵下載,自動配置BOOT0,現在將著重介紹具體工作過程。如圖3.9所示USB轉串口電路圖中,我們選擇的是SOP16封裝的CH340G芯片,USB接口使用的是mini USB接口,三極管Q2和Q3的組合構成了一鍵下載電路。下載時我們只需要在STM32下載軟件mcuisp中選擇:DTR的低電平復位,RTS高電平進BootLoader模式,就可以一鍵下載代碼了,而不需要手動配置B00T0和手動按復位鍵了。DTR#低電平,RTS#高電平輸出時,Q2 S8050導通,RESET被拉低,與此同時,Q3 S855

30、0也被導通,BOOT0也被上拉成高電平,然后軟件配置,延時拉高RESET退出復位,就開始進入ISP串口下載。下載完成后,BOOT0因與100K下拉電阻相連,被拉低,進而STM32下載完成后復位4個系統時鐘后會檢測到BOOT0低電平信號,進而加載用戶Flash,即跑代碼。3.3.2 TFT液晶屏接口本系統中所用TFT液晶屏,型號為ILI9320,該模塊有以下控制線: CS:TFTLCD片選信號 WR:向TFTLCD寫入數據 RD:從TFTLCD讀取數據 D15:0:16位雙向數據線 RST:硬復位TFTLCD RS:命令/數據標志(0,讀寫命令;1,讀寫數據)該液晶模塊支持8/16位數據線模式,

31、在本系統中,液晶模塊采用16位的并行方式與外部連接,如圖3.10所示。下面我們將對FSMC控制TFTLCD過程作簡要分析。查閱相關技術手冊可知外部SRAM由地址線,數據線,寫信號(WE)、片選信號(CS)、讀信號(OE)三根控制信號線組成,其時序和TFTLCD的控制時序基本上相同。它們之間的唯一不同之處就是TFTLCD有RS命令/數據切換信號,而沒有地址信號,而地址信號是0/1二進制信號,RS信號也是0/1信號,所以我們完全可以把RS信號等效成一個地址信號。比如我們把RS接在A2上面,那么當FSMC控制器寫地址0的時候,A2就為0,其實也就是寫命令。而FSMC寫地址1的時候,A2將會變為1,也

32、就是寫數據。通過上述的分析,我們就可以通過FSMC區分了到底傳送的是數據還是命令。圖3.10 TFT液晶屏接口TFT模塊選擇的是四線電阻式觸摸屏,其控制芯片有很多,包括ADS7843、ADS7846和XPT2046等。本LCD模塊自帶觸摸屏控制芯片XPT2046,內含12位分辨率逐步逼近型A/D轉換器,轉換速率可達125KHz,支持從1.5V到5.25V的寬電壓I/O接口。該控制芯片與單片機通信方式為SPI(串行外設接口)總線,這里我們采用的是軟件模擬SPI,沒有使用STM32自帶的SPI接口。XPT2046返回的是二進制數字量,經單片機進行數據轉換可得出當前具體的物理坐標,從而實現觸摸定位。

33、3.3.3外部存儲器本系統設計中有三種外部存儲器電路:EEPROM、Flash、SD卡,分別用于保存觸摸屏校準參數、漢字字庫、要更新的漢字字庫。(1)EEPROM如圖3.11所示,EEPROM芯片我們使用的是串行AT24C02,其容量為2Kb,也就是256個字節,對于本系統應用已經足夠。A0-A2三位是其地址線,設計時我們一般把A0-A2均接地,對AT24C02來說也就是把這三位地址位設置成了0,所以參考其技術手冊可知,該器件地址為0xA0。同時根據IIC總線電氣特性要求,時鐘線SCL、數據線SDA都需要接上拉電阻,一般取4.7K較好,如圖中R28、R29所示。24C02與單片機之間的通信方式

34、是I2C總線,這里我們也采用的是軟件模擬,因為經過查閱很多資料,發現STM32在硬件I2C接口做的不是很好,不夠穩定。I2C總線的時序這里就不介紹了,不過這種總線的通信速率不是很快,且軟件模擬在通信速度上會降低,但對我們來說已經足夠了。圖3.11 AT24C02電路圖(2)FlashFLASH芯片型號我們選擇了W25Q64,其容量為64Mb,也就是8M字節,與上述AT24C02一樣都是串行傳輸,占用較少的IO口。該芯片與單片機之間的通信方式為SPI總線,如圖3.12所示我們并沒有用軟件模擬SPI總線時序,而是采用了STM32自帶的硬件SPI接口SPI2,這樣傳輸速度會更快。SPI總線一般有四根

35、信號控制線:片選線CS,兩根數據線分別為主入從出MISO和主出從入MOSI,還有一根時鐘線SCLK。圖3.12 W25Q64電路圖擴展Flash為了是存儲漢字字庫,因為STM32F103ZET6本身只具有512K Flash,如果用來存放字庫,肯定不夠,外擴的Flash可以存放GBK和Unicode碼轉換字庫、16*12字體GBK碼字庫,16*16字體GBK碼等字庫,這樣我們就可以在TFT LCD上顯示16*12、16*16字體等字體的漢字和字符了。同時我們也可以存儲我們喜歡的字體,如華文行楷等。(3)SD卡本系統設計這個SD卡電路是為了從SD卡中更新字庫到Flash W25Q64中,Flas

36、h中本身是不帶字庫的,不經過SD卡或U盤直接燒入字庫到Flash中是不太現實的。如圖3.13所示,SD_CARD1為SD卡槽,通過P3、P4、P5組合,我們可以選擇SD卡驅動方式,因為SD卡有兩種驅動方式,SDIO接口或者SPI接口,SDIO驅動較快一點。SD卡接口電路除了時鐘線不用接上拉電路,其他控制線都要接上上拉電阻,如圖中R1、R2、R3、R4、R5所示。圖3.13 SD卡接口 本系統中擬用軟件SPI模式驅動,所以我們會將P3、P5所有排針用跳線帽短接,因為本系統對讀取和寫入速率沒有多大要求,傳輸的數據頂多1.5MB/s。3.3.4 按鍵和指示燈電路如圖3.14所示,四個按鍵除了KEY_

37、UP采用STM32 GPIO下拉模式,其他三個按鍵都采用了GPIO上拉模式。KEY_UP接PA0,PA0引腳可以用來喚醒處于待機模式的單片機,而WK_UP是高電平有效,所以我們配置撐了下拉模式,我們可以借此按鍵做成類似于手機的那種開關機按鈕。PWR為電源指示燈,LED0、LED1可以做成呼吸燈,用來指示系統是否正常運行或者也可以設置成信號指示燈,如短信提醒等23。本系統中LED1用來做呼吸燈,指示系統是否正常運行,LED0用來指示新信息。至于限流電阻的取值,應不同顏色的發光二極管而不同,考慮到白光、藍光的二極管導通壓降為2.7-3V左右,部分顏色的二極管導通壓降最低只有1.7V左右,而且二極管

38、的導通電流為3mA時,二極管就能正常發光,電流最好不超過20mA。綜合以上考慮,我們暫定限流電阻為510歐姆,在實際焊接中,我們根據不同顏色的二極管選擇更合適的限流電阻。圖3.14 按鍵和指示燈電路3.3.5 蜂鳴器電路蜂鳴器按有無震蕩源可分為有源蜂鳴器和無源蜂鳴器,有源蜂鳴器內部自帶振蕩電路,加適當的直流電源就可以發聲,頻率通常固定,易于操作;而無源蜂鳴器一般需要通過外部的方波信號驅動,頻率可以改變,一般為1到4KHz最佳,所以可以演奏出優美的音樂如生日快樂歌等。圖3.15 蜂鳴器電路在本系統中,蜂鳴器可以提示有新信息,同時也可以用來觸摸屏按鍵發聲24,25。此處,為了程序控制簡單,我們選擇

39、了3.3V的有源蜂鳴器。如圖3.15所示,由于單片機IO口輸出電流有限,所以我們的蜂鳴器驅動電路通過NPN三極管S8050放大電流,從而驅動蜂鳴器發聲,同時在三極管的基極要加限流電阻。當PB8由程序配置輸出高電平時,則基極與發射極有了大約3V的壓降,三極管Q1導通,三極管Q1集電極被發射極拉低,此時蜂鳴器兩端等于接了3.3V電壓,所以發聲。當PB8配置為低電平時,三極管Q1基極與發射極沒有0.7V的導通壓降,Q1此時為截止狀態,此時集電極不能被發射極拉低,從而蜂鳴器兩端沒有施加電壓,則不會發聲。3.4 本章小結本章主要論述了系統硬件設計以及方案論證,首先我們對控制器做了對比,并詳細列出選擇此控

40、制器的原因,然后對單片機最小系統設計進行了分析,其中也包括了仿真接口、電源電路,接著我們還簡單介紹了GSM模塊SIM900A通訊模塊,最后我們重點對外圍硬件電路包括一鍵下載電路、液晶屏接口、外部存儲器、按鍵和指示燈電路以及蜂鳴器電路作了一一分析,并論述了器件選型、相關IO口配置以及總線配置。第4章 系統軟件設計4.1 總體框圖圖4.1 總體框圖系統軟件設計總體框圖如圖4.1所示,具體可分為初始化和測試兩階段。4.2 系統初始化本模塊初始化主要包括系統時鐘配置、串口2初始化、液晶初始化、按鍵初始化、串口1初始化等。系統時鐘配置為外部時鐘經PLL倍頻后的72MHz,也是STM32F103ZZET6

41、最大的工作頻率。串口1波特率設置為9600bps,8位數據位,一位停止位,無奇偶校驗位,無硬件流控制,用于與上位機通信。串口2波特率為115200bps,8位數據位,一位停止位,無奇偶校驗位,無硬件流控制,用于與GSM模塊通信25,26。按鍵初始化,設置KEY_UP所接IO口為下拉輸入模式,其他三個按鍵KEY0、KEY1、KEY2所接IO口設置為上拉輸入模式。液晶初始化這里就不敘述了,比較復雜。4.3 文件系統FATFS移植FATFS是一個完全免費開源的FAT 文件系統模塊,用一系列宏定義來定義相關參數,可移植性性、封裝性極強,可應用于各種小型嵌入式處理器中。移植該文件系統時,一般我們只需要修

42、改2個文件:配置文件ffconf.h和底層驅動文件diskio.c。配置文件主要是修改模塊參數來符合我們的需求,底層驅動文件主要實現系統硬件底層與API函數兼容。接下來我們將介紹如何配置ffconf.h中幾個重要的參數,這些參數都是通過宏定義來實現的,可移植性強。首先我們需要使用的是文件系統FATFS,所以_FS_TINY后面的宏定義選項改為0;接著我們需要快速定位文件或文件夾,所以將_USE_FASTSEEK設置為1;語言選項_CODE_PAGE我們設置為936,也就是GBK,不過需要有FATFS源碼中option文件夾下的936.c文件;然后我們需要設置FATFS支持的邏輯設備數目,本系統

43、中主要是對SD卡操作,所以_VOLUMES設置為1;由于可能會使用到長文件名,所以我們可以將_USE_LFN設置為3;最后我們還需要設置下扇區緩沖的最大值_MAX_SS為512,即512字節。這里就不敘述了其他配置項,integer.h中的數據類型這里也不用改了,因為與STM32數據類型兼容。接下里我們只要改寫底層diskio.c的代碼就行了,關于文件系統移植,我們就大概介紹到這。4.4 漢字字庫因為本系統需要顯示中英文短信,所以需要漢字字庫。漢字字庫需要借助文件系統將SD中存放的字庫文件燒入到Flash中,然后每次顯示中文時,直接到Flash中找出相對應的漢字點陣數據。4.4.1 更新字庫本

44、部分需要實現從SD卡中燒入字庫到外擴SPI Flash中,并且實時顯示進度。首先,我們初始化SPI Flash,SD卡是否存在,然后我們依次更新字庫,在更新的同時,同時顯示進度。相關參數定義如下:#define UGBK 0#define GBK12 0x01#define GBK16 0x02#define GBK24 0x04#define CHAR24 0x08#define CHAR32 0x10u32 FONTINFOADDR=0;_font_info_ ftinfo;/在SD卡中的路徑const u8 *GBK24_SDPATH="0:/SYSTEM/FONT/GBK24

45、.FON"const u8 *CHAR24_SDPATH="0:/SYSTEM/FONT/CHAR24.FON"const u8 *CHAR32_SDPATH="0:/SYSTEM/FONT/CHAR32.FON" 具體函數原型如下: u8 font_init(void);/字庫初始化 u8 update_fontx(u16 x,u16 y,u8 size,u8 *fxpath,u8 fx);/更新指定字庫 u8 update_font(u16 x,u16 y,u8 size,u8 src);/更新全部字庫 u32 fupd_prog(u16

46、x,u16 y,u8 size,u32 fsize,u32 pos);/顯示更新進度 4.4.2 查找漢字每個GBK碼由2個字節組成,第一個字節為0x81-0xfe,第二個字節分為兩部分,一是0x40-0x7e,二是0x80-0xfe。這樣,假設Ch為某漢字的第一個字節,Cl為第二個字節,漢字字體的大小用size表示,我們從地址0處開始存放字庫,那么我們就可以得出該漢字點陣數據在字庫里的起始地址X的公式: 當Cl<0x7f時:X=(Ch-0x81)*190+Cl-0x40)*(size*size/8); 當Cl>0x80時:X=(Ch-0x81)*190+Cl-0x41)*(siz

47、e*size/8); 以上論述程序實現具體如下:void Get_HzMat(u8 *code,u8 *mat,u8 size) u8 qh,ql;u8 i; u32 foffset; u8 size0;if(bHz)/中文 qh=*code;ql=*(+code);if(size=12) size0=16;else size0=size;if(qh<0x81|ql<0x40|ql=0xff|qh=0xff) for(i=0;i<(size*2);i+)*mat+=0x00;return; if(ql<0x7f)ql-=0x40;else ql-=0x41;qh-=0x

48、81; foffset=(unsigned long)190*qh+ql)*(size*size0/8);/得到字庫中的字節偏移量 switch(size)case16:SPI_Flash_Read(mat,foffset+ftinfo.f16addr,32);break;case12:SPI_Flash_Read(mat,foffset+ftinfo.f12addr,24);break;case24:SPI_Flash_Read(mat,foffset+ftinfo.f24addr,72);break;case32:SPI_Flash_Read(mat,foffset+ftinfo.f32a

49、ddr,128);break;default:break; else/字符ql=*code;size0=size*(size/8);if(ql<0x20|ql>0x98) for(i=0;i<size0/2;i+)*mat+=0x00; return;ql-=0x20;foffset=(unsigned long)ql*size0/2;if(size=24) SPI_Flash_Read(mat,foffset+ftinfo.chr24addr,size0/2);/目前只支持CHAR24、32字體else if(size=32) SPI_Flash_Read(mat,foff

50、set+ftinfo.chr32addr,size0/2); 經過上面調用上面的函數,我們可以得到漢字在字庫中的首地址,這樣我們只要依次取出size*size/8(12號字體除外)個數據,在LCD上畫點,就可以顯示該漢字了。具體實現如下: void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)u8 temp,t,t1;u16 y0=y;u8 dzk128;u16 tempcolor; u8 size0;Get_HzMat(font,dzk,size);if(bHz)if(size=12) size0=16;else size0=size; el

51、se size0=size;/字符串字庫if(mode=0) for(t=0;t<size/(2-bHz)*(size0/8);t+) temp=dzkt; for(t1=0;t1<8;t1+)if(temp&0x80)LCD_DrawPoint(x,y);else tempcolor=POINT_COLOR;POINT_COLOR=BACK_COLOR;LCD_DrawPoint(x,y);POINT_COLOR=tempcolor;temp<<=1;y+;if(y-y0)=size)y=y0;x+;break; elsefor(t=0;t<size/(

52、2-bHz)*(size0/8);t+) temp=dzkt; for(t1=0;t1<8;t1+)if(temp&0x80)LCD_DrawPoint(x,y); temp<<=1;y+;if(y-y0)=size)y=y0;x+;break; 4.5 觸摸屏模塊相對于鼠標這種相對坐標系統,觸摸屏則是一種絕對坐標系統,其特點就是每次坐標定位與上次定位無關,每次觸摸后的數據都會經過高精度AD采樣轉化為物理坐標,所以控制芯片對于同一點觸摸后的輸出數據理論上來講應該是相同的。但是實際上由于技術上的原因,在同一點的多次采樣數據并不一定能保證完全一致,從而可能導致點不準,這也

53、就是所謂的漂移現象,所以有時需要自己手動校準。觸摸屏實際坐標與控制芯片采集到的物理坐標是線性關系,即一次函數關系。所以我們只要測出兩個固定坐標點的物理坐標,我們就可以確定該一次函數的兩個系數,這樣,我們就可以測出任何一個物理坐標即控制芯片采集的數字量所對應的絕對坐標即LCD像素坐標。但是通過兩個點測出的數據存在誤差。所以我們需要檢測更多的點然后結合一定的算法去減小誤差。 通過上述描述,采用的校準程序思路大致如下:只要事先在屏幕上面顯示4個點比如點1、點2、點3、點4(這四個點的坐標是已知的),組成一個矩形,如圖4.1所示。分別按下這四個點就可以從觸摸屏讀到4個物理坐標,然后我們通過一定的算法判

54、定是否合法。具體算法如下:2 31124圖4.1 校準四點圖1) 檢測矩形對邊相等:對平行的點1和點2作差,點3和點4也是,對比兩者只差是否在一定的誤差范圍內。然后再對點1和點3作差,點2和點4作差,對比兩者只差是否在一定的誤差范圍內。2) 檢測矩形對角線是否相等:對點1和點3的距離,點2和點4的距離對比,是否在一定的范圍誤差內。經過上述的算法,如果都符合,說明在誤差范圍內觸摸屏已經校準好,然后這樣算出兩個坐標線性關系的四個參數即兩個斜率和截距。接著我們把這四個參數保存在AT24C02中,這樣以后就可以推算出準確的坐標,從而達到了校準的目的。同時為了避免每次上電都需要重新校準,我們可以設置一個標志位,來保存是否已經校準,這時我們就可以借助EEPROM,即使掉電也可以保存數據。同時我們還要將兩個觸摸屏的重要參數保存下來。在系統程序中,我們還可以設置一個按鍵用來強制校準,即用戶任何時候都可以校準程序,不過本系統設計時,只能在STM32復位后很短的一段

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論