STM32學習之ILI9341控制顯示屏輸出(二)

上一篇中介紹了ILI9341的相關內容,這一章節主要是介紹初步配置程序:

代碼清單(一):主要是配置相關應用接口和GPIO複用引腳:

//以下主要是配置LCD的相應管腳,可以根據上面的PCB信息得到連接的引腳:
void LCD_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF
                            |RCC_AHB1Periph_GPIOG,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //配置引腳PF10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOF,&GPIO_InitStructure);
	
	//配置引腳PD0/PD1/PD4/PD5/PD8/PD9/PD10/PD14/PD15
	GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOD,&GPIO_InitStructure);
	
	//配置引腳PE7-PE15;
	GPIO_InitStructure.GPIO_Pin = (0x1FF<<7);
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOE,&GPIO_InitStructure);
	
	//配置引腳PG2和PG12
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOG,&GPIO_InitStructure);
	
	//配置引腳PD0/PD1/PD4/PD5/PD8/PD9/PD10/PD14/PD15
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);
	
	//配置引腳PE7-PE15
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);
	
	//配置複用引腳PG2和PG12;
	GPIO_PinAFConfig(GPIOG,GPIO_PinSource2,GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);
	
} 

代碼清單(二):主要是配置STM32單片機內部的FSMC:


void LCD_Config(void)
{
  FSMC_NORSRAMInitTypeDef FSMC_InitStructure;
	FSMC_NORSRAMTimingInitTypeDef readTiming;
	FSMC_NORSRAMTimingInitTypeDef writeTiming;
	RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);
	
	//配置時序:readTiming結構體
	readTiming.FSMC_AddressSetupTime = 0xF;//地址建立時間
	readTiming.FSMC_AddressHoldTime = 0x01;//地址保持時間
	readTiming.FSMC_DataSetupTime = 0x3C;  //數據建立時間
	readTiming.FSMC_BusTurnAroundDuration = 0x01;//總線轉換時間
	readTiming.FSMC_CLKDivision = 0x00;   //時鐘分頻因子
	readTiming.FSMC_DataLatency = 0x00;//數據延遲時間
	readTiming.FSMC_AccessMode = FSMC_AccessMode_A;//設置存儲器訪問模式
	
	//配置寫時序結構體:writeTiming結構體
	writeTiming.FSMC_AddressSetupTime = 0x08;
	writeTiming.FSMC_AddressHoldTime = 0x01;
	writeTiming.FSMC_DataSetupTime = 0x07;
	writeTiming.FSMC_BusTurnAroundDuration = 0x00;
	writeTiming.FSMC_CLKDivision = 0x00;
	writeTiming.FSMC_DataLatency = 0x00;
	writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;
	
	//配置FSMC初始化結構體
	FSMC_InitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//用於選擇FSMC映射的存儲區域
	FSMC_InitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//設置地址總線與
                                                                         //數據總線是否復
                                                                         //用;
	FSMC_InitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;//用於設置需要控制的存儲器類
                                                              //型
	FSMC_InitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//設置數據寬度
	FSMC_InitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//設置是否使用
                                                                           //突發模式
	FSMC_InitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;//設置是否使
                                                           //能數據同步傳輸時使用使能信號
	FSMC_InitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//設置等待信
                                                           //號的有效極性
	FSMC_InitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//設置是否支持把非對稱AHB突發
                                                           //操作分割成兩次線性操作
	FSMC_InitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;//
	FSMC_InitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//
	FSMC_InitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; //
	FSMC_InitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;//
	FSMC_InitStructure.FSMC_ReadWriteTimingStruct = &readTiming;
	FSMC_InitStructure.FSMC_WriteTimingStruct = &writeTiming;
	FSMC_NORSRAMInit(&FSMC_InitStructure);
	FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4,ENABLE);//ʹÄÜBank1£»
	delay_ms(50);
	
}

下一節將會介紹如何在LCD中寫英文和畫點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章