STM32 TFT液晶屏與FSMC


目前網上的STM32的程序基本上都是從正點或者野火開發板為基礎搞的,由於開發板的例程是基於正點的,但是板子的接線卻不一致,這使得燒程序后液晶屏無法顯示的問題。開發板的原理圖如圖

FSMC

FSMC,即靈活的靜態存儲控制器,STM32F4 的FSMC 接口支持包括SRAM、NAND FLASH、NOR FLASH 和PSRAM 等存儲器,我們這里使用的2.8寸液晶屏可以被看做是SRAM:

  • 讀寫控制通過RD/WR設置
  • RS的高低控制是寫數據還是寫地址

我們希望使用SRAM的方式訪問LCD,因此選擇BANK1,原理圖中RS接的是A12,即通過第12位決定是向LCD寫命令還是寫數據,片選信號接的NE4,可以知道

Bank1所選區 片選信號 地址范圍
第1區 FSMC_NE1 0X6000,0000~63FF,FFFF
第2區 FSMC_NE2 0X6400,0000~67FF,FFFF
第3區 FSMC_NE3 0X6800,0000~6BFF,FFFF
第4區 FSMC_NE4 0X6C00,0000~6FFF,FFFF

基地址的范圍是從0x6c000000開始的,由於FSMC的地址線FSMC_A的A[0]一定要和外設的A[0]接在一起,即已經被占用,不過對於LCD的液晶屏控制來說並不影響,選擇其他FSMC_A的引腳依然可以滿足RS控制,FSMC的地址范圍為0-25,開發板將A12接RS做命令和數據的控制,即對FSMC來說就是操作兩個地址來實現。

由上面可知基地址是0x6c000000,我們定義結構體:

typedef struct
{
	u16 LCD_REG;
	u16 LCD_RAM;
}LCD_TypeDef;
#define LCD_BASE		((u32)(0x6C000000 | 0X00001FFE))//A12為區分線
#define TFTLCD			((LCD_TypeDef *) LCD_BASE)

LCD_BASE表示的地址的低2字節按二進制表示為:0001 1111 1111 1110,根據上文描述,A12被使用區分指令和數據,在上面的結構體定義下,LCD_REG的地址和LCD_RAM的地址因為結構體定義的原因剛好使A12在REG為1,在RAM時為0,這樣可以有:

TFTLCD->LCD_REG=CMD;//寫命令
TFTLCD->LCD_RAM=DATA;//寫數據

其他FSMC的接線定義以及液晶屏的初始化參考原子板即可,這樣就實現了使用FSMC控制TFT液晶屏的功能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM