李 良,王德生,王小康,姜小存
(火箭軍士官學(xué)校,山東 青州 262500)
LCD液晶顯示屏與主芯片之間有多種接口形式,比較常見(jiàn)的接口有 UART、SPI、FSMC、LTDC、HDMI、MIPI等。FSMC也即是靈活的靜態(tài)存儲(chǔ)器控制器,是用來(lái)驅(qū)動(dòng)外部總線(xiàn),在一些TFT液晶的操作用經(jīng)常用到。單片機(jī)訪(fǎng)問(wèn)內(nèi)存是通過(guò)三總線(xiàn)形式進(jìn)行訪(fǎng)問(wèn)的,即地址總線(xiàn)、數(shù)據(jù)總線(xiàn)和控制總線(xiàn),只是對(duì)于不同的控制芯片總線(xiàn)寬度不一樣而已。STM32的FSMC[1]就像51系列單片機(jī)的外部總線(xiàn)一樣,只不過(guò)性能更好,速度更快。本文主要分析基于STM32芯片F(xiàn)SMC接口的ILI9341液晶顯示屏的控制過(guò)程。
本文選用ILI9341液晶屏[2]接口是16位的80并口,16位代表有16根數(shù)據(jù)線(xiàn),用STM32芯片驅(qū)動(dòng)一個(gè)80并口的LCD需要7個(gè)控制信號(hào),通過(guò)SRAM控制器控制外部LCD液晶顯示屏顯示。圖1為本文中采用的TFT型LCD硬件引腳圖,共有32個(gè)功能引腳:
圖1 TFT型LCD硬件引腳
LCD_CS:Chip Select片選信號(hào),低電平有效;
RS:Register Select寄存器選擇;
LCD_WR:Write寫(xiě)信號(hào),低電平有效;
LCD_RD:Read讀信號(hào),低電平有效;
RESET:重啟信號(hào),低電平有效;
DB0-DB15:數(shù)據(jù)線(xiàn),與STM32相應(yīng)GPIO引腳相連;
BL:背光控制信號(hào);
其中 MOSI、MISO、T_PEN、T_CS 及 CLK 引腳在內(nèi)存接口控制中未用,其余引腳與STM32相應(yīng)引腳相連。STM32上有FSMC接口的好處就是一旦對(duì)其設(shè)置之后,WR、RD、DB0-DB15這些控制線(xiàn)和數(shù)據(jù)線(xiàn),都是FSMC自動(dòng)控制的。
追本溯源,為何FSMC可以用來(lái)驅(qū)動(dòng)LCD,原因是FSMC的讀寫(xiě)時(shí)序和LCD的讀寫(xiě)時(shí)序很相似,于是把LCD當(dāng)成一個(gè)外部存儲(chǔ)器來(lái)用。利用FSMC在相應(yīng)的地址讀或?qū)懴嚓P(guān)數(shù)值時(shí),STM32的FSMC會(huì)在硬件上自動(dòng)完成時(shí)序上的控制。所以我們只要設(shè)置好讀寫(xiě)相關(guān)時(shí)序的寄存器后,F(xiàn)SMC就可以幫我們完成時(shí)序上的控制了。對(duì)于FSMC驅(qū)動(dòng)LCD有一個(gè)比較難理解的地方就是當(dāng)LCD使用16位寬度的數(shù)據(jù)傳輸(也就是有16條數(shù)據(jù)線(xiàn))的時(shí),HADDR和FSMC_A這個(gè)地址塊的對(duì)應(yīng)問(wèn)題 (使用8位數(shù)據(jù)則不用考慮此問(wèn)題)。
FSMC_A是STM32單片機(jī)的外部硬件接口,是物理存在的。HADDR是需要轉(zhuǎn)換到外部存儲(chǔ)器的內(nèi)部AHB地址線(xiàn),是STM32內(nèi)部總線(xiàn)。當(dāng)LCD的16位的80并口和STM32的FSMC接口連接好之后,我們可以進(jìn)行軟件編程控制HADDR,從而間接操作FSMC_A,STM32的FSMC接口將0x60000000-0x6FFFFFFF的地址用作NOR/PRAM(共256M地址范圍)。存儲(chǔ)模塊分成四部分,每部分64M地址范圍[1]。NOR和PSRAM的存儲(chǔ)塊選擇如表1所示。
表1 NOR和PSRAM的存儲(chǔ)塊選擇
本文使用NOR/SRAM的Bank1.sector4,地址位HADDR[27,26]=11,也即用FSMC_A12引腳作為數(shù)據(jù)命令區(qū)分線(xiàn),0:命令,1:數(shù)據(jù)。 本文中 LCD 的 LCD_RS(命令/數(shù)據(jù)標(biāo)志線(xiàn))是接在STM32的外部接口FSMC_A[12]上的。
由于STM32規(guī)定當(dāng)使用16位數(shù)據(jù)寬度的時(shí)候HADDR[25:1]與 FSMC_A[24:0]對(duì)應(yīng)相連,HADDR[0]這個(gè)地址是沒(méi)用的。外部存儲(chǔ)器地址如表2所示。
表2 外部存儲(chǔ)器地址
這就是當(dāng)使用16位數(shù)據(jù)寬度的時(shí)候,HADDR自動(dòng)右移一位對(duì)其的原理因?yàn)槭褂玫氖?6位的數(shù)據(jù)寬度,所以在設(shè)置時(shí)要注意STM32內(nèi)部會(huì)右移一位對(duì)齊:
在實(shí)際編程中,根據(jù)STM32與LCD之間硬件電路連接關(guān)系,主要配置四個(gè)結(jié)構(gòu)體參數(shù)[3,4]:
其中第二個(gè)結(jié)構(gòu)體FSMC_NORSRAMInitStructure是FMSC接口配置最為重要的結(jié)構(gòu)體,主要完成以下參數(shù)配置:
基于STM32的FSMC接口配置是驅(qū)動(dòng)LCD正常顯示的最為關(guān)鍵的環(huán)節(jié),本文重點(diǎn)分析了FSMC接口的地址映射和軟件配置,經(jīng)實(shí)驗(yàn)驗(yàn)證,F(xiàn)SMC接口配置是可行可靠的。