OpenEdv-开源电子网

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

ILI9488 STM32F103VE FSMC 驱动能读取9488ID,但是无法显示图像全是一片白

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-1-22
在线时间
6 小时
发表于 2020-10-11 11:42:38 | 显示全部楼层 |阅读模式
10金钱
  1. 先说说崩溃的内心,原理图和全部代码打包文件中,大师下载帮看看。
复制代码
{                  
    u16 i;

    GPIO_InitTypeDef GPIO_InitStructure;
    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
    FSMC_NORSRAMTimingInitTypeDef  writeTiming;

        RCC->AHBENR|=1<<8;        //??FSMC??   
   RCC->APB2ENR|=1<<0;      //??PORTB??
   RCC->APB2ENR|=1<<3;      //??PORTB??
    RCC->APB2ENR|=1<<5;      //??PORTD??
    RCC->APB2ENR|=1<<6;      //??PORTE??

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


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12;                //PB0 推挽输出 背光
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                //PB0 推挽输出 背光
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    //PORTD复用推挽输出  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|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(GPIOD, &GPIO_InitStructure);

    //PORTE复用推挽输出  
    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;              // //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 = GPIO_Pin_0|GPIO_Pin_12;    // //PORTD复用推挽输出  
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          //复用推挽输出   
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//  GPIO_Init(GPIOG, &GPIO_InitStructure);

    readWriteTiming.FSMC_AddressSetupTime = 0x01;    //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
  readWriteTiming.FSMC_AddressHoldTime = 0x00;   //地址保持时间(ADDHLD)模式A未用到
  readWriteTiming.FSMC_DataSetupTime = 0xf;      // 数据保存时间为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 = 0x0;    //地址保持时间(A     
  writeTiming.FSMC_DataSetupTime = 0x3;      ////数据保存时间为4个HCLK  
  writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  writeTiming.FSMC_CLKDivision = 0x00;
  writeTiming.FSMC_DataLatency = 0x00;
  writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;   //模式A


  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_LCD_BACKx;//  这里我们使用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_LCD_BACKx, ENABLE);  // 使能BANK1

//GPIOB->CRL&=0XFFFFFF0F; //PB1 ???? ??
//GPIOB->CRL|=0X00000030;   
////PORTD??????
//GPIOD->CRH&=0X000FF000;
//GPIOD->CRH|=0XBBB00BBB;
//GPIOD->CRL&=0X0F00FF00;
//GPIOD->CRL|=0XB0BB00BB;     
////PORTE??????
//GPIOE->CRH&=0X00000000;
//GPIOE->CRH|=0XBBBBBBBB;
//GPIOE->CRL&=0X000FFFFF;
//GPIOE->CRL|=0XBBB00000;      

////?????
//bank1?NE1~4,??????BCR+TCR,??????????
//??????NE1 ,????BTCR[0],[1]?     
//FSMC_Bank1->BTCR[0]=0X00000000;
//FSMC_Bank1->BTCR[1]=0X00000000;
//FSMC_Bank1E->BWTR[0]=0X00000000;
////??BCR??? ??????
//FSMC_Bank1->BTCR[0]|=1<<12; //??????
//FSMC_Bank1->BTCR[0]|=1<<14; //?????????
//FSMC_Bank1->BTCR[0]|=1<<4;  //????????16bit      
////??BTR???
////????????      
//FSMC_Bank1->BTCR[1]|=0<<28; //??A        
//FSMC_Bank1->BTCR[1]|=1<<0;  //??????(ADDSET)?2?HCLK 1/36M=27ns   
////??????IC???????,??????,???1289??IC?
//FSMC_Bank1->BTCR[1]|=0XF<<8;   //???????16?HCLK   
////????????  
//FSMC_Bank1E->BWTR[0]|=0<<28;  //??A        
//FSMC_Bank1E->BWTR[0]|=0<<0; //??????(ADDSET)?1?HCLK
//  //4?HCLK(HCLK=72M)??????IC??????,????50ns?72M/4=24M=55ns   
//FSMC_Bank1E->BWTR[0]|=3<<8;  //???????4?HCLK
////??BANK1,??4
//FSMC_Bank1->BTCR[0]|=1<<0; //??BANK1,??1   
    LCD_EN=1;//开启TFT电源
    LCD_LED=1;              //点亮背光
    LCD_RESET=1;                         //复位引脚
    delay_ms(5);                    // delay 5 ms
    LCD_RESET=0;                         //复位
    delay_ms(200);                  // delay 50 ms
  LCD_RESET=1;                       //复位完成
  delay_ms(300); // delay 50 ms
//  LCD_WriteReg(0x0000,0x0001);

//  LCD_WriteReg(0x0000,0x0001);   
//  LCD_CS=0;                        //PB.5 输出高
//      lcddev.id=LCD_ReadReg(0x0000);  //读ID(9320/9325/9328/4531/4535等IC)
//  //    printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID
//      if(lcddev.id<0XFF||lcddev.id==0XFFFF||lcddev.id==0X9300)//读到ID不正确,新增lcddev.id==0X9300判断,因为9341在未被复位的情况下会被读成9300
//  {   
        //尝试9341 ID的读取      
        LCD_WR_REG(0XD3);                  
        lcddev.id=LCD_RD_DATA();    //dummy read   
        lcddev.id=LCD_RD_DATA();    //读到0X00
    lcddev.id=LCD_RD_DATA();    //读取93  或者94                              
        lcddev.id<<=8;
        lcddev.id|=LCD_RD_DATA();   //读取41      或者86或者88
//  }

//  printf(" LCD ID:%x\r\n",lcddev.id); //打印LCD ID
//      LCD_WR_REG( 0x11 );
//  delay_ms( 120 );
//  LCD_WR_REG( 0x29 ); /* Display ON (29h) */


//  LCD_WR_REG( 0XF7 );
//  LCD_WR_DATA( 0xA9 );
//  LCD_WR_DATA( 0x51 );
//  LCD_WR_DATA( 0x2C );
//  LCD_WR_DATA( 0x82 ); /* DSI write DCS command, use loose packet RGB 666 */

///* Power Control 1 (C0h)  */
//  LCD_WR_REG( 0xC0 );
//  LCD_WR_DATA( 0x11 );
//  LCD_WR_DATA( 0x09 );

///* Power Control 2 (C1h) */
//  LCD_WR_REG( 0xC1 );
//  LCD_WR_DATA( 0x41 );

///* VCOM Control (C5h)  */
//  LCD_WR_REG( 0XC5 );
//  LCD_WR_DATA( 0x00 );
//  LCD_WR_DATA( 0x0A );
//  LCD_WR_DATA( 0x80 );

///* Frame Rate Control (In Normal Mode/Full Colors) (B1h) */
//  LCD_WR_REG( 0xB1 );
//  LCD_WR_DATA( 0xB0 );
//  LCD_WR_DATA( 0x11 );

///* Display Inversion Control (B4h) */
//  LCD_WR_REG( 0xB4 );
//  LCD_WR_DATA( 0x02 );

///* Display Function Control (B6h)  */
//  LCD_WR_REG( 0xB6 );
//  LCD_WR_DATA( 0x02 );
//  LCD_WR_DATA( 0x22 );

///* Entry Mode Set (B7h)  */
//  LCD_WR_REG( 0xB7 );
//  LCD_WR_DATA( 0xc6 );

///* HS Lanes Control (BEh) */
//  LCD_WR_REG( 0xBE );
//  LCD_WR_DATA( 0x00 );
//  LCD_WR_DATA( 0x04 );

///* Set Image Function (E9h)  */
//  LCD_WR_REG( 0xE9 );
//  LCD_WR_DATA( 0x00 );

//  LCD_WR_REG( 0x36 );
//  LCD_WR_DATA( 0x08 );

///* Interface Pixel Format (3Ah) */
//  LCD_WR_REG( 0x3A );
//  LCD_WR_DATA( 0x55 ); /* 0x55 : 16 bits/pixel  */

///* PGAMCTRL (Positive Gamma Control) (E0h) */
//  LCD_WR_REG( 0xE0 );
//  LCD_WR_DATA( 0x00 );
//  LCD_WR_DATA( 0x07 );
//  LCD_WR_DATA( 0x10 );
//  LCD_WR_DATA( 0x09 );
//  LCD_WR_DATA( 0x17 );
//  LCD_WR_DATA( 0x0B );
//  LCD_WR_DATA( 0x41 );
//  LCD_WR_DATA( 0x89 );
//  LCD_WR_DATA( 0x4B );
//  LCD_WR_DATA( 0x0A );
//  LCD_WR_DATA( 0x0C );
//  LCD_WR_DATA( 0x0E );
//  LCD_WR_DATA( 0x18 );
//  LCD_WR_DATA( 0x1B );
//  LCD_WR_DATA( 0x0F );

///* NGAMCTRL (Negative Gamma Control) (E1h)  */
//  LCD_WR_REG( 0XE1 );
//  LCD_WR_DATA( 0x00 );
//  LCD_WR_DATA( 0x17 );
//  LCD_WR_DATA( 0x1A );
//  LCD_WR_DATA( 0x04 );
//  LCD_WR_DATA( 0x0E );
//  LCD_WR_DATA( 0x06 );
//  LCD_WR_DATA( 0x2F );
//  LCD_WR_DATA( 0x45 );
//  LCD_WR_DATA( 0x43 );
//  LCD_WR_DATA( 0x02 );
//  LCD_WR_DATA( 0x0A );
//  LCD_WR_DATA( 0x09 );
//  LCD_WR_DATA( 0x32 );
//  LCD_WR_DATA( 0x36 );
//  LCD_WR_DATA( 0x0F );


LCD_WR_REG(0xE0);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x0f);
LCD_WR_DATA(0x0D);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x3c);
LCD_WR_DATA(0x78);
LCD_WR_DATA(0x4A);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x1e);
LCD_WR_DATA(0x0f);  

