十一、 LCD實驗
11.1 ALINETEK 2.8寸 TFTLCD
11.1.1 接口說明
LCD_CS:LCD片選信號
LCD_WR:LCD寫信號
LCD_RD:LCD讀信號
DB[17:1]:16位雙向數據線。
LCD_RST:硬復位LCD信號
LCD_RS:命令/數據標志(0:命令,1:數據)
BL_CTR:背光控制信號
T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,觸摸屏接口信號
- ILI9341 驅動時序

我們看到,讀低電平最少需要355ns,寫低電平需要15ns
11.1.2 指令說明
ILI9341所有的指令都是8位的(高8位無效),且參數除了讀寫GRAM(RGB565格式顏色數據)的時候是16位,其他操作參數,都是8位的
0XD3 讀ID4指令
0X36 控制ILI9341存儲器的讀寫方向,簡單的說,就是在連續寫GRAM的時候,可以控制GRAM指針的增長方向
0X2A 列地址設置指令
0X2B 頁地址設置指令
0X2C 寫GRAM指令
0X2E 讀GRAM指令
11.2 FSMC簡介
FSMC,即靈活的靜態存儲控制器,能夠與同步或異步存儲器和16位PC存儲器卡連接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存儲器。
11.2.1 FSMC的框圖



FSMC並不是擁有真的1GB的空間,FSMC是能夠管理1GB的空間,內核將這1GB的地址交由FSMC管理。我們設置好讀寫時序后,FSMC會在我們讀寫時自動按照時序讀寫,拉讀寫使能,數據保持。LCD本省並不具有存儲空間,STM32將FSMC的地址線A10連接上LCD的RS,我們選用bank1塊4.
STM32內部地址線每個地址管理的都是一個字節的的空間
當Bank1接的是16位寬度存儲器的時候:HADDR[25:1] -> FSMC_A[24:0]
//LCD地址結構體
typedef struct
{
vu16 LCD_REG;
vu16 LCD_RAM;
} LCD_TypeDef;
#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
#define LCD ((LCD_TypeDef *) LCD_BASE)
//0x000007FE為選用A10的偏移量,這樣
&LCD_REG == 0x6C0007FE; A10:A0 011 1111 1111
&LCD_RAM == 0x6C000800; A10:A0 100 0000 0000
0x6C0007FE對應的是8位數據的地址,右移對其對應的是16位數據
-
我們看到LCD_REG和LCD_RAM的A10位分別位0和1,表示命令和數據。
-
這樣當我們寫LCD_REG時FSMC會先拉地址信號,A10 =RS=0,表示寫命令,再把LCD_REG的數據通過 DB[17:1]:16位雙向數據線寫入LCD,那么同理,寫入LCD_RAM表示寫數據。
本篇並不詳細介紹FSMC的配置過程,主要描述的是FSMC如何控制LCD,基於正點原子的戰艦開發板
