鐘濤+祝玲
【摘要】 嵌入式設備雖然遍布我們生活中,但嵌入式設備的人機交互問題還沒有完美的解決方案;在新環境下不論是傳統的LCD顯示器或者是OLED顯示屏都已無法滿足多元的信息交互,在此背景下支持多元素的信息交互系統emWin已經誕生并迅速發展成熟。此項目內容為利用STM32為硬件平臺,配合emWin系統實現圖形應用程序下的GSM通信服務,例如文本信息和語音撥號服務等。同時介紹了emWin系統的設計方法和開發流程,及系統后期維護與更新的相關事宜。
【關鍵字】 STM32 emWin系統 GSM/GPRS A6通信
一、引言
在嵌入式設備中,提高人機交互是所有嵌入式設備設計者必須考慮的首要問題;與以往不同,隨著科技的發展和各種電子成像技術的成熟,讓我們告別了傳統了黑白顯示屏。在嵌入式設備中,傳統的LCD1602、LCD12864以及OLED屏正逐步被擁有高像素的電容觸摸屏取代;與此同時,圖形應用程序的開發也迎來了一個新的挑戰。如何讓人機交互更加智能,如何讓圖像顯示技術更加美觀,如何在嵌入式系統上設計圖形應用程序成為了嵌入式設計開發的新問題。此項目以STM32為嵌入式硬件平臺,搭建emWin系統實現嵌入式圖形應用程序設計提供了重要技術支持。
二、The embedded experts windows manager
The embedded experts windows manager[1]簡稱emWin,是全球嵌入式大咖公司Segger針對嵌入式平臺圖形界面處理的優秀作品之一;其通過豐富的圖形軟件庫,即可讓嵌入式界面應用開發變得簡單而快捷。同時,emWin提供了繪制2D圖形、顯示位圖文件、顯示文字信息、處理用戶輸入等功能大大解決了人機交互的設計難題。與Micrium公司的uC/OS系統相比,由于Segger公司向ST公司出售了emWin版權,所以當我們在STM32芯片上使用emWin時就免去了昂貴的版權費用。
三、項目架構
3.1 項目總體架構:STM32+GSM+emWin
利用STM32為硬件支持平臺并自定義開發出可以在此平臺上流暢運行的emWin系統,同時配置GSM通信功能,實現STM32單片機、GSM通信服務和emWin系統結合,達到利用emWin系統處理人機交互,呈現圖形應用等功能,例如開發圖形應用程序完成文本短信發送、撥打語音電話等。
在技術上,采用兩個模塊實現此項目:
其一:emWin系統采用獨立的STM32單片機控制,即在一塊STM32單片機上設計并運行emWin系統,同時預留出其串口協議通信引腳,即RX、TX和GND引腳。
其二:用第二塊STM32單片機實現GSM通信功能,然后利用emWin主機預留的串口協議端口進行雙機通信即可使用串口協議發送圖形應用程序控制指令到enWin機,從而實現enWin的控制。在人機交互上,用戶通過圖形用用程序輸入短信文本信息或者語音撥號號碼,emWin獲取后即可配合GSM機實現短信或撥號服務。
3.2元器選型
在Cortex-M3和Contex-M4家族系列中,由于內存大小、外設支持度、內核差異等因素把STM32單片機分為許多型號,此項目選用型號為STM32F103ZET6的Cortex-M3單片機作為emWin系統的硬件平臺。其72MHz的主頻、64KB的SRAM、512KB的FLASH已經足夠運行emWin系統,同時由于Cortex-M3系列單片機支持FSMC接口,所以在讓硬件電路更容易實現。
市場上支持文本短信內容發送、撥打語言電話的處理芯片很多,例如SIM800A、SIM900A等經典應用芯片。但,為了項目后期的拓展方便,此項目選擇GSM/GPRS A6作為通信芯片,其支持850、900、1800和1900MHz四個頻段,同時支持一個下載串口,一個AT命令口,非常易于和STM32單片機通信。
四、在STM32上進行emWin系統設計
由于Segger公司向ST公司出售了版權,所以當我們在STM32上使用emWin時可以到Segger官網注冊賬戶并下載emWin基礎軟件庫即可。在emWin基礎軟件庫中包含Config、Documentation、inc、Lib、OS、Software等目錄;其中Config文件用于配置emWin的存儲空間等信息,inc文件包含了emWin基礎庫核心頭文件,Lib文件包含了針對于Cortex-M3和M4不同內核、不同開發環境的庫文件。
4.1 創建自定義庫
在emWin提供的基礎源碼庫上創建自定義庫是較為容易的。首先復制基礎庫中Sample\Makelib到根目錄下,并根據需要進行必要修改;其中Makelib.bat為啟動文件,Prep. bat為要使用的工具鏈準備環境,cc.bat由Makelib.bat調用。
4.2 emWin輸入輸出交互
經過對emWin基礎庫的改寫和二次封裝我們可以讓emWin輕松幫助我們完成一些輸出交互任務,例如輸出字符可以調用:GUI_DispString("Hello world!");除此之外emWin還可以很輕松幫助我們顯示圖形,應值得注意的是目前emWin僅支持顯示BMP、JPEG、GIF和PNG格式的圖片文件,其原因是因為emWin內核暫不支持其他格式的圖象文件;但對于嵌入式設備來說,emWin支持這四種格式已經非常強大了,因為嵌入式設備的專用性決定了其使用場景。
除此之外,emWin還支持包含觸摸屏、鼠標、游戲操作桿等指針輸入設備,可以說只要有設備適當的驅動,想要實現多元豐富emWin的輸入交互是完全有可能的。例如當我們想要判斷用戶的鼠標輸入是否啟動,我們可以調用GUI_ PID_GetState()函數來實現,每當鼠標執行按下或者松開動作時GUI_PID_GetState()都會記錄下其狀態,其中用1表示鼠標被按下,否則用0表示鼠標松開。
4.3 讓emWin支持多種語言
在傳統的人機交互設備中,基本上不支持除英語外的其他語言;隨著emWin成長,多國外語支持已經不再是嵌入式設備多元交互的難題。EmWin支持根據Unicode標準定義的字符或者字符串,但前提是要預先使用GUI_UC_ ConvertUTF82UC( )將UTF-8文本轉換成C編碼。
另外,emWin作為嵌入式圖形應用開發系統來說較為神奇的是其支持阿拉伯語和泰語;由于阿拉伯語是從右往左書寫,并且不區分大小寫,所以傳統的Unicode處理方式對阿拉伯語并不適用,此時emWin使用記號形式來表示字符。對泰語而言,由于其采用了符合字符,要想完成對泰語的編碼和解碼,這時候就需要創建一個擴展類型的字體文件。
4.4 模擬驗證
當我們用PC設計好自己的圖形界面應用后,可以使用Microsoft Visual C++來模擬、驗證圖形應用的功能是否完善。具體方法操作如下:
第1步:雙擊SimulationTrial.dsw,打開Visual C++工作空間
第2步:從菜單欄選擇Build/Rebuild All,重建項目
第3步:從菜單欄選擇Build/Start Debug/Go,啟動模擬
應特別注意:使用PC軟件模擬時由于其硬件平臺與嵌入式平臺差異,所以在響應時間、圖像呈現、分辨率上存在一定差異。所以謹慎使用模擬功能。