LCD_WR_REG(0xE1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x22);
LCD_WR_DATA(0x24);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x12);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x36);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x47);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x0a);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x30);
LCD_WR_DATA(0x37);
LCD_WR_DATA(0x0f);

LCD_WR_REG(0xC0);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x10);

LCD_WR_REG(0xC1);
LCD_WR_DATA(0x41);

LCD_WR_REG(0xC5);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x22);
LCD_WR_DATA(0x80);

LCD_WR_REG(0x36);
LCD_WR_DATA(0x48);

LCD_WR_REG(0x3A);// Interface Mode Control
LCD_WR_DATA(0x66);


LCD_WR_REG(0XB0);  //Interface Mode Control  
LCD_WR_DATA(0x00);
LCD_WR_REG(0xB1);   //Frame rate 70HZ  
LCD_WR_DATA(0xB0);
LCD_WR_DATA(0x11);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x02);   
LCD_WR_REG(0xB6); //RGB/MCU Interface Control
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x02);

LCD_WR_REG(0xB7);
LCD_WR_DATA(0xC6);

//LCD_WR_REG(0XBE);
//LCD_WR_DATA(0x00);
//LCD_WR_DATA(0x04);

LCD_WR_REG(0xE9);
LCD_WR_DATA(0x00);

LCD_WR_REG(0XF7);   
LCD_WR_DATA(0xA9);
LCD_WR_DATA(0x51);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x82);

