本實驗工具:
STM32F407ZGT6 液晶顯示屏2.8寸 顯示屏控制芯片:ILI9341
本液晶顯示屏內部包含一個ILI9341液晶控制芯片。其內部結構如下所示:
其中最核心的部分爲GRAM,可以稱爲顯存,每一個存儲單元都對應着液晶面板的一個像素點。下圖右側的模塊共同作用吧GRAM存儲單元的數據轉化爲液晶面板的控制信號,使像素點呈現特定的顏色,而像素點組合起來就成爲一幅完整的圖像。框圖的左上角爲芯片的主要控制信號和配置引腳,根據其不同的狀態設置可以使芯片工作在不同的模式,如每個像素點的位數,6位、18位、16位等。本實驗採用STM32的FSMC模擬8080時序與液晶屏通訊。
FSMC的地址映射:
FSMC連接好外部存儲器並初始化後,就可以直接通過訪問地址讀寫數據,這種地址訪問與I2CEEPROM、SPI Flash的不一樣,使用FSMC外接存儲器時,其存儲單元是映射到STM32的內部尋址空間;在程序裏,第一一個指向這些地址的指針,然後就可以通過指針直接修改該存儲單元的內容,FSMC外設會自動完成數據訪問過程,讀寫命令之類的操作不需要程序控制。
NOR Flash存儲器時序結構體
控制FSMC使用NOR Flash存儲器時主要是配置時序寄存器以及控制寄存器,利用ST標準庫的時序結構體以及初始化結構體。
NOR Flash時序結構體FSMC_NORSRAMTimingInitTypeDef結構體
typedef struct
{
uint32_t FSMC_AddressSetupTime; //用於定義地址建立時間,範圍:0~0xF個週期,一個週期一般
//爲1/HSCLK。
uint32_t FSMC_AddressHoldTime; //用於設置地址保持時間:0~0xF個週期。
uint32_t FSMC_DataSetupTime; //地址建立時間,0~0xF個週期,
uint32_t FSMC_BusTurnAroundDuration; //總線轉換時間,0~0xF個週期;
uint32_t FSMC_CLKDivision; //時鐘分頻因子,0~0xF,若控制異步存儲器,本參數無效;
uint32_t FSMC_DataLatency; //數據延遲時間,若控制異步存儲器,本參數無效;
uint32_t FSMC_AccessMode; //設置訪問模式;
}FSMC_NORSRAMTimingInitTypeDef;
FSMC初始化結構體:用於控制NOR Flash相關的結構體,
NORSRAMInitTypeDef結構體
typedef struct
{
uint32_t FSMC_Bank; //設置需要控制的區域;
uint32_t FSMC_DataAddressMux; //設置地址總線與數據總線是否複用;
uint32_t FSMC_MemoryType; //設置存儲器類型;
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; //設置是否使能等待狀態插入;
uint32_t FSMC_ExtendedMode; //設置是否使能擴展模式;
uint32_t FSMC_WriteBurst; //設置是否使能突發模式;
//當不設置擴展模式時,本參數用於設置讀寫時序,否則用於配置讀時序;
FSMC_NORSRAMTimingInitTypeDef* FSMC_ReadWriteTimingStruct;
//當使用擴展模式時,本參數用於配置寫時序;
FSMC_NORSRAMTimingInitTypeDef* FSMC_WriteTimingStruct;
}FSMC_NORSRAMInitTypeDef
以上是使用庫函數需要配置的結構體,具體程序代碼請見下一章節;