任克強(qiáng),王傳強(qiáng)
(江西理工大學(xué) 信息工程學(xué)院,江西 贛州 341000)
TFT液晶屏是嵌入式系統(tǒng)中重要的組成部分,但由于TFT液晶屏驅(qū)動(dòng)較為復(fù)雜,對(duì)處理器有較高的要求,在大部分8位和16位機(jī)、部分32位機(jī)中較難實(shí)現(xiàn)驅(qū)動(dòng)。文獻(xiàn)[1]和文獻(xiàn)[2]利用STM32處理器的FSMC功能實(shí)現(xiàn)了對(duì)TFT液晶屏的驅(qū)動(dòng),但此方法具有一定的局限性,只能在具有FSMC功能的處理器中實(shí)現(xiàn)TFT液晶屏的驅(qū)動(dòng),無(wú)法滿足沒(méi)有FSMC功能的處理器(如51單片機(jī)等處理器[3-4])驅(qū)動(dòng)TFT液晶屏的需求。
針對(duì)上述問(wèn)題,本文設(shè)計(jì)了一種多通道串口控制驅(qū)動(dòng)MUC接口模式的TFT液晶屏的顯示系統(tǒng),該系統(tǒng)提供4個(gè)控制TFT液晶屏的串口通道,使用TFT液晶屏的外部處理器只需有串口或通過(guò)I/O口模擬串口就可以使用TFT液晶屏,簡(jiǎn)化了TFT液晶屏驅(qū)動(dòng)和使用,降低了使用TFT液晶屏外部處理器的功能要求,拓展了TFT液晶屏的適應(yīng)性和使用范圍。
本文設(shè)計(jì)的TFT液晶屏顯示系統(tǒng)由STM32F4處理器和TFT液晶屏兩大部分組成,硬件框圖如圖1所示。
圖1 系統(tǒng)硬件框圖Fig.1 Hardware framework of system
利用STM32F4的FSMC功能驅(qū)動(dòng)TFT液晶屏,并通過(guò)其串口向使用TFT液晶顯示系統(tǒng)的外部處理器提供控制通道。STM32F4的時(shí)鐘頻率高達(dá)168 MHz,具有8個(gè)串行口和1個(gè)FSMC接口,可模擬8080時(shí)序驅(qū)動(dòng)TFT液晶屏[5-7]。最大支持4個(gè)通道同時(shí)接入,外部處理器通過(guò)串口訪問(wèn)STM32F4內(nèi)部預(yù)先燒錄的接口程序,實(shí)現(xiàn)對(duì)TFT液晶屏的控制。STM32F4處理器主存儲(chǔ)塊具有1 M FLASH,分為11個(gè)扇區(qū),主存儲(chǔ)塊FLASH扇區(qū)劃分如表1所示。本設(shè)計(jì)將這1 M的FLASH劃分為兩個(gè)部分,其中:扇區(qū)0~8為程序存儲(chǔ)區(qū),扇區(qū)9~11為漢字字庫(kù)存儲(chǔ)區(qū)。
液晶驅(qū)動(dòng)控制器是集成于TFT液晶屏的一個(gè)驅(qū)動(dòng)芯片,每種控制器具有唯一的序列號(hào),雖然控制器型號(hào)眾多,但大部分的底層驅(qū)動(dòng)方式是一樣的,可以通過(guò)STM32F4模擬8080時(shí)序進(jìn)行驅(qū)動(dòng),差別主要在于控制指令的不同。因此,為了可以兼容多種不同型號(hào)的MUC接口TFT液晶屏,本設(shè)計(jì)采用讀取液晶驅(qū)動(dòng)控制器的序列號(hào)進(jìn)行液晶屏的識(shí)別,從而執(zhí)行對(duì)應(yīng)屏幕型號(hào)的控制指令,實(shí)現(xiàn)多種不同型號(hào)液晶屏的驅(qū)動(dòng)。本文設(shè)計(jì)的TFT液晶顯示系統(tǒng)可驅(qū)動(dòng)60.1~177.8 mm(2.4~7 in)5種尺寸,包括ILI9341、IGDP453和SSD1936等15種不同驅(qū)動(dòng)芯片的MUC接口TFT液晶屏。
表1 STM32F4主存儲(chǔ)塊Flash扇區(qū)劃分
Tab.1 Sector division of FLASH in STM32F4 main memory
扇區(qū)號(hào)地址大小扇區(qū)00x08000000-0x08003FFF16 kB扇區(qū)10x08004000-0x08007FFF16 kB扇區(qū)20x08008000-0x0800BFFF16 kB扇區(qū)30x0800C000-0x0801FFFF16 kB扇區(qū)40x08020000-0x0803FFFF64 kB扇區(qū)50x08040000-0x0805FFFF128 kB???扇區(qū)90x080C0000-0x080DFFFF128 kB???扇區(qū)110x080E0000-0x080FFFFF128 kB
圖2 系統(tǒng)軟件流程圖Fig.2 Flow chart of system software
μC/OS-Ⅲ是一種可移植、可剪裁的實(shí)時(shí)多任務(wù)操作系統(tǒng),專為嵌入式系統(tǒng)設(shè)計(jì),可與應(yīng)用程序一起固化到ROM中。μC/OS-Ⅲ以其優(yōu)異的性能和較高的穩(wěn)定性已經(jīng)被移植到8位、16位、32位和64位等多種不同處理器中[8-11]。μC/OS-Ⅲ在處理器的RAM空間允許條件下,可創(chuàng)建無(wú)數(shù)任務(wù)。本文系統(tǒng)軟件全部是在μC/OS-Ⅲ操作系統(tǒng)的基礎(chǔ)上建立的。
系統(tǒng)軟件流程圖如圖2所示。程序運(yùn)行時(shí)首先調(diào)用OSInit()完成對(duì)整個(gè)操作系統(tǒng)所有變量和數(shù)據(jù)結(jié)構(gòu)的初始化,自動(dòng)創(chuàng)建空閑任務(wù),完成操作系統(tǒng)運(yùn)行前的準(zhǔn)備工作。然后調(diào)用OSTaskCreate()創(chuàng)建一個(gè)起始任務(wù),起始任務(wù)運(yùn)行時(shí)將創(chuàng)建5個(gè)任務(wù),分別是1個(gè)串口配置任務(wù)和4個(gè)控制串口通道任務(wù),將串口配置任務(wù)設(shè)置為最高級(jí),然后將起始任務(wù)刪除,起始任務(wù)只在程序運(yùn)行時(shí)執(zhí)行一次。之后將創(chuàng)建的5個(gè)任務(wù)添加到就緒列表,調(diào)用OSStart()啟動(dòng)μC/OS-Ⅲ,開(kāi)始多任務(wù)之間的調(diào)度。按照任務(wù)的優(yōu)先級(jí),串口配置任務(wù)將首先被執(zhí)行,此時(shí)采用非阻塞延時(shí)的方式讓系統(tǒng)延時(shí)5 s,在這5 s內(nèi)若有更改配置操作則可進(jìn)行人工修改配置,否則跳過(guò),保留串口默認(rèn)配置,隨之將串口配置任務(wù)刪除,將不會(huì)再被執(zhí)行,最后操作系統(tǒng)將會(huì)在空閑任務(wù)和4個(gè)控制串口通道任務(wù)之間循環(huán)調(diào)度。
本設(shè)計(jì)所支持的TFT液晶屏都是MUC接口的16位8080并口驅(qū)動(dòng)方式,完全可以通過(guò)FSMC模擬8080時(shí)序進(jìn)行驅(qū)動(dòng),只是初始化控制指令有所差別,只需根據(jù)讀取TFT液晶屏的ID序列號(hào)判斷屏幕型號(hào),調(diào)用不同的初始化程序完成液晶屏驅(qū)動(dòng)顯示。TFT液晶屏的信號(hào)線包括:數(shù)據(jù)總線(D0~D15)、設(shè)置寫入數(shù)據(jù)/命令(RS)、寫使能(WR)、讀使能(RD)、片選(CS)、復(fù)位(RST)和背光(BL),在控制時(shí)只需要用到D0~D15、RS、WR、RD和CS引腳。FSMC模式A讀寫時(shí)序如圖3所示,TFT液晶屏16位并口8080接口時(shí)序如圖4所示,對(duì)比圖3和圖4可知,TFT液晶屏沒(méi)有地址線,具有一個(gè)設(shè)置寫入數(shù)據(jù)/命令(RS)引腳,通過(guò)此引腳決定傳輸?shù)氖菙?shù)據(jù)還是命令,可以將此信號(hào)線看作FSMC的其中一個(gè)地址線,將RS引腳連接到FSMC A0地址線。當(dāng)FSMC寫地址0時(shí),對(duì)于TFT液晶屏即為寫命令;當(dāng)FSMC寫地址1時(shí),對(duì)于TFT液晶屏即為寫數(shù)據(jù)。這樣就可以通過(guò)FSMC模擬16位并口8080時(shí)序完成對(duì)TFT液晶屏的控制操作。
(a)讀時(shí)序(a)Read timing
(b)寫時(shí)序(b)Write timing圖3 FSMC模式A讀寫時(shí)序Fig.3 FSMC mode A read and write timing
圖4 16位并口8080接口時(shí)序Fig.4 16 bit parallel port 8080 interface timing
串口是連接外部處理器和本文TFT液晶屏顯示系統(tǒng)的橋梁,所有外部處理器傳入的所有數(shù)據(jù)和指令都是通過(guò)串口進(jìn)行發(fā)送。本設(shè)計(jì)采用STM32F4的4個(gè)串口作為傳輸通道,利用DMA方式進(jìn)行傳輸。DMA傳輸數(shù)據(jù)的本質(zhì)是將數(shù)據(jù)從一個(gè)地址空間復(fù)制到另一個(gè)地址空間,無(wú)需CPU參與,大大減輕了CPU的負(fù)擔(dān)。
本設(shè)計(jì)的系統(tǒng)配置界面如圖5所示。圖5(a)界面顯示當(dāng)前4個(gè)串口的默認(rèn)波特率都為9.6 kB/s,通過(guò)觸摸屏幕可以選擇是否配置串口波特率或者直接跳過(guò)配置;圖5(b)為串口配置界面,可通過(guò)觸摸屏幕完成4個(gè)串口的波特率配置。
(a) 設(shè)備信息及選擇界面(a) Equipment information and selection interface
(b) 串口配置界面(b) Serial port configuration interface圖5 系統(tǒng)配置界面Fig.5 System configuration interface
外部處理器在控制TFT液晶屏顯示系統(tǒng)前,先發(fā)送一系列的設(shè)置數(shù)據(jù),STM32F4處理器接收這些數(shù)據(jù)并進(jìn)行數(shù)據(jù)解析,獲取端口號(hào),選擇是顯示圖像還是顯示字符、數(shù)字或者漢字。如果顯示圖像,首先會(huì)判斷圖像的顯示坐標(biāo)和大小,然后接受串口發(fā)來(lái)的圖像數(shù)據(jù),寫入到液晶屏進(jìn)行顯示。如果顯示字符、數(shù)字或者漢字,首先會(huì)判斷顯示字體的大小、長(zhǎng)度和坐標(biāo),設(shè)置背景顏色和字體顏色,然后調(diào)取STM32F4內(nèi)部FLASH存入的字模數(shù)據(jù)寫入到液晶屏進(jìn)行顯示。驅(qū)動(dòng)控制接口調(diào)用流程如圖6所示。
圖6 驅(qū)動(dòng)控制接口調(diào)用流程圖Fig.6 Flow chart of driver control interface calling
首先測(cè)試在不同波特率下的數(shù)據(jù)傳輸速度,外部處理器通過(guò)串口通道發(fā)送數(shù)據(jù)控制TFT液晶屏顯示系統(tǒng),傳輸速度的理論值與實(shí)際值如表2所示。如果選擇最為常用的9.6 kB/s波特率,每秒可以傳輸9 400字節(jié),若傳輸長(zhǎng)寬為16×16像素的漢字或者字符,每秒可以傳輸約29個(gè)漢字
表2 不同波特率的數(shù)據(jù)傳輸速度
Tab.2 Data transfer speeds with different baud rates (kB·s-1)
波特率理論值實(shí)際值 2.4 2.4 2.34.8 4.8 4.7 9.6 9.6 9.4 115.2 115.2 111.3 256 256 232.7 2 0002 000 1 969
或者字符。
采用11 cm(4.3 in)800×480分辨率的TFT液晶屏進(jìn)行顯示測(cè)試,在9.6 kB/s波特率下測(cè)試外部處理器通過(guò)串口控制TFT液晶屏顯示漢字、字符和數(shù)字的效果,測(cè)試結(jié)果如圖7所示。其中,圖7(a)為1個(gè)外部處理器控制TFT液晶屏顯示系統(tǒng)的全屏顯示結(jié)果;圖7(b)為2個(gè)外部處理器同時(shí)控制TFT液晶屏顯示系統(tǒng)的2分屏顯示結(jié)果;圖7(c)為3個(gè)外部處理器同時(shí)控制TFT液晶屏顯示系統(tǒng)的3分頻顯示結(jié)果;圖7(d)為4個(gè)外部處理器同時(shí)控制TFT液晶屏顯示系統(tǒng)的4分頻顯示結(jié)果。當(dāng)多個(gè)處理器通過(guò)串口通道同時(shí)控制TFT液晶顯示系統(tǒng)時(shí),顯示效果穩(wěn)定流暢。
(a) 單通道控制顯示(a) Single channel control display
(b) 雙通道控制顯示(b) Dual channel control display
(c) 三通道控制顯示(c) Three channel control display
(d) 四通道控制顯示(d) Four channel control display圖7 液晶屏控制顯示測(cè)試結(jié)果Fig.7 LCD control display test results
TFT液晶屏驅(qū)動(dòng)是開(kāi)發(fā)和設(shè)計(jì)嵌入式應(yīng)用系統(tǒng)經(jīng)常要面對(duì)和解決的問(wèn)題。常規(guī)的MUC接口TFT液晶屏驅(qū)動(dòng)方法較為復(fù)雜,對(duì)直接使用TFT液晶屏的外部處理器和開(kāi)發(fā)設(shè)計(jì)人員均有一定的要求。本文采用串口方式控制MUC接口模式的TFT液晶屏的方法,降低了對(duì)外部處理器的功能要求,可以滿足無(wú)法直接進(jìn)行屏幕驅(qū)動(dòng)的8位、16位和32位機(jī)使用TFT液晶屏的需求,僅需兩根I/O線就能進(jìn)行TFT液晶屏的控制,節(jié)約了外部處理器的資源。本文方法可同時(shí)提供4個(gè)控制TFT液晶屏的串口通道,既可以單個(gè)外部處理器控制TFT液晶屏,也可以多個(gè)外部處理器同時(shí)控制TFT液晶屏,拓展了TFT液晶屏的使用范圍,可滿足某些特定場(chǎng)合的應(yīng)用需求。本文方法具有較好的兼容性,可適用5種不同尺寸、15種不同IC芯片的MUC接口TFT液晶屏。經(jīng)測(cè)試,TFT液晶屏的驅(qū)動(dòng)速度能較好地滿足顯示需要,在4個(gè)串口通道同時(shí)控制TFT液晶屏的情況下,顯示效果清晰流暢,系統(tǒng)運(yùn)行穩(wěn)定可靠。