LCD_WR_REG(0x11);
delay_ms(120);
LCD_WR_REG(0x29);

/* Sleep Out (11h */
//  LCD_WR_REG( 0x11 );
//  delay_ms( 120 );
//  LCD_WR_REG( 0x29 ); /* Display ON (29h) */


    LCD_Display_Dir(0);     //默认为竖屏
    LCD_Clear(BLUE);//显示蓝色背景
//  LCD_Fill(0,0,200,200,BLUE);

}  
下面是部分头文件
#define FSMC_LCD_BACKx                 FSMC_Bank1_NORSRAM1
//////////////////////////////////////////////////////////////////////////////////   
//-----------------LCD端口定义----------------
#define LCD_LED PAout(8) //LCD背光  PB0      
#define LCD_EN PAout(12) //LCD背光  PB0      
#define LCD_RESET PDout(3) //LCD背光  PB0         
#define LCD_DCX PDout(13) //LCD背光  PB0      
#define LCD_CS PDout(13) //LCD背光  PB0
//LCD地址结构体
typedef struct
{
    vu16 LCD_REG;
    vu16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
//注意设置时STM32内部会右移一位对其!              
#define LCD_BASE        ((u32)(0x60000000 | 0x0007FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)



STM32F103VE

STM32F103VE

ILI9488

ILI9488

遥控器原理图.pdf

511.73 KB, 下载次数: 2

原理图

ILI9488 STM32F103VE FSMC BANK1.zip

4.95 MB, 下载次数: 9

程序

最佳答案

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

还没有解决 我自己先顶自己个肺吧! FSMC用的很流畅了,也玩明白了。改了几个列成 示波器都能看到每个腿的脉冲 就是不能正常。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-1-22
在线时间
6 小时
 楼主| 发表于 2020-10-11 11:42:39 | 显示全部楼层
还没有解决 我自己先顶自己个肺吧!
FSMC用的很流畅了,也玩明白了。改了几个列成  示波器都能看到每个腿的脉冲  就是不能正常。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-1-22
在线时间
6 小时
 楼主| 发表于 2020-10-11 11:49:20 | 显示全部楼层
找原子姥爷和厂家的程序都试过了,就是能读取到ID 9488 但是无法显示 依然一片白,我在最后初始化完成的时候 刷成了蓝色,换了几个程序都是一样
仔细看看都是原子姥爷的程序改出来的。LCD_BASE应该没错吧  地址线用的A18  改成别的连9488都没有了。
LCD_EN是 单片机控制9193 电源芯片上电给LCD供电的  这个应该是没有问题,否则连背景都不良  原理图LEDK接了68欧电阻  各种阻值都试过了  现在直接短接。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-1-22
在线时间
6 小时
 楼主| 发表于 2020-10-11 11:50:43 | 显示全部楼层
请大神出现,帮看看FSMC是不是用错了,我是第一次用这个 ,内心受到核爆一般的重创。
回复

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-7-13
在线时间
31 小时
发表于 2021-7-21 22:28:15 | 显示全部楼层
应该是LCD_BASE有问题
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2019-6-8
在线时间
77 小时
发表于 2021-7-22 22:04:51 | 显示全部楼层
你应该去找个逻辑分析仪,看一下初始化协议对不对,然后在看看发送数据对不对,你这样对着函数找能找到什么呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 22:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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