肖林京,于鵬杰,于志豪,常 龍,岳明臣
(山東科技大學(xué) 機(jī)械電子工程學(xué)院,山東 青島 266590)
基于STM32和emWin圖形庫(kù)的液晶顯示系統(tǒng)設(shè)計(jì)
肖林京,于鵬杰,于志豪,常 龍,岳明臣
(山東科技大學(xué) 機(jī)械電子工程學(xué)院,山東 青島 266590)
為了滿足現(xiàn)代電子產(chǎn)品對(duì)液晶顯示的個(gè)性化需求,以STM32微控制器為核心,應(yīng)用emWin圖形庫(kù)設(shè)計(jì)了一種液晶顯示系統(tǒng)。在分析了STM32微控制器和emWin圖形庫(kù)優(yōu)越性的基礎(chǔ)上,詳細(xì)介紹了液晶顯示系統(tǒng)的硬件設(shè)計(jì)和emWin圖形庫(kù)在STM32平臺(tái)的移植過程。最后對(duì)液晶顯示系統(tǒng)進(jìn)行實(shí)驗(yàn)驗(yàn)證,結(jié)果表明該液晶顯示系統(tǒng)顯示穩(wěn)定、性能可靠、界面友好,具有很好的實(shí)用效果。
液晶顯示系統(tǒng);STM32微控制器;emWin圖形庫(kù);移植
目前,隨著液晶器件制造工藝的不斷完善和生產(chǎn)成本的不斷降低,液晶器件在各類電子產(chǎn)品中應(yīng)用越來越廣泛。同時(shí),液晶器件具有體積小、功耗低、顯示信息量大、壽命長(zhǎng)、不產(chǎn)生電磁輻射污染、可以顯示復(fù)雜的文字和圖片等優(yōu)點(diǎn)[1-2],在未來的顯示終端領(lǐng)域?qū)⒕哂袕V闊的發(fā)展前景。
STM32微控制器是意法半導(dǎo)體(ST)公司生產(chǎn)的32位ARM處理器。該處理器具有內(nèi)部資源豐富、擴(kuò)展能力強(qiáng)、功率消耗低、價(jià)格便宜等優(yōu)點(diǎn),已逐漸成為32位微控制器中的理想器件。emWin圖形庫(kù)是一款用于嵌入式開發(fā)的通用圖形軟件包,其所有軟件模塊均為C語(yǔ)言源代碼設(shè)計(jì)[3],可以支持任何CPU和幾乎所有顯示器。同時(shí),由于emWin圖形庫(kù)的源代碼是開放的,使其開發(fā)使用難度大大降低。因此,將兩者優(yōu)點(diǎn)結(jié)合起來設(shè)計(jì)一種液晶顯示系統(tǒng)具有積極的實(shí)際應(yīng)用價(jià)值。
液晶顯示系統(tǒng)采用STM32F103系列的微控制器作為主控制芯片,根據(jù)實(shí)際的顯示需求,設(shè)計(jì)了多個(gè)功能模塊,共同完成系統(tǒng)數(shù)據(jù)的接收、轉(zhuǎn)換、報(bào)警和顯示。系統(tǒng)的硬件結(jié)構(gòu)如圖1所示,該系統(tǒng)硬件主要由STM32F103微控制器、CAN總線接口、液晶顯示接口、報(bào)警輸出接口組成。同時(shí),還包括電源、擴(kuò)展Flash、按鍵和報(bào)警器等外設(shè)。其中,STM32F103微控制器是該液晶顯示系統(tǒng)的核心部分,完成系統(tǒng)信息的處理以及對(duì)外設(shè)的控制和管理;CAN總線接口是該液晶顯示系統(tǒng)與外部其他系統(tǒng)信息交互的通道,顯示系統(tǒng)通過CAN總線接口從CAN通信網(wǎng)絡(luò)中獲取顯示信息;液晶顯示接口是液晶屏的驅(qū)動(dòng)接口,實(shí)現(xiàn)了STM32F103微控制器與液晶屏內(nèi)置的LCD控制器之間的連接;報(bào)警輸出接口主要進(jìn)行報(bào)警信號(hào)的功率放大,完成對(duì)報(bào)警器的驅(qū)動(dòng)。
1.1 STM32F103微控制器
STM32F103系列微控制器是新一代基于ARMv7-M體系結(jié)構(gòu)的嵌入式ARM處理器。其內(nèi)部采用了32位標(biāo)準(zhǔn)RISC(精簡(jiǎn)指令集),提供了很高的代碼效率[4]。該液晶顯示系統(tǒng)使用的控制器具體型號(hào)是STM32F103VCT6,其最高工作頻率72 MHz;工作電壓為2.0~3.6 V;具有休眠、停止、待機(jī)3種低功耗模式;擁有多個(gè)通信接口、定時(shí)器、中斷源和外設(shè)。此外,該款微控制器內(nèi)部還集成了 FSMC(靈活的靜態(tài)存儲(chǔ)器控制器),能夠直接支持8080總線接口的LCD控制器[5]。
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖
1.2 液晶屏及其接口電路
該液晶顯示系統(tǒng)選用型號(hào)為DST2001PH的 2.8 in(1 in=2.54 cm)TFT液晶屏作為顯示終端,其內(nèi)置ILI9320 LCD控制器,采用320×240的屏幕分辨率,支持16 位的 8080并行接口,使用565RGB真彩顯示模式[6],內(nèi)部自帶顯存,正常工作電壓為2.8~3.3 V。此外,該液晶屏還具有抗干擾能力強(qiáng)和電磁兼容性好的特點(diǎn)。
根據(jù)ILI9320 LCD控制器的顯示控制機(jī)理,其內(nèi)部RAM可以看作不帶地址總線的靜態(tài)隨機(jī)存儲(chǔ)器,STM32微控制器通過將相應(yīng)的GPIO口設(shè)置工作在FSMC總線方式[7]下,按照16位的8080并行接口的通信要求,以訪問靜態(tài)隨機(jī)存儲(chǔ)器的形式訪問LCD控制器,實(shí)現(xiàn)對(duì)LCD控制器的驅(qū)動(dòng)控制。其中,ILI9320 LCD控制器的信號(hào)線包括:數(shù)據(jù)總線DB[15∶0]、片選信號(hào)CS、命令/數(shù)據(jù)轉(zhuǎn)換信號(hào)RS、讀數(shù)據(jù)信號(hào)RD、寫數(shù)據(jù)信號(hào)WR,與之對(duì)應(yīng)相連接的FSMC信號(hào)線為數(shù)據(jù)總線FSMC _D[15∶0]、地址信號(hào)FSMC_ A16、片選FSMC_NE1、讀使能FSMC_NOE、寫使能FSMC_NWE。具體的液晶屏接口電路連接圖如圖2所示。
1.3 CAN總線接口電路
CAN總線由于布線簡(jiǎn)單,成本低廉,可靠性高,已越來越多的應(yīng)用于測(cè)量控制系統(tǒng)和工業(yè)控制現(xiàn)場(chǎng)中。本系統(tǒng)CAN總線接口主要是用于接收CAN網(wǎng)絡(luò)中的各種顯示信息。STM32F103VCT6微控制器自帶2個(gè)CAN通信的接口,其支持CAN協(xié)議2.0A和2.0B。該接口電路主要由CAN總線收發(fā)器和隔離芯片組成。其中,CAN總線收發(fā)器選用了具有差動(dòng)接收和發(fā)送能力的PCA82C250芯片;隔離芯片選用雙通道數(shù)字隔離器ADUM1201芯片。
圖2 液晶屏接口電路連接圖
1.4 報(bào)警輸出接口電路
液晶顯示系統(tǒng)進(jìn)行信息顯示過程中,為了能夠?qū)邮盏漠惓P畔⑦M(jìn)行提示,系統(tǒng)需要有報(bào)警器。報(bào)警輸出接口電路作為STM32F103微控制器驅(qū)動(dòng)報(bào)警器的接口電路,主要由功率放大電路和隔離電路組成。隔離電路通過選用的可控制光電耦合器件TLP521芯片,實(shí)現(xiàn)微控制器與功率放大電路之間的隔離,減少了功率放大電路對(duì)微控制器的干擾;功率放大電路選用SS9013三極管,利用其電流放大特性,對(duì)報(bào)警信號(hào)進(jìn)行功率放大,實(shí)現(xiàn)對(duì)報(bào)警器的驅(qū)動(dòng)。
液晶顯示系統(tǒng)軟件部分設(shè)計(jì)的主要任務(wù)有emWin圖形庫(kù)在STM32平臺(tái)的移植和系統(tǒng)顯示界面整體程序的編寫。
2.1 emWin圖形庫(kù)在STM32平臺(tái)的移植
2.1.1 emWin的層次結(jié)構(gòu)
emWin作為一種復(fù)雜高效的圖形用戶界面,可以移植到眾多顯示控制器和操作系統(tǒng)中,具有模塊化的特點(diǎn),并采用分層結(jié)構(gòu)[3]。如圖3所示,emWin主要包括應(yīng)用層、圖形庫(kù)層、驅(qū)動(dòng)層和硬件層4個(gè)層次。在emWin完成顯示的過程中,應(yīng)用層中的用戶應(yīng)用程序先調(diào)用圖形庫(kù)層的功能函數(shù),然后各個(gè)功能函數(shù)通過驅(qū)動(dòng)層的底層驅(qū)動(dòng)函數(shù),實(shí)現(xiàn)對(duì)硬件的電路驅(qū)動(dòng),完成顯示界面的顯示。
2.1.2 emWin圖形庫(kù)的移植
emWin圖形庫(kù)的移植是在MDK-ARM 5.0開發(fā)環(huán)境中完成的,使用的emWin圖形庫(kù)是NXP公司公開提供的版本為emWin V5.18圖形庫(kù),該庫(kù)提供了圖形用戶界面設(shè)計(jì)所需要的豐富控件集。emWin圖形庫(kù)的移植過程主要分為4部分:添加相應(yīng)文件到項(xiàng)目工程中;配置LCD文件;配置GUI文件;編寫底層驅(qū)動(dòng)函數(shù)。
1)添加相應(yīng)文件到項(xiàng)目工程中
emWin圖形庫(kù)的移植,首先需要在emWin V5.18圖形庫(kù)中選擇相應(yīng)的底層配置文件和庫(kù)文件,添加到MDK-ARM 5.0開發(fā)環(huán)境中的項(xiàng)目工程里。然后通過對(duì)底層配置文件進(jìn)行相應(yīng)修改,使得emWin圖形庫(kù)能夠在項(xiàng)目工程中正常運(yùn)行。其中,添加的底層配置文件包括LCD文件(LCDConf.c和LCDConf.h)、GUI文件(GUIConf.c和GUIConf.h)和時(shí)間文件(GUI_X.c);庫(kù)文件需添加與STM32F103微控制器Cortex-M3內(nèi)核相對(duì)應(yīng)的 emWin_518_ Keil4_M3_ LE.lib 庫(kù)文件。
圖3 emWin層次結(jié)構(gòu)圖
2)配置LCD文件
LCD文件主要是對(duì)LCD控制器進(jìn)行的配置。根據(jù)液晶屏的參數(shù),通過修改LCD文件中相應(yīng)的宏定義,一方面完成LCD控制器的顯示尺寸、顯示方向、顏色模式和顯示驅(qū)動(dòng)等部分的配置,另一方面根據(jù)液晶屏接口電路連接情況完成對(duì)LCD控制器的命令寄存器和數(shù)據(jù)寄存器地址進(jìn)行配置。配置如下:
/*定義顯示屏顯示尺寸*/
#define XSIZE_PHYS 240
#define YSIZE_PHYS 320
/*定義顏色模式*/
#define COLOR_CONVERSION GUICC_565
/*選擇ili9320 LCD控制器*/
#define LCD_CONTROLLER 9320
/*選擇支持ili9320控制器的顯示驅(qū)動(dòng)*/
#define DISPLAY_DRIVER GUIDRV_FLEXCOLOR
/*設(shè)置命令寄存器地址*/
#define LCD_REG_ADDRESS(*((volatile U16 *)(0x60000000UL)))
/*設(shè)置數(shù)據(jù)寄存器地址*/
#define LCD_DAT_ADDRESS(*((volatile U16 *)(0x60020000UL)))
/*定義顯示屏顯示方向*/
#define GUI_SWAP_XY(1)
3)配置GUI文件
GUI文件主要是對(duì)emWin圖形庫(kù)的顯示緩沖區(qū)、顏色字體以及一些高層次的可用功能進(jìn)行的配置。配置如下:
#define GUI_NUMBYTES(1024)*72//設(shè)置emWin動(dòng)態(tài)顯示緩沖區(qū)大小
#define GUI_DEFAULT_FONT &GUI_Font6x8//設(shè)置默認(rèn)字體
#define GUI_DEFAULT_BKCOLOR GUI_BLACK//設(shè)置背景顏色
#define GUI_DEFAULT_COLOR GUI_WHITE//設(shè)置前景顏色
#define GUI_OS 0//設(shè)置emWin支持多任務(wù)
#define GUI_SUPPORT_TOUCH 0//設(shè)置支持可選觸摸屏
#define GUI_SUPPORT_MOUSE 0//設(shè)置支持可選鼠標(biāo)
#define GUI_WINSUPPORT 1//設(shè)置支持可選窗口管理器
#define GUI_SUPPORT_MEMDEV 1//設(shè)置支持可選存儲(chǔ)設(shè)備
#define GUI_SUPPORT_ROTATION1//設(shè)置支持文字旋轉(zhuǎn)
#define WM_SUPPORT_STATIC_MEMDEV 1//設(shè)置支持靜態(tài)存儲(chǔ)設(shè)備
#define GUI_NUM_LAYERS 16//設(shè)置可用層/顯示器的最大數(shù)量
4)編寫底層驅(qū)動(dòng)函數(shù)
底層驅(qū)動(dòng)函數(shù)是LCD驅(qū)動(dòng)程序中最底層的函數(shù)。底層驅(qū)動(dòng)函數(shù)主要包括LCD初始化函數(shù)和LCD顯示緩沖區(qū)讀寫函數(shù)。emWin圖形庫(kù)中所有其他的功能函數(shù)都是通過調(diào)用這些底層驅(qū)動(dòng)函數(shù)來實(shí)現(xiàn)其各自的功能的。
STM32F103微控制器是以總線上模擬的8080接口與ILI9320 LCD控制器連接的,其采用16位的并口模式對(duì)顯示屏進(jìn)行控制[8]。微控制器通過FSMC的A16地址線的高低電平(A16=0/A16=1),實(shí)現(xiàn)對(duì)ILI9320 LCD控制器命令操作和數(shù)據(jù)操作的區(qū)分。當(dāng)A16地址線為高電平時(shí),通過底層寫函數(shù)ili9320_Write()向LCD控制器寫入數(shù)據(jù),通過底層讀函數(shù)ili9320_Read()讀取LCD控制器的數(shù)據(jù)。當(dāng)A16地址線為低電平時(shí),通過底層寫函數(shù)ili9320_Write()向LCD控制器寫入命令,通過底層讀函數(shù)ili9320_Read()讀取LCD控制器寄存器值。因此,編寫底層驅(qū)動(dòng)函數(shù)只需完成對(duì)底層寫函數(shù)ili9320_Write()和底層讀函數(shù)ili9320_Read()的編寫。編寫底層函數(shù)代碼如下:
//*LCD控制器初始化*//
voidili9320_int(){
ili9320_set_cs();
ili9320_clr_reset();
GUI_X_Delay(50);
ili9320_set_reset();
GUI_X_Delay(50);
}
//*底層寫函數(shù)*//
void ili9320_Write (uint16_t c){
ili9320_data_out_L = (unsigned char)c;
ili9320_ data_out_H = c >> 8;
ili9320_clr_cs();
ili9320_clr_wr();
ili9320_set_cs();
ili9320_set_wr();
}
//*底層讀函數(shù)*//
uint16_t ili9320_ Read(uint16_t c){
ili9320_clr_cs();
ili9320_clr_rd();
c =ili9320_data_in_L | ((uint16_t ) ili9320_data_in_H << 8;
ili9320_set_cs();
ili9320_set_rd();
}
2.2 系統(tǒng)程序流程圖
系統(tǒng)程序的流程如圖4所示。系統(tǒng)首先需要對(duì)STM32F103微控制器進(jìn)行初始化,初始化主要是對(duì)其內(nèi)部的系統(tǒng)時(shí)鐘、通用I/O口、中斷控制器、CAN控制器和定時(shí)器等資源進(jìn)行設(shè)置;接著初始化emWin圖形庫(kù)和運(yùn)行系統(tǒng)主要程序。系統(tǒng)根據(jù)實(shí)際的顯示需求,對(duì)主要程序中的任務(wù)設(shè)置了不同的優(yōu)先級(jí),保證了系統(tǒng)中不同任務(wù)的有序運(yùn)行。系統(tǒng)主要程序中先判斷是否接收到新的CAN報(bào)文,對(duì)接收的新報(bào)文信息進(jìn)行處理和顯示;再通過中斷的方式判斷是否有界面切換按鍵信息和報(bào)警信息出現(xiàn),實(shí)現(xiàn)相應(yīng)的界面切換和異常信息的報(bào)警。
圖4 系統(tǒng)程序流程框圖
3.1 搭建實(shí)驗(yàn)平臺(tái)
為驗(yàn)證該液晶顯示系統(tǒng)的顯示效果,在設(shè)計(jì)的硬件電路圖基礎(chǔ)上,制作完成本系統(tǒng)的實(shí)驗(yàn)電路板,并配置相應(yīng)的開關(guān)按鍵、報(bào)警器、液晶顯示屏等外設(shè),形成了能夠滿足實(shí)際需求的液晶顯示系統(tǒng)實(shí)驗(yàn)平臺(tái)。具體的實(shí)物如圖5所示。
圖5 液晶顯示系統(tǒng)實(shí)物圖
3.2 實(shí)驗(yàn)應(yīng)用及結(jié)果顯示
將文中的液晶顯示系統(tǒng)應(yīng)用到鋰離子蓄電池礦用電機(jī)車電池管理系統(tǒng)中,該系統(tǒng)通過CAN總線接口接收電池管理系統(tǒng)其他模塊發(fā)送的電池信息,實(shí)現(xiàn)了電機(jī)車電池管理系統(tǒng)中各個(gè)電池模塊的電壓、電流、剩余電量等信息的詳細(xì)顯示。顯示結(jié)果從如圖6可以看出。
圖6 液晶顯示結(jié)果圖
本文以STM32微控制器和2.8 in的TFT-LCD液晶屏作為硬件基礎(chǔ),軟件方面采用了emWin圖形庫(kù),通過軟硬件的結(jié)合,設(shè)計(jì)完成了一種液晶顯示系統(tǒng)。經(jīng)實(shí)驗(yàn)驗(yàn)證,設(shè)計(jì)的液晶顯示系統(tǒng),具有編程簡(jiǎn)單、運(yùn)行穩(wěn)定、顯示界面友好等優(yōu)點(diǎn),可滿足不同場(chǎng)合的顯示要求,具有很強(qiáng)的實(shí)用價(jià)值。
[1]龍燕,李劍鋒,曹科峰,等.以FPGA為核心的液晶顯示電路設(shè)計(jì)與實(shí)現(xiàn)[J].液晶與顯示,2006,21(3):274-278.
[2]彭志紅,袁野,林韻英,等.國(guó)內(nèi)液晶顯示技術(shù)的發(fā)展概況[J],電視技術(shù),2013,37(S2):425-426.
[3]陳新,蒲慶文.基于emWin圖形庫(kù)的電動(dòng)汽車液晶儀表設(shè)計(jì)[J].儀表技術(shù)與傳感器,2013(7):105-107.
[4]孫書鷹,陳志佳,寇超. 新一代嵌入式微控制器STM32F103開發(fā)與應(yīng)用[J].微型計(jì)算機(jī)應(yīng)用,2010,31(12):59-63.
[5]孫林軍,賀鋒濤.基于STM32控制器液晶的接口實(shí)現(xiàn)[J],電視技術(shù),2013,37(1):77-79.
[6]周立功,張華.深入淺出ARM7[M].北京:北京航天航空大學(xué)出版社,2008.
[7]王蘭英.基于STM32嵌入式系統(tǒng)的uCGUI移植與實(shí)現(xiàn)[J].四川理工學(xué)院學(xué)報(bào):自然科學(xué)版,2012,25(1):56-58.
[8]石億,黃輝先,趙娟,等.uC/OS-II與uC/GUI在Cortex-M3上的移植研究與實(shí)現(xiàn)[J].微型計(jì)算機(jī)信息,2012,28(9):159-161.
Design of LCD Display System Based on STM32 and emWin
XIAO Linjing,YU Pengjie,YU Zhihao,CHANG Long,YUE Mingchen
(CollegeofMechanicalandElectronicEngineering,ShandongUniversityofScienceandTechnology,ShandongQingdao266590,China)
In order to meet the personalized needs of modern electronic products for liquid crystal display, a LCD display system is designed in this paper, which is based on STM32 micro controller and the application of emWin graphics library. Based on the analysis of the superiority of STM32 micro controller and emWin graphics library, the hardware design of the LCD display system and the transplant of emWin graphic library in STM32 platform in detail are introduced. Finally, the LCD display system is verified through a practical experiment. The results show that the LCD display system is steady, reliable, user-friendly and has a good practical effect.
LCD display system; STM32 micro controller; emWin graphic library; transplant
山東省科技發(fā)展計(jì)劃項(xiàng)目(2012GSF11606)
TN27
A
10.16280/j.videoe.2015.01.010
2014-06-06
【本文獻(xiàn)信息】肖林京,于鵬杰,于志豪,等.基于STM32和emWin圖形庫(kù)的液晶顯示系統(tǒng)設(shè)計(jì)[J].電視技術(shù),2015,39(1).
肖林京(1966— ),教授,博士生導(dǎo)師,主要從事煤礦機(jī)電一體化、煤礦新能源車輛方面的研究;
于鵬杰(1990— ),碩士生,主研弱信號(hào)檢測(cè)和現(xiàn)場(chǎng)總線通信技術(shù)。
責(zé)任編輯:許 盈