STM32學習筆記(12)通過FSMC控制TFTLCD(NT35510芯片)

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; 
 }
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章