在FSMC移植过程中一直无法显示,无意中碰到PD6,TFT可以显示了,但是屏幕一直在闪。程序里面根本没有用到PD6啊。求解
void LCD_GPIO_Init(void) //LCD控制IO口初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
///////////////////////LCD_Bus IO口//////////////////////////////////
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
///////////////////////LCD复位IO口//////////////////////////////////
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ; //PE1->LCD_RESET
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
///////////////////////控制IO口//////////////////////////////////
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //背光PD13->Light
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11; //PD4-> OE,PD5->WE,PD7->CS,PD11->RS
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void LCD_FSMC_Init(void) //LCD FSMC初始化
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef WriteTiming;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
WriteTiming.FSMC_AddressSetupTime = 0x02; //地址建立时间
WriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间
WriteTiming.FSMC_DataSetupTime = 0x05; //数据建立时间
WriteTiming.FSMC_BusTurnAroundDuration = 0x00; //总线恢复时间
WriteTiming.FSMC_CLKDivision = 0x00; //时钟分频
WriteTiming.FSMC_DataLatency = 0x00; //数据保持时间
WriteTiming.FSMC_AccessMode = FSMC_AccessMode_B; //在地址\数据线不复用的情况下,ABCD模式的区别不大
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; //NOR FLASH的BANK1
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //数据与地址总线不复用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR; //存储器类型NOR FLASH
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //数据宽度为16位
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; //使用异步写模式,禁止突发模式
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; //只在突发模式下有效,等待信号极性为低
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; //禁止非对齐性突发模式
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; //仅在突发模式下有效,NWAIT信号在什么周期产生
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //写使能
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; //仅在突发模式下有效,禁用NWAIT信号
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; //禁止扩展模式,扩展模式可以使用独立的读、写模式
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; //禁止突发写操作
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &WriteTiming; //配置读写时序
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &WriteTiming; //配置写时序
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC配置
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); //使能FSMC Bank1_SRAM Bank
}
|