上一篇中介紹了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中寫英文和畫點