交互式界面被越來(lái)越多地集成于多種應(yīng)用中,例如醫(yī)療設(shè)備、過(guò)程控制、手機(jī)和其它手持設(shè)備。這些界面主要基于使用彩色LCD的圖形HMI(人機(jī)界面)。對(duì)TFT-LCD的需求在全世界范圍內(nèi)極大增長(zhǎng)。本文介紹了如何使用 MM32F3270的FSMC(靈活的靜態(tài)存儲(chǔ)控制器)來(lái)驅(qū)動(dòng)8080接口的TFT-LCD。
01、MM32F3270 FSMC的簡(jiǎn)要介紹
FSMC是Flexible static memory controller(靈活的靜態(tài)存儲(chǔ)控制器)的簡(jiǎn)稱,能夠與異步存儲(chǔ)器和 LCD等并行外設(shè)相連。MM32F3270 的 FSMC支持并行接口的SRAM、PSRAM 、NOR FLASH 和TFT-LCD。
圖1 FSMC的功能框圖
02、FSMC 的功能特性
MM32的FSMC具有以下特性:
1) 可配置的靜態(tài)存儲(chǔ)器接口包括:
a) SRAM
b) PSRAM
c) NOR FLASH
2) 支持 Intel 8080 協(xié)議
3) 支持 moto 6800 協(xié)議
4) 8位,16位,32位可配置的數(shù)據(jù)總線寬度,支持非復(fù)用與復(fù)用模式
5) BANK1 分為 4 塊子 BANK,每塊 64Mbit 空間
6) 時(shí)序可編程以滿足不同的需求
a) 等待周期可編程
b) 總線恢復(fù)周期可編程
c) 寫,讀控制周期可編程
7) 可將32位的AHB訪問(wèn)請(qǐng)求,轉(zhuǎn)換為對(duì)外接設(shè)備連續(xù)的8位,16位的訪問(wèn)
MM32F3270的FSMC提供了對(duì)多個(gè)并行外設(shè)的控制與連接,具體配置取決于存儲(chǔ)器類型,主要涉及如下寄存器設(shè)置。
01、SMCTLR 的 sm_data_width[2:0],定義了外部存儲(chǔ)器的數(shù)據(jù)寬度,需根據(jù)實(shí)際數(shù)據(jù)寬度配置為8位,16位,32 位,此時(shí)需要保障實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)囊恢滦浴?/p>
02、SMCTLR的sm_data_width_set0/1/2 來(lái)設(shè)置存儲(chǔ)器的數(shù)據(jù)寬度,有三種情況:AHB 操作的數(shù)據(jù)寬度與存儲(chǔ)器數(shù)據(jù)寬度相同,無(wú)數(shù)據(jù)傳輸一致性的問(wèn)題;AHB 操作的數(shù)據(jù)寬度大于存儲(chǔ)器的數(shù)據(jù)寬度時(shí),AHB 接口將對(duì) hwdata[15:0],hwdatabit[31:16]進(jìn)行連續(xù)寫操作,以適應(yīng)外部設(shè)備的數(shù)據(jù)寬度,讀操作時(shí),hrdata[31:0]的低 16 位是有效數(shù)據(jù);AHB 操作的數(shù)據(jù)寬度小于存儲(chǔ)器的數(shù)據(jù)寬度時(shí),若存儲(chǔ)設(shè)備沒(méi)有高低字節(jié)片選,不允許進(jìn)行寫操作,若存儲(chǔ)設(shè)備有高低字節(jié)選擇,通過(guò) BL 控制訪問(wèn)對(duì)應(yīng)字節(jié)。可以進(jìn)行讀操作,但有效數(shù)據(jù)需要用戶自己處理。
03、SYSCFG_CFGR1[30:29]:mode_sel來(lái)配置不同模式,默認(rèn)值為 01
00:兼容 NOR FLASH 接口
01:兼容 8080 協(xié)議接口
10:兼容 6800 協(xié)議接口
04、SMSKR0[10:8]用來(lái)選擇三組不同的寄存器 register set0/set1/set2,以配置不同的時(shí)序
FMSC支持的外部接口
表1 FSMC控制器外部信號(hào)
03、FSMC 控制LCD的硬件設(shè)計(jì)
FSMC是如何控制TFTLCD的呢?
我們可以把TFTLCD當(dāng)成 SRAM 設(shè)備使用:外部SRAM的控制一般有:地址線(如A0~A18)、數(shù)據(jù)線(如D0~D15)、寫信號(hào)(WE)、讀信號(hào)(OE)、片選信號(hào)(CS)。TFTLCD的信號(hào)我們包括:RS、D0~D15、WR、RD、CS、 RST和BL等,其中真正在操作LCD的時(shí)候需要用到的就只有:RS、D0~D15、WR、 RD 和 CS。其操作時(shí)序和 SRAM的控制完全類似,唯一不同就是 TFT-LCD 有 RS 信號(hào),但是沒(méi)有地址信號(hào)。TFT-LCD通過(guò)RS信號(hào)來(lái)決定傳送的數(shù)據(jù)是數(shù)據(jù)還是命令,本質(zhì)上可以理解為一個(gè)地址信號(hào),比如MB039是把RS接在A18上面,那么當(dāng)FSMC控制器寫地址0的時(shí)候,會(huì)使得A18 變?yōu)?,對(duì)TFT-LCD來(lái)說(shuō),就是寫命令。而FSMC寫地址1的時(shí)候,A0 將會(huì)變?yōu)?,對(duì)TFT-LCD來(lái)說(shuō),就是寫數(shù)據(jù)。這樣,就把數(shù)據(jù)和命令區(qū)分開(kāi)了,其實(shí)就是對(duì)應(yīng) SRAM 操作的兩個(gè)連續(xù)地址。當(dāng)然RS也可以接在其他地址線上,MB039是把RS連接在PD13上面的。MM32F3270的FSMC支持8/16/32位數(shù)據(jù)寬度,我們這里用到的LCD是16位寬度的,在設(shè)置的時(shí)候需要選擇16位寬。
FSMC 控制LCD 的Demo應(yīng)用中,使用的開(kāi)發(fā)板為MB-039,它支持外接MDM2802與MDM2803兩種TFT-LCD (320x240 2.8’ 液晶顯示屏)。
圖2 MB-039實(shí)物效果圖
下圖是MB-039的FSMC與TFT-LCD的接口原理圖部分,完整原理圖可以通過(guò)MM32官網(wǎng)下載。
圖3 TFT-LCD接口原理圖
各個(gè)信號(hào)作用對(duì)應(yīng)如下:
表2 LCD信號(hào)對(duì)應(yīng)的電源、復(fù)位與MCU接口的引腳說(shuō)明
04、FSMC 控制LCD的軟件設(shè)計(jì)
FMSC Demo應(yīng)用中,使在庫(kù)函數(shù)樣例工程中使用選用:
FSMC_Ex8080TFTLCD.uvprojx
實(shí)驗(yàn)展示如何初始化LCD接口與實(shí)現(xiàn)LCD并行驅(qū)動(dòng)顯示。
軟件分為兩個(gè)部分:
01)FSMC接口GPIO與FSMC接口參數(shù)初始化
02)LCD顯示初始化與LCD顯示
FSMC接口GPIO與FSMC接口參數(shù)初始化
void BSP_LCD_Configure() { initGPIO_LCD(); initFSMC(); LCDC_Init_Reg(); lcdFillColor(Black); lcdBlcH(); }
① 在initGPIO_LCD()中實(shí)現(xiàn)LCD對(duì)應(yīng)IO初始化
包括LCD對(duì)應(yīng)nRST引腳,背光控制引腳,F(xiàn)SMC相關(guān)的片選,讀寫,數(shù)據(jù)/命令,數(shù)據(jù)D0~D15引腳的初始化。
② 在initFSMC()中實(shí)現(xiàn)FSMC功能配置初始化
A. 寫操作周期
B. 單個(gè)bit數(shù)據(jù)寫入保持時(shí)間
C. 寫操作時(shí),地址線的建立時(shí)間
D. 讀操作周期長(zhǎng)度設(shè)置
E. 存儲(chǔ)器數(shù)據(jù)總線位寬
F. 式選擇:8080模式
G. 外接設(shè)備的內(nèi)存大小
void initFSMC(void) { FSMC_InitTypeDef FSMC_InitStructure; FSMC_NORSRAM_Bank_InitTypeDef FSMC_BankInitStructure; RCC_AHB3PeriphClockCmd(RCC_AHB3ENR_FSMC, ENABLE); FSMC_BankInitStructure.FSMC_SMReadPipe = 0; FSMC_BankInitStructure.FSMC_ReadyMode = 0; FSMC_BankInitStructure.FSMC_WritePeriod = 0x2; FSMC_BankInitStructure.FSMC_WriteHoldTime = 1; FSMC_BankInitStructure.FSMC_AddrSetTime = 3; FSMC_BankInitStructure.FSMC_ReadPeriod = 0x1; FSMC_BankInitStructure.FSMC_DataWidth = FSMC_DataWidth_16bits; FSMC_NORSRAM_Bank_Init( FSMC_BankInitStructure, FSMC_NORSRAM_BANK0); FSMC_InitStructure.FSMC_Mode = FSMC_Mode_8080; FSMC_InitStructure.FSMC_TimingRegSelect = FSMC_TimingRegSelect_0; FSMC_InitStructure.FSMC_MemSize = FSMC_MemSize_64MB; FSMC_InitStructure.FSMC_MemType = FSMC_MemType_NorSRAM; FSMC_InitStructure.FSMC_AddrDataMode = FSMC_AddrDataMUX; FSMC_NORSRAMInit( FSMC_InitStructure); }
LCD顯示初始化
Bank0地址為0x60000000,0x80000=(0x01 << 19)則是地址線A18的偏移量。首先完成寫CMD和DATA驅(qū)動(dòng):
void lcdCmd(u8 cmd) { *(u16*)(0x60000000) = cmd; } //////////////////////////////////////////////////////////////////////////////// void lcdData(u8 dat) { *(u16*)(0x60000000 | (0x01 << 19)) = dat; } //////////////////////////////////////////////////////////////////////////////// void lcdData16(u16 dat) { *(u16*)(0x60000000 | (0x01<< 19)) = dat; }
讀CMD和REG也是一樣的操作,不同的是從相應(yīng)地址讀取數(shù)據(jù)。
01)在LCDC_Init_Reg ()中調(diào)用上述3種函數(shù)實(shí)現(xiàn)LCD對(duì)應(yīng)驅(qū)動(dòng)芯片中寄存器器的初始設(shè)置
02)在lcdFillColor(Black); lcdBlcH();中實(shí)現(xiàn)配置LCD的初始顯示頁(yè)面為全黑色和打開(kāi)背光
LCD驅(qū)動(dòng)顯示
LCD的畫點(diǎn)流程都可以概括為:設(shè)置坐標(biāo)→寫入GRAM指令→寫入顏色;
LCD的讀點(diǎn)的流程可以概括為:設(shè)置坐標(biāo)→讀取GRAM指令→讀取顏色。
通過(guò)畫點(diǎn)的操作到畫方塊、線、圓、字符等功能。
該Demo中通過(guò)Systick定時(shí)刷新要顯示的數(shù)據(jù),實(shí)現(xiàn)了LCD的功能演示。
void randRefresh() { u16 x, y, w, h, c; drawSquare(dx, dy, dw, dh, SPACE, NUL); if (drawBlockCnt++ % 2) { x = rand(); x %= (dw - 2); y = rand(); y %= (dh - 2); w = rand(); w %= DMAX; h = rand(); h %= DMAX; c = rand(); c = 0x0f; if ((x + w) > (dw - 2)) x = dw - w - 2; if ((y + h) > (dh - 2)) y = dh - h - 2; drawRec (x + dx + 1, y + dy + 1, w, h, getColor(c)); } else { c = rand(); c = 0x0f; drawRec (dx + 1, dy + 1, dw - 2, dh - 2, getColor(c)); } }
將程序下載進(jìn)入板子我們可以觀察到,TFTLCD上顯示出了下列MindMotion Logo:
圖4 TFT-LCD接口顯示Logo圖
還可以觀察到屏幕快速畫出不同的顏色方框,表明實(shí)驗(yàn)成功。
來(lái)源:靈動(dòng)MM32MCU
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
114文章
17113瀏覽量
184374 -
lcd
+關(guān)注
關(guān)注
34文章
4520瀏覽量
171614 -
TFT
+關(guān)注
關(guān)注
10文章
399瀏覽量
112594 -
FSMC
+關(guān)注
關(guān)注
0文章
55瀏覽量
38686
發(fā)布評(píng)論請(qǐng)先 登錄
靈動(dòng)微課堂 (第188講) | 使用MM32F3270 FSMC驅(qū)動(dòng)TFT-LCD
MM32F3270系列32位MCU的特點(diǎn)有哪些
靈動(dòng)微課堂 (第189講) | 使用MM32F3270 FSMC驅(qū)動(dòng)SRAM
靈動(dòng)微課堂 (第190講) | 使用MM32F3270 FSMC驅(qū)動(dòng)外部NOR Flash
靈動(dòng)微課堂 (第191講) | 使用MM32F3270 FSMC驅(qū)動(dòng)OLED
靈動(dòng)微電子MM32F3270系列MCU的特點(diǎn)介紹
如何采用MM32F3270單片機(jī)的FSMC接口來(lái)擴(kuò)展SRAM
【國(guó)產(chǎn)MCU移植】MM32F3270 EVBoard

基于MM32F3270 以太網(wǎng) Client使用

QVGA TFT-LCD直接驅(qū)動(dòng)使用STM32F10xx FSMC外設(shè)

評(píng)論