OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4794|回复: 3

NT35310 LCD_ID读取一直是FF00,

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-6-6
在线时间
15 小时
发表于 2016-6-13 15:42:01 | 显示全部楼层 |阅读模式
5金钱
今天在调试LCD_tft彩屏显示,配置程序是这样的
因为外部是与FSMC的A16相连  所以 修改了这里

#define LCD_BASE        ((u32)(0x6C000000 | 0x0001FFFE))            //0x000007FE
#define LCD             ((LCD_TypeDef *) LCD_BASE)
//////////////////////////////////////////////////////////////////////////////////

配置是这样的
GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
FSMC_NORSRAMTimingInitTypeDef  writeTiming;


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);

最佳答案

查看完整内容[请看2#楼]

解决了,不知道为什么,把IO口的速度从50M降低到10M就能正常工作了,谢谢原子哥
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-6-6
在线时间
15 小时
 楼主| 发表于 2016-6-13 15:42:02 | 显示全部楼层
解决了,不知道为什么,把IO口的速度从50M降低到10M就能正常工作了,谢谢原子哥
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-6-6
在线时间
15 小时
 楼主| 发表于 2016-6-13 16:37:30 | 显示全部楼层
GPIO_InitTypeDef GPIO_InitStructure;
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
        FSMC_NORSRAMTimingInitTypeDef  writeTiming;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);        //使能FSMC时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟 RCC_APB2Periph_AFIO


        
        GPIO_InitStructure.GPIO_Pin = LCDBackLightPortBit;                //PB0 推挽输出 背光
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(LCDBackLightPort, &GPIO_InitStructure);
      
        //PORTD复用推挽输出  
        GPIO_InitStructure.GPIO_Pin = FSMC_D1_PortBit;//GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;                                 //        //PORTD复用推挽输出  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(FSMC_D1_Port, &GPIO_InitStructure);

//         //PORTD复用推挽输出  
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;                                 //        //PORTD复用推挽输出  
//         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
//         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//         GPIO_Init(GPIOD, &GPIO_InitStructure);
          
        //PORTE复用推挽输出  FE7-FE15
        GPIO_InitStructure.GPIO_Pin = FSMC_D2_PortBit;//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;                                 //        //PORTD复用推挽输出  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
          
           //        //PORTG12复用推挽输出 A0       
        GPIO_InitStructure.GPIO_Pin =FSMC_RSCS_PortBit;// GPIO_Pin_0|GPIO_Pin_12;         //        //PORTD复用推挽输出  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(FSMC_RSCS_Port, &GPIO_InitStructure);
        //reset port retorration
        GPIO_InitStructure.GPIO_Pin =FSMC_Reset_PortBit;// GPIO_Pin_0|GPIO_Pin_12;         //        //PORTD复用推挽输出  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出   
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(FSMC_Reset_Port, &GPIO_InitStructure);
        
        LCD_Reset=0;
        delay_ms(100);
        LCD_Reset=0;
        
        readWriteTiming.FSMC_AddressSetupTime = 0x01;         //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
    readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到       
    readWriteTiming.FSMC_DataSetupTime = 0x0f;                 // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A
   

    writeTiming.FSMC_AddressSetupTime = 0x00;         //地址建立时间(ADDSET)为1个HCLK  
    writeTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(A               
    writeTiming.FSMC_DataSetupTime = 0x03;                 ////数据保存时间为4个HCLK       
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A

    LCD_LED=0;//关背光灯  
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //  存储器写使能
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

           FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1
       
   
     GPIO_ResetBits(GPIOE, GPIO_Pin_1);
        delay_ms(500);
        GPIO_SetBits(GPIOE, GPIO_Pin_1 );
        delay_ms(800);
        
        delay_ms(50); // delay 50 ms
        LCD_WriteReg(0x0000,0x0001);
        delay_ms(50); // delay 50 ms
          lcddev.id = LCD_ReadReg(0x0000);   
          if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
        {       
                //尝试9341 ID的读取               
                LCD_WR_REG(0XD3);                                  
                LCD_RD_DATA();                                 //dummy read        
                LCD_RD_DATA();                       //读到0X00
                  lcddev.id=LCD_RD_DATA();           //读取93                                                                  
                lcddev.id<<=8;
                lcddev.id|=LCD_RD_DATA();          //读取41                                      
                if(lcddev.id!=0X9341)                //非9341,尝试是不是6804
                {       
                        LCD_WR_REG(0XBF);                                  
                        LCD_RD_DATA();                         //dummy read          
                         LCD_RD_DATA();               //读回0X01                          
                         LCD_RD_DATA();                         //读回0XD0                                  
                          lcddev.id=LCD_RD_DATA();//这里读回0X68
                        lcddev.id<<=8;
                          lcddev.id|=LCD_RD_DATA();//这里读回0X04          
                        if(lcddev.id!=0X6804)        //也不是6804,尝试看看是不是NT35310
                        {
                                LCD_WR_REG(0XD4);                                  
                                LCD_RD_DATA();                                 //dummy read  
                                LCD_RD_DATA();                           //读回0X01         
                                lcddev.id=LCD_RD_DATA();        //读回0X53       
                                lcddev.id<<=8;         
                                lcddev.id|=LCD_RD_DATA();        //这里读回0X10         
                                if(lcddev.id!=0X5310)                //也不是NT35310,尝试看看是不是NT35510
                                {
                                        LCD_WR_REG(0XDA00);       
                                        LCD_RD_DATA();                   //读回0X00         
                                        LCD_WR_REG(0XDB00);       
                                        lcddev.id=LCD_RD_DATA();//读回0X80
                                        lcddev.id<<=8;       
                                        LCD_WR_REG(0XDC00);       
                                        lcddev.id|=LCD_RD_DATA();//读回0X00               
                                        if(lcddev.id==0x8000)lcddev.id=0x5510;//NT35510读回的ID是8000H,为方便区分,我们强制设置为5510
                                }
                        }
                }         
        }
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-15 22:19:17 | 显示全部楼层
直接插我们开发板,屏幕好用么
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 18:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表