9341不能读取ID

2019-08-17 10:08发布

现在正在用FSMC驱动ILI9341 2.8寸的液晶屏,但是一直白屏,也无法读取ID配置如下
PD7-FSMC_NE1--LCD_CS
PD11-FSMC_A16_LCD_RS
片子是100脚的VET6
还请大神指导下
void LCD_GPIO_Cfg( void )
{
          GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);

        //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        //GPIO_Init(GPIOD, &GPIO_InitStructure);
      //  GPIO_SetBits(GPIOD, GPIO_Pin_12);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 |GPIO_Pin_4 | GPIO_Pin_5|
                                     GPIO_Pin_9 | GPIO_Pin_10;
       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);


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_SetBits(GPIOD, GPIO_Pin_7);////GPIO_SetBits
        GPIO_ResetBits(GPIOB, GPIO_Pin_8);
        GPIO_SetBits(GPIOD, GPIO_Pin_4);
        GPIO_SetBits(GPIOD, GPIO_Pin_5);

}
//******************************************************************************
void LCD_FSMC_Cfg(void)
{
        FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef p;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

        p.FSMC_AddressSetupTime = 0x02;//地址建立时间
        p.FSMC_AddressHoldTime = 0x00;//地址保持时间
        p.FSMC_DataSetupTime = 0x05;//数据建立时间
        p.FSMC_BusTurnAroundDuration = 0x00;//总线反转时间
        p.FSMC_CLKDivision = 0x00;//时钟分频
        p.FSMC_DataLatency = 0x00;//数据保持时间
        p.FSMC_AccessMode = FSMC_AccessMode_B;//访问模式

        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//NOR/SRAM的存储块,4个选项
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//都选择地址和数据复用数据线
        FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//连接到相应存储块的外部存储类型
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据总线宽度
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//使能或关闭同步NOR闪存存储器的突发访问模式
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//设置WAIT信号的有效电平
        FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//设置是否使用环回模式
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;//设置WAIT信号的有效时机
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//设置能否写操作
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;//设置是否使用WAIT信号
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;//使能或关闭扩展功能
        //FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;//设定是否使用异步等待信号
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;//设定是否使用迸发写模式
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;//设定读写时序
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;//

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
//*****************************LCD初始化*************************************
void Lcd_Init(void)
{
                u32 i;

                LCD_GPIO_Cfg();
                LCD_FSMC_Cfg();
                LCD_Reset();
                Delay_375ms();

                LCD_WR_REG(0XD3);                                  
                LCD_ID=LCD_RD_DATA();       
                LCD_ID=LCD_RD_DATA();       
                  LCD_ID=LCD_RD_DATA();                                                                     
                LCD_ID<<=8;
                LCD_ID|=LCD_RD_DATA();         

                printf(" LCD ID:%x ",LCD_ID);

                      LCD_WR_REG(0xCF);  
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0xC1);
                LCD_WR_DATA(0X30);       
               
                LCD_WR_REG(0xED);  
                LCD_WR_DATA(0x64);
                LCD_WR_DATA(0x03);
                LCD_WR_DATA(0X12);
                LCD_WR_DATA(0X81);
               
                LCD_WR_REG(0xE8);  
                LCD_WR_DATA(0x85);
                LCD_WR_DATA(0x10); //***
                LCD_WR_DATA(0x7A); //***
               
                LCD_WR_REG(0xCB);  
                LCD_WR_DATA(0x39);
                LCD_WR_DATA(0x2C);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x34);
                LCD_WR_DATA(0x02);

                LCD_WR_REG(0xF7);  
                LCD_WR_DATA(0x20);

                LCD_WR_REG(0xEA);  
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);

                LCD_WR_REG(0xC0);    //Power control
                LCD_WR_DATA(0x1B);   //VRH[5:0]    ***


                LCD_WR_REG(0xC1);    //Power control
                LCD_WR_DATA(0x01);   //SAP[2:0];BT[3:0]  ***

                LCD_WR_REG(0xC5);    //VCM control
                LCD_WR_DATA(0x30);          //3F              ***
                LCD_WR_DATA(0x30);          //3C               ***

                LCD_WR_REG(0xC7);    //VCM control2
                LCD_WR_DATA(0XB7);                         //***


                LCD_WR_REG(0x36);    // Memory Access Control
                LCD_WR_DATA(0x08);                 //***


                LCD_WR_REG(0x3A);   
                LCD_WR_DATA(0x55);

                LCD_WR_REG(0xB1);   
                LCD_WR_DATA(0x00);   
                LCD_WR_DATA(0x1A);                 //***

                LCD_WR_REG(0xB6);    // Display Function Control
                LCD_WR_DATA(0x0A);
                LCD_WR_DATA(0xA2);

                LCD_WR_REG(0xF6);    //****
                LCD_WR_DATA(0x01); //***
                LCD_WR_DATA(0x30); //***

                LCD_WR_REG(0xF2);    // 3Gamma Function Disable
                LCD_WR_DATA(0x00);

                LCD_WR_REG(0x26);    //Gamma curve selected
                LCD_WR_DATA(0x01); //***

                LCD_WR_REG(0xE0);    //Set Gamma
                LCD_WR_DATA(0x0F);
                LCD_WR_DATA(0x2A);
                LCD_WR_DATA(0x28);
                LCD_WR_DATA(0x08);
                LCD_WR_DATA(0x0E);
                LCD_WR_DATA(0x08);
                LCD_WR_DATA(0x54);
                LCD_WR_DATA(0XA9);
                LCD_WR_DATA(0x43);
                LCD_WR_DATA(0x0A);
                LCD_WR_DATA(0x0F);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);        

                LCD_WR_REG(0XE1);    //Set Gamma
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x15);
                LCD_WR_DATA(0x17);
                LCD_WR_DATA(0x07);
                LCD_WR_DATA(0x11);
                LCD_WR_DATA(0x06);
                LCD_WR_DATA(0x2B);
                LCD_WR_DATA(0x56);
                LCD_WR_DATA(0x3C);
                LCD_WR_DATA(0x05);
                LCD_WR_DATA(0x10);
                LCD_WR_DATA(0x0F);
                LCD_WR_DATA(0x3F);
                LCD_WR_DATA(0x3F);
                LCD_WR_DATA(0x0F);


//----------------------------------------
                /*LCD_WR_REG(0x2B);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x01);
                LCD_WR_DATA(0x3f);
               
               
                LCD_WR_REG(0x2A);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0xef);        */

                LCD_WR_REG(0x11);     //Exit Sleep
                Delay_375ms();                       
                LCD_WR_REG(0x29);     //Display on
               // for(i=0;i<76800;i++)
               // {   
              //    LCD_WR_DATA(0x001F);
              //  }

                LCD_Clear(BLACK);
         
}

0条回答

一周热门 更多>