TFTLCD簡介
TFT-LCD: Thin Film Transistor-Liquid Crystal Display, 即薄膜晶體管液晶顯示器,也被叫做真彩液晶顯示器。。其液晶顯示屏的每一個像素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使顯示液晶屏的靜態特性與掃描線數無關,因此大大提高了圖像質量。
本文介紹4.3寸觸摸屏,其分辨率爲800*480,16位真彩顯示,採用NT35510驅動,自帶GRAM,無須外加驅動器。
TFT:薄膜晶體管,是開關器件,決定液晶是否充電(薄膜晶體管只起通或斷的作用,當薄膜晶體管處於開時, 從其源極輸出電壓,給液晶及存儲電容充電,充電電壓的高低,由液晶屏驅動電路決定);
LCD模塊採用 2*17 的 2.54 公排針與外部連接,接口定義如圖
序號 | 名稱 | 說明 |
---|---|---|
1 | CS | LCD片選信號(低電平有效) |
2 | RS | 命令/數據控制信號(0,命令:1,數據: ) |
3 | WR | 寫使能信號(低電平有效) |
4 | RD | 讀使能信號(低電平有效) |
5 | RST | 復位信號(低電平有效) |
6~21 | D0-D15 | 雙向數據總線 |
22,26,27 | GND | 地線 |
23 | BL_CTR | 背光控制引腳(高電平點亮背光,低電平關閉) |
24,25 | VCC3.3 | 主電源供電引腳(3.3V) |
28 | VCC5 | 背光供電引腳(5V) |
29 | MISO | NC.電容觸摸屏未用到 |
30 | MOSI | 電容觸摸屏IIC_SDA信號(CT_SDA) |
31 | PEN | 電容觸摸屏中斷信號(CT_INT) |
32 | BUSY | NC.電容觸摸屏未用到 |
33 | CS | 電容觸摸屏復位信號(CTRST) |
34 | CLK | 電容觸摸屏IICSCL信號(CT SCL) |
顏色相關
NT35510自帶LCD GRAM(480* 864* 3字節),並且最高支持24位顏色深度(1600 萬色),一般使用16位顏色深度(65K色),即RGB565格式,這樣,在16位模式下,可以達到最快的速度。此時NT35510的低16位數據總線(高8位沒有用到)與MCU的16位數據線以及24位LCD GRAM的對應關係如下:
從上表可以看出,NT35510的24位GRAM與16位RGB565的對應關係,其實就是分別將高位的R、G、B數據,搬運到低位做填充,“湊成”24位,再顯示。
MCU的16位數據中,最低5位代表藍色,中間6位爲綠色,最高5位爲紅色。數值越大,表示該顏色越深。
NT35510的指令是16位寬,數據除了GRAM讀寫的時候是16位寬,其他都是8位寬的(高8位無效),這個和ILI9320等驅動器不一樣,必須加以注意。
驅動時序
使用流程
1.將與 TFTLCD 模塊相連的 IO 口進行初始化 ;
2.初始化 TFTLCD 模塊:向 LCD 控制器寫入一系列的設置值;(比如伽馬校準等)
3.通過函數將字符和數字顯示到 TFTLCD 模塊上,如下,即:設置座標→寫 GRAM 指令→寫 GRAM 。
FSMC簡介
FSMC,即靈活的靜態存儲控制器,能夠與同步或異步存儲器和 16 位 PC 存儲器卡連接,STM32 的 FSMC 接口支持包括 SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存儲器。
框圖
STM32 的 FSMC 將外部設備分爲 3 類: NOR/PSRAM 設備、 NAND設備、 PC 卡設備。三種共用地址數據總線等信號,但又具有不同的 CS 以區分不同的設備,本文的TFTLCD 就是用的 FSMC_NE4 做片選, 將TFTLCD 當成 SRAM 來控制 。
靜態隨機存取存儲器(Static Random-Access Memory,SRAM)是隨機存取存儲器的一種。所謂的“靜態”,是指這種存儲器只要保持通電,裏面儲存的數據就可以恆常保持。
FSMC 存儲塊地址映像
STM32的FSMC支持8/16/32位數據寬度,這裏用到的LCD是16位寬度的,所以在設置的時候選擇16位寬。FSMC的外部設備地址映像,STM32的FSMC將外部存儲器劃分爲固定大小爲256M字節的四個存儲塊,如下圖:
STM32的FSMC存儲塊1 (Bank1)用於驅動NOR FLASH/SRAM/PSRAM,被分爲4個區,每個區管理64M字節空間,每個區都有獨立的寄存器對所連接的存儲器進行配置。Bank1的256M字節空間由28根地址(HADDR[27:0])尋址。這裏HADDR,是內部AHB地址總線,其中,HADDR[25:0]來自外部存儲器地址FSMC A[25:0],而HADDR[26:27]對4個區進行尋址。如下表所示:
FSMC的相關內容還有很多,包括訪問模式,相關寄存器等等,以後大概會單出筆記。正點原子大多數好像是操作外設,好像野火的視頻對這方面介紹的比較詳細。
代碼相關
相關結構體
1.FSMC相關
typedef struct
{
uint32_t FSMC_Bank;//存儲使用的區域(內存庫)
uint32_t FSMC_DataAddressMux;//設置是否複用數據地址
uint32_t FSMC_MemoryType;//指定附加到的外部內存的類型,即SRAM
uint32_t FSMC_MemoryDataWidth;//外部內存設備寬度。
uint32_t FSMC_BurstAccessMode;//閃存的突發訪問模式,
uint32_t FSMC_AsynchronousWait;//在異步傳輸期間的等待信號,
uint32_t FSMC_WaitSignalPolarity;//等待信號的極性 (類似高低電平)
uint32_t FSMC_WrapMode;
uint32_t FSMC_WaitSignalActive;
uint32_t FSMC_WriteOperation;
uint32_t FSMC_WaitSignal;//wait狀態插入信號
uint32_t FSMC_ExtendedMode;//擴展模式。
uint32_t FSMC_WriteBurst;//寫突發操作。
FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct;
FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;
}FSMC_NORSRAMInitTypeDef;
2.LCD相關
typedef struct
{
u16 width; //LCD 寬度
u16 height; //LCD 高度
u16 id; //LCD ID
u8 dir; //橫屏還是豎屏控制:0,豎屏;1,橫屏。
u16 wramcmd; //開始寫gram指令
u16 setxcmd; //設置x座標指令
u16 setycmd; //設置y座標指令
}_lcd_dev;
typedef struct//與地址有關,通過對對RS的控制
{
vu16 LCD_REG;//0 讀寫命令
vu16 LCD_RAM;//1 讀寫數據
} LCD_TypeDef;
部分實現函數
1.顏色值獲取
u16 LCD_BGR2RGB(u16 c)//c:GBR格式的顏色值
{
u16 r,g,b,rgb;
b=(c>>0)&0x1f;
g=(c>>5)&0x3f;
r=(c>>11)&0x1f;
rgb=(b<<11)+(g<<5)+(r<<0);
return(rgb);
}
2.快速畫點
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color)//相關參數爲座標及點的顏色
{
LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(x>>8);
LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(x&0XFF);
LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(y>>8);
LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(y&0XFF);
LCD->LCD_REG=lcddev.wramcmd;
LCD->LCD_RAM=color;
}
3.清屏函數
//color:要清屏的填充色
void LCD_Clear(u16 color)
{
u32 index=0;
u32 totalpoint=lcddev.width;
totalpoint*=lcddev.height; //得到總點數
LCD_SetCursor(0x00,0x0000); //設置光標位置
LCD_WriteRAM_Prepare(); //開始寫入GRAM
for(index=0;index<totalpoint;index++)
{
LCD->LCD_RAM=color;
}
}