STM32F746 FMC 驱动3.97寸NT35510 对应原子程序修改。还没有初始化成功

2019-07-20 10:28发布

本帖最后由 qiancheng2014 于 2016-7-3 15:11 编辑

[mw_shl_code=c,true]#include "lcd.h"
#include "stdlib.h"
#include "font.h"
#include "usart.h"         
#include "delay.h"         
#include "stm32f7xx_hal_sram.h"
SRAM_HandleTypeDef SRAM_Handler;


u32 POINT_COLOR=0xFF000000;
u32 BACK_COLOR =0xFFFFFFFF;

_lcd_dev lcddev;
           
void LCD_WR_REG(vu16 regval)
{   
        regval=regval;        
        LCD->LCD_REG=regval;
}

void LCD_WR_DATA(vu16 data)
{         
        data=data;        
        LCD->LCD_RAM=data;                 
}

u16 LCD_RD_DATA(void)
{
        vu16 ram;
        ram=LCD->LCD_RAM;        
        return ram;         
}                                          

void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)
{        
        LCD->LCD_REG = LCD_Reg;
        LCD->LCD_RAM = LCD_RegValue;/
}           

u16 LCD_ReadReg(u16 LCD_Reg)
{                                                                                   
        LCD_WR_REG(LCD_Reg);
        delay_us(5);                  
        return LCD_RD_DATA();        
}   

void LCD_WriteRAM_Prepare(void)
{
         LCD->LCD_REG=lcddev.wramcmd;         
}         

void LCD_WriteRAM(u16 RGB_Code)
{                                                            
        LCD->LCD_RAM = RGB_Code;
}

u16 LCD_BGR2RGB(u16 c)
{
        u16  r,g,b,rgb;   
        b=(c>>0)&0x1f;
        g=(c>>5)&0x3f;
        r=(c>>11)&0x1f;         
        rgb=(b<<11)+(g<<5)+(r<<0);                 
        return(rgb);
}

void opt_delay(u8 i)
{
        while(i--);
}

u32 LCD_ReadPoint(u16 x,u16 y)
{
         u16 r=0,g=0,b=0;
        if(x>=lcddev.width||y>=lcddev.height)return 0;        
        LCD_SetCursor(x,y);            
        if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X2E);
        else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);        
         r=LCD_RD_DATA();                                                                //dummy Read           
        if(lcddev.id==0X1963)return r;        
        opt_delay(2);         
         r=LCD_RD_DATA();

        opt_delay(2);                                            
        b=LCD_RD_DATA();
        g=r&0XFF;
        g<<=8;
        return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));        //ILI9341/NT35310/NT35510&ETH;è&Ograve;&ordf;&sup1;&laquo;&Ecirc;&frac12;×&ordf;&raquo;&raquo;&Ograve;&raquo;&Iuml;&Acirc;
}   


void LCD_DisplayOn(void)
{                                          
        if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X29);        
        else if(lcddev.id==0X5510)LCD_WR_REG(0X2900);
}         

void LCD_DisplayOff(void)
{           
        if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X1963)LCD_WR_REG(0X28);
        else if(lcddev.id==0X5510)LCD_WR_REG(0X2800);        
}   

void LCD_SetCursor(u16 Xpos, u16 Ypos)
{         
         if(lcddev.id==0X9341||lcddev.id==0X5310)
        {                    
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                          
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);                 
        }else if(lcddev.id==0X1963)
        {                                          
                if(lcddev.dir==0)
                {
                        Xpos=lcddev.width-1-Xpos;
                        LCD_WR_REG(lcddev.setxcmd);
                        LCD_WR_DATA(0);LCD_WR_DATA(0);                 
                        LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                          
                }else
                {
                        LCD_WR_REG(lcddev.setxcmd);
                        LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                 
                        LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);                                                  
                }        
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);                 
                LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);                                          
               
        }else if(lcddev.id==0X5510)
        {
                LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(Xpos>>8);                 
                LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(Xpos&0XFF);                        
                LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(Ypos>>8);                  
                LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(Ypos&0XFF);                        
        }
}                  

void LCD_Scan_Dir(u8 dir)
{
        u16 regval=0;
        u16 dirreg=0;
        u16 temp;  
        if((lcddev.dir==1&&lcddev.id!=0X1963)||(lcddev.dir==0&&lcddev.id==0X1963))
        {                           
                switch(dir)//·&frac12;&Iuml;ò×&ordf;&raquo;&raquo;
                {
                        case 0:dir=6;break;
                        case 1:dir=7;break;
                        case 2:dir=4;break;
                        case 3:dir=5;break;
                        case 4:dir=1;break;
                        case 5:dir=0;break;
                        case 6:dir=3;break;
                        case 7:dir=2;break;            
                }
        }
        if(lcddev.id==0x9341||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963)//9341/5310/5510/1963,&Igrave;&Oslash;&Ecirc;&acirc;&acute;&brvbar;&Agrave;í
        {
                switch(dir)
                {
                        case L2R_U2D://&acute;&Oacute;×ó&micro;&frac12;&Oacute;&Ograve;,&acute;&Oacute;&Eacute;&Iuml;&micro;&frac12;&Iuml;&Acirc;
                                regval|=(0<<7)|(0<<6)|(0<<5);
                                break;
                        case L2R_D2U://&acute;&Oacute;×ó&micro;&frac12;&Oacute;&Ograve;,&acute;&Oacute;&Iuml;&Acirc;&micro;&frac12;&Eacute;&Iuml;
                                regval|=(1<<7)|(0<<6)|(0<<5);
                                break;
                        case R2L_U2D://&acute;&Oacute;&Oacute;&Ograve;&micro;&frac12;×ó,&acute;&Oacute;&Eacute;&Iuml;&micro;&frac12;&Iuml;&Acirc;
                                regval|=(0<<7)|(1<<6)|(0<<5);
                                break;
                        case R2L_D2U://&acute;&Oacute;&Oacute;&Ograve;&micro;&frac12;×ó,&acute;&Oacute;&Iuml;&Acirc;&micro;&frac12;&Eacute;&Iuml;
                                regval|=(1<<7)|(1<<6)|(0<<5);
                                break;         
                        case U2D_L2R://&acute;&Oacute;&Eacute;&Iuml;&micro;&frac12;&Iuml;&Acirc;,&acute;&Oacute;×ó&micro;&frac12;&Oacute;&Ograve;
                                regval|=(0<<7)|(0<<6)|(1<<5);
                                break;
                        case U2D_R2L://&acute;&Oacute;&Eacute;&Iuml;&micro;&frac12;&Iuml;&Acirc;,&acute;&Oacute;&Oacute;&Ograve;&micro;&frac12;×ó
                                regval|=(0<<7)|(1<<6)|(1<<5);
                                break;
                        case D2U_L2R://&acute;&Oacute;&Iuml;&Acirc;&micro;&frac12;&Eacute;&Iuml;,&acute;&Oacute;×ó&micro;&frac12;&Oacute;&Ograve;
                                regval|=(1<<7)|(0<<6)|(1<<5);
                                break;
                        case D2U_R2L://&acute;&Oacute;&Iuml;&Acirc;&micro;&frac12;&Eacute;&Iuml;,&acute;&Oacute;&Oacute;&Ograve;&micro;&frac12;×ó
                                regval|=(1<<7)|(1<<6)|(1<<5);
                                break;         
                }
                if(lcddev.id==0X5510)dirreg=0X3600;
                else dirreg=0X36;
                 if((lcddev.id!=0X5310)&&(lcddev.id!=0X5510)&&(lcddev.id!=0X1963))regval|=0X08;//5310/5510/1963&sup2;&raquo;&ETH;è&Ograve;&ordf;BGR   
                 LCD_WriteReg(dirreg,regval);
                if(lcddev.id!=0X1963)//1963&sup2;&raquo;×&ouml;×&oslash;±ê&acute;&brvbar;&Agrave;í
                {
                        if(regval&0X20)
                        {
                                if(lcddev.width<lcddev.height)//&frac12;&raquo;&raquo;&raquo;X,Y
                                {
                                        temp=lcddev.width;
                                        lcddev.width=lcddev.height;
                                        lcddev.height=temp;
                                }
                        }else  
                        {
                                if(lcddev.width>lcddev.height)//&frac12;&raquo;&raquo;&raquo;X,Y
                                {
                                        temp=lcddev.width;
                                        lcddev.width=lcddev.height;
                                        lcddev.height=temp;
                                }
                        }  
                }
                if(lcddev.id==0X5510)
                {
                        LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(0);
                        LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(0);
                        LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA((lcddev.width-1)>>8);
                        LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA((lcddev.width-1)&0XFF);
                        LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(0);
                        LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(0);
                        LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA((lcddev.height-1)>>8);
                        LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA((lcddev.height-1)&0XFF);
                }else
                {
                        LCD_WR_REG(lcddev.setxcmd);
                        LCD_WR_DATA(0);LCD_WR_DATA(0);
                        LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);
                        LCD_WR_REG(lcddev.setycmd);
                        LCD_WR_DATA(0);LCD_WR_DATA(0);
                        LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);  
                }
          }
}     
//&raquo;&shy;&micro;&atilde;
//x,y:×&oslash;±ê
//POINT_COLOR:&acute;&Euml;&micro;&atilde;&micro;&Auml;&Ntilde;&Otilde;&Eacute;&laquo;
void LCD_DrawPoint(u16 x,u16 y)
{
        LCD_SetCursor(x,y);                //&Eacute;è&Ouml;&Atilde;&sup1;&acirc;±ê&Icirc;&raquo;&Ouml;&Atilde;
        LCD_WriteRAM_Prepare();        //&iquest;&ordf;&Ecirc;&frac14;&ETH;&acute;&Egrave;&euml;GRAM
        LCD->LCD_RAM=POINT_COLOR;  
}
//&iquest;ì&Euml;&Ugrave;&raquo;&shy;&micro;&atilde;
//x,y:×&oslash;±ê
//color:&Ntilde;&Otilde;&Eacute;&laquo;
void LCD_Fast_DrawPoint(u16 x,u16 y,u32 color)
{           
        if(lcddev.id==0X9341||lcddev.id==0X5310)
        {
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                           
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                           
        }else if(lcddev.id==0X5510)
        {
                LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(x>>8);  
                LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(x&0XFF);         
                LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(y>>8);  
                LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(y&0XFF);
        }else if(lcddev.id==0X1963)
        {
                if(lcddev.dir==0)x=lcddev.width-1-x;
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                 
                LCD_WR_DATA(x>>8);LCD_WR_DATA(x&0XFF);                 
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                 
                LCD_WR_DATA(y>>8);LCD_WR_DATA(y&0XFF);                 
        }                 
        LCD->LCD_REG=lcddev.wramcmd;
        LCD->LCD_RAM=color;
}         
//SSD1963 ±&sup3;&sup1;&acirc;&Eacute;è&Ouml;&Atilde;
//pwm:±&sup3;&sup1;&acirc;&micro;&Egrave;&frac14;&para;,0~100.&Ocirc;&frac12;&acute;ó&Ocirc;&frac12;&Aacute;&Aacute;.
void LCD_SSD_BackLightSet(u8 pwm)
{        
        LCD_WR_REG(0xBE);        //&Aring;&auml;&Ouml;&AtildeWM&Ecirc;&auml;&sup3;&ouml;
        LCD_WR_DATA(0x05);        //1&Eacute;è&Ouml;&AtildeWM&AElig;&micro;&Acirc;&Ecirc;
        LCD_WR_DATA(pwm*2.55);//2&Eacute;è&Ouml;&AtildeWM&Otilde;&frac14;&iquest;&Otilde;±&Egrave;
        LCD_WR_DATA(0x01);        //3&Eacute;è&Ouml;&Atilde;C
        LCD_WR_DATA(0xFF);        //4&Eacute;è&Ouml;&Atilde;D
        LCD_WR_DATA(0x00);        //5&Eacute;è&Ouml;&Atilde;E
        LCD_WR_DATA(0x00);        //6&Eacute;è&Ouml;&Atilde;F
}

//&Eacute;è&Ouml;&Atilde;LCD&Iuml;&Ocirc;&Ecirc;&frac34;·&frac12;&Iuml;ò
//dir:0,&Ecirc;ú&AElig;&Aacute;&pound;&raquo;1,&ordm;á&AElig;&Aacute;
void LCD_Display_Dir(u8 dir)
{
        lcddev.dir=dir;                //&Ecirc;ú&AElig;&Aacute;/&ordm;á&AElig;&Aacute;
        if(dir==0)                        //&Ecirc;ú&AElig;&Aacute;
        {
                lcddev.width=240;
                lcddev.height=320;
                if(lcddev.id==0X9341||lcddev.id==0X5310)
                {
                        lcddev.wramcmd=0X2C;
                         lcddev.setxcmd=0X2A;
                        lcddev.setycmd=0X2B;           
                        if(lcddev.id==0X5310)
                        {
                                lcddev.width=320;
                                lcddev.height=480;
                        }
                }else if(lcddev.id==0x5510)
                {
                        lcddev.wramcmd=0X2C00;
                         lcddev.setxcmd=0X2A00;
                        lcddev.setycmd=0X2B00;
                        lcddev.width=480;
                        lcddev.height=800;
                }else if(lcddev.id==0X1963)
                {
                        lcddev.wramcmd=0X2C;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;&Egrave;&euml;GRAM&micro;&Auml;&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.setxcmd=0X2B;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;X×&oslash;±ê&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.setycmd=0X2A;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;Y×&oslash;±ê&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.width=480;                //&Eacute;è&Ouml;&Atilde;&iquest;í&para;&Egrave;480
                        lcddev.height=800;                //&Eacute;è&Ouml;&Atilde;&cedil;&szlig;&para;&Egrave;800  
                }
        }else                                 //&ordm;á&AElig;&Aacute;
        {                                          
                lcddev.width=320;
                lcddev.height=240;
                if(lcddev.id==0X9341||lcddev.id==0X5310)
                {
                        lcddev.wramcmd=0X2C;
                         lcddev.setxcmd=0X2A;
                        lcddev.setycmd=0X2B;           
                }else if(lcddev.id==0x5510)
                {
                        lcddev.wramcmd=0X2C00;
                         lcddev.setxcmd=0X2A00;
                        lcddev.setycmd=0X2B00;
                        lcddev.width=800;
                        lcddev.height=480;
                }else if(lcddev.id==0X1963)
                {
                        lcddev.wramcmd=0X2C;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;&Egrave;&euml;GRAM&micro;&Auml;&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.setxcmd=0X2A;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;X×&oslash;±ê&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.setycmd=0X2B;        //&Eacute;è&Ouml;&Atilde;&ETH;&acute;Y×&oslash;±ê&Ouml;&cedil;&Aacute;&icirc;
                        lcddev.width=800;                //&Eacute;è&Ouml;&Atilde;&iquest;í&para;&Egrave;800
                        lcddev.height=480;                //&Eacute;è&Ouml;&Atilde;&cedil;&szlig;&para;&Egrave;480  
                }
                if(lcddev.id==0X5310)
                {         
                        lcddev.width=480;
                        lcddev.height=320;                        
                }
        }
        LCD_Scan_Dir(DFT_SCAN_DIR);        //&Auml;&not;&Egrave;&Iuml;&Eacute;¨&Atilde;è·&frac12;&Iuml;ò
}         
//&Eacute;è&Ouml;&Atilde;&acute;°&iquest;&Uacute;(&para;&Ocirc;RGB&AElig;&Aacute;&Icirc;&THORN;&ETH;§),&sup2;&cent;×&Ocirc;&para;&macr;&Eacute;è&Ouml;&Atilde;&raquo;&shy;&micro;&atilde;×&oslash;±ê&micro;&frac12;&acute;°&iquest;&Uacute;×ó&Eacute;&Iuml;&frac12;&Ccedil;(sx,sy).
//sx,sy:&acute;°&iquest;&Uacute;&AElig;&eth;&Ecirc;&frac14;×&oslash;±ê(×ó&Eacute;&Iuml;&frac12;&Ccedil;)
//width,height:&acute;°&iquest;&Uacute;&iquest;í&para;&Egrave;&ordm;&Iacute;&cedil;&szlig;&para;&Egrave;,±&Oslash;&ETH;&euml;&acute;ó&Oacute;&Uacute;0!!
//&acute;°&Igrave;&aring;&acute;ó&ETH;&iexcl;:width*height.
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height)
{     
        u16 twidth,theight;
        twidth=sx+width-1;
        theight=sy+height-1;
        if(lcddev.id==0X9341||lcddev.id==0X5310||(lcddev.dir==1&&lcddev.id==0X1963))
        {
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(sx>>8);
                LCD_WR_DATA(sx&0XFF);         
                LCD_WR_DATA(twidth>>8);
                LCD_WR_DATA(twidth&0XFF);  
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(sy>>8);
                LCD_WR_DATA(sy&0XFF);
                LCD_WR_DATA(theight>>8);
                LCD_WR_DATA(theight&0XFF);
        }else if(lcddev.id==0X1963)//1963&Ecirc;ú&AElig;&Aacute;&Igrave;&Oslash;&Ecirc;&acirc;&acute;&brvbar;&Agrave;í
        {
                sx=lcddev.width-width-sx;
                height=sy+height-1;
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(sx>>8);
                LCD_WR_DATA(sx&0XFF);         
                LCD_WR_DATA((sx+width-1)>>8);
                LCD_WR_DATA((sx+width-1)&0XFF);  
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(sy>>8);
                LCD_WR_DATA(sy&0XFF);
                LCD_WR_DATA(height>>8);
                LCD_WR_DATA(height&0XFF);                 
        }else if(lcddev.id==0X5510)
        {
                LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(sx>>8);  
                LCD_WR_REG(lcddev.setxcmd+1);LCD_WR_DATA(sx&0XFF);         
                LCD_WR_REG(lcddev.setxcmd+2);LCD_WR_DATA(twidth>>8);   
                LCD_WR_REG(lcddev.setxcmd+3);LCD_WR_DATA(twidth&0XFF);   
                LCD_WR_REG(lcddev.setycmd);LCD_WR_DATA(sy>>8);   
                LCD_WR_REG(lcddev.setycmd+1);LCD_WR_DATA(sy&0XFF);  
                LCD_WR_REG(lcddev.setycmd+2);LCD_WR_DATA(theight>>8);   
                LCD_WR_REG(lcddev.setycmd+3);LCD_WR_DATA(theight&0XFF);  
        }
}
//SRAM&micro;×&sup2;&atilde;&Ccedil;&yacute;&para;&macr;&pound;&not;&Ecirc;±&Ouml;&Oacute;&Ecirc;&sup1;&Auml;&Uuml;&pound;&not;&Ograve;&yacute;&frac12;&Aring;·&Ouml;&Aring;&auml;
//&acute;&Euml;&ordm;&macr;&Ecirc;&yacute;&raquo;á±&raquo;HAL_SRAM_Init()&micro;÷&Oacute;&Atilde;
//hsram:SRAM&frac34;&auml;±ú
void HAL_SRAM_MspInit(SRAM_HandleTypeDef *hsram)
{        
        GPIO_InitTypeDef GPIO_Initure;
        
        __HAL_RCC_FMC_CLK_ENABLE();                                //&Ecirc;&sup1;&Auml;&Uuml;FMC&Ecirc;±&Ouml;&Oacute;
        __HAL_RCC_GPIOB_CLK_ENABLE();                        //&Ecirc;&sup1;&Auml;&Uuml;GPIOD&Ecirc;±&Ouml;&Oacute; B 0
        __HAL_RCC_GPIOD_CLK_ENABLE();                        //&Ecirc;&sup1;&Auml;&Uuml;GPIOD&Ecirc;±&Ouml;&Oacute; D 0 1 4 5 7 8 9 10 14 15
        __HAL_RCC_GPIOE_CLK_ENABLE();                        //&Ecirc;&sup1;&Auml;&Uuml;GPIOE&Ecirc;±&Ouml;&Oacute; E 7 8 9 10 11 12 13 14 15
        __HAL_RCC_GPIOF_CLK_ENABLE();                        //&Ecirc;&sup1;&Auml;&Uuml;GPIOF&Ecirc;±&Ouml;&Oacute; F0
        
                //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macrB0
        GPIO_Initure.Pin=GPIO_PIN_0;
        GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;                 //&Iacute;&AElig;&Iacute;ì&cedil;&acute;&Oacute;&Atilde;
        GPIO_Initure.Pull=GPIO_PULLUP;                        //&Eacute;&Iuml;&Agrave;&shy;
        GPIO_Initure.Speed=GPIO_SPEED_HIGH;                //&cedil;&szlig;&Euml;&Ugrave;
        HAL_GPIO_Init(GPIOB,&GPIO_Initure);     //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        
        //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macrD0,1,4,5,7,8,9,10,14,15
        GPIO_Initure.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_14|GPIO_PIN_15;
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;                 //&Iacute;&AElig;&Iacute;ì&cedil;&acute;&Oacute;&Atilde;
        GPIO_Initure.Pull=GPIO_PULLUP;                        //&Eacute;&Iuml;&Agrave;&shy;
        GPIO_Initure.Speed=GPIO_SPEED_HIGH;                //&cedil;&szlig;&Euml;&Ugrave;
        GPIO_Initure.Alternate=GPIO_AF12_FMC;        //&cedil;&acute;&Oacute;&Atilde;&Icirc;&ordf;FMC
        HAL_GPIO_Init(GPIOD,&GPIO_Initure);     //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        
        GPIO_Initure.Pin=GPIO_PIN_0;    // F0  A0
        GPIO_Initure.Mode=GPIO_MODE_AF_PP;                 //&Iacute;&AElig;&Iacute;ì&cedil;&acute;&Oacute;&Atilde;
        GPIO_Initure.Pull=GPIO_PULLUP;                        //&Eacute;&Iuml;&Agrave;&shy;
        GPIO_Initure.Speed=GPIO_SPEED_HIGH;                //&cedil;&szlig;&Euml;&Ugrave;
        GPIO_Initure.Alternate=GPIO_AF12_FMC;        //&cedil;&acute;&Oacute;&Atilde;&Icirc;&ordf;FMC
        HAL_GPIO_Init(GPIOF,&GPIO_Initure);     //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        
        //&sup3;&otilde;&Ecirc;&frac14;&raquo;&macrE7,8,9,10,11,12,13,14,15
        GPIO_Initure.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;
        
        HAL_GPIO_Init(GPIOE,&GPIO_Initure);
        

}
        
//&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;lcd
//&cedil;&Atilde;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&ordm;&macr;&Ecirc;&yacute;&iquest;&Eacute;&Ograve;&Ocirc;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&cedil;÷&Ouml;&Ouml;&ETH;&Iacute;&ordm;&Aring;&micro;&Auml;LCD(&Iuml;ê&frac14;&ucirc;±&frac34;.c&Icirc;&Auml;&frac14;&thorn;×&icirc;&Ccedil;°&Atilde;&aelig;&micro;&Auml;&Atilde;è&Ecirc;&ouml;)
void LCD_Init(void)
{           
        GPIO_InitTypeDef GPIO_Initure;
        FMC_NORSRAM_TimingTypeDef FMC_ReadWriteTim;
        FMC_NORSRAM_TimingTypeDef FMC_WriteTim;
   
        SRAM_Handler.Instance=FMC_NORSRAM_DEVICE;               
        SRAM_Handler.Extended=FMC_NORSRAM_EXTENDED_DEVICE;   
   
        SRAM_Handler.Init.NSBank=FMC_NORSRAM_BANK1;     //&Ecirc;&sup1;&Oacute;&Atilde;NE1
        SRAM_Handler.Init.DataAddressMux=FMC_DATA_ADDRESS_MUX_DISABLE; //&micro;&Oslash;&Ouml;·/&Ecirc;&yacute;&frac34;&Yacute;&Iuml;&szlig;&sup2;&raquo;&cedil;&acute;&Oacute;&Atilde;
        SRAM_Handler.Init.MemoryType=FMC_MEMORY_TYPE_SRAM;   //SRAM
        SRAM_Handler.Init.MemoryDataWidth=FMC_NORSRAM_MEM_BUS_WIDTH_16; //16&Icirc;&raquo;&Ecirc;&yacute;&frac34;&Yacute;&iquest;í&para;&Egrave;
        SRAM_Handler.Init.BurstAccessMode=FMC_BURST_ACCESS_MODE_DISABLE; //&Ecirc;&Ccedil;·&ntilde;&Ecirc;&sup1;&Auml;&Uuml;&Iacute;&raquo;·&cent;·&Atilde;&Icirc;&Ecirc;,&frac12;&ouml;&para;&Ocirc;&Iacute;&not;&sup2;&frac12;&Iacute;&raquo;·&cent;&acute;&aelig;&acute;&cent;&AElig;÷&Oacute;&ETH;&ETH;§,&acute;&Euml;&acute;&brvbar;&Icirc;&acute;&Oacute;&Atilde;&micro;&frac12;
        SRAM_Handler.Init.WaitSignalPolarity=FMC_WAIT_SIGNAL_POLARITY_LOW;//&micro;&Egrave;&acute;&yacute;&ETH;&Aring;&ordm;&Aring;&micro;&Auml;&frac14;&laquo;&ETH;&Ocirc;,&frac12;&ouml;&Ocirc;&Uacute;&Iacute;&raquo;·&cent;&Auml;&pound;&Ecirc;&frac12;·&Atilde;&Icirc;&Ecirc;&Iuml;&Acirc;&Oacute;&ETH;&Oacute;&Atilde;
        SRAM_Handler.Init.WaitSignalActive=FMC_WAIT_TIMING_BEFORE_WS;   //&acute;&aelig;&acute;&cent;&AElig;÷&Ecirc;&Ccedil;&Ocirc;&Uacute;&micro;&Egrave;&acute;&yacute;&Ouml;&Uuml;&AElig;&Uacute;&Ouml;&reg;&Ccedil;°&micro;&Auml;&Ograve;&raquo;&cedil;&ouml;&Ecirc;±&Ouml;&Oacute;&Ouml;&Uuml;&AElig;&Uacute;&raquo;&sup1;&Ecirc;&Ccedil;&micro;&Egrave;&acute;&yacute;&Ouml;&Uuml;&AElig;&Uacute;&AElig;&Uacute;&frac14;&auml;&Ecirc;&sup1;&Auml;&Uuml;NWAIT
        SRAM_Handler.Init.WriteOperation=FMC_WRITE_OPERATION_ENABLE;    //&acute;&aelig;&acute;&cent;&AElig;÷&ETH;&acute;&Ecirc;&sup1;&Auml;&Uuml;
        SRAM_Handler.Init.WaitSignal=FMC_WAIT_SIGNAL_DISABLE;           //&micro;&Egrave;&acute;&yacute;&Ecirc;&sup1;&Auml;&Uuml;&Icirc;&raquo;,&acute;&Euml;&acute;&brvbar;&Icirc;&acute;&Oacute;&Atilde;&micro;&frac12;
        SRAM_Handler.Init.ExtendedMode=FMC_EXTENDED_MODE_ENABLE;        //&para;&Aacute;&ETH;&acute;&Ecirc;&sup1;&Oacute;&Atilde;&sup2;&raquo;&Iacute;&not;&micro;&Auml;&Ecirc;±&ETH;ò
        SRAM_Handler.Init.AsynchronousWait=FMC_ASYNCHRONOUS_WAIT_DISABLE;//&Ecirc;&Ccedil;·&ntilde;&Ecirc;&sup1;&Auml;&Uuml;&Iacute;&not;&sup2;&frac12;&acute;&laquo;&Ecirc;&auml;&Auml;&pound;&Ecirc;&frac12;&Iuml;&Acirc;&micro;&Auml;&micro;&Egrave;&acute;&yacute;&ETH;&Aring;&ordm;&Aring;,&acute;&Euml;&acute;&brvbar;&Icirc;&acute;&Oacute;&Atilde;&micro;&frac12;
        SRAM_Handler.Init.WriteBurst=FMC_WRITE_BURST_DISABLE;           //&frac12;&ucirc;&Ouml;&sup1;&Iacute;&raquo;·&cent;&ETH;&acute;
        SRAM_Handler.Init.ContinuousClock=FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;
   
        //FMC&para;&Aacute;&Ecirc;±&ETH;ò&iquest;&Oslash;&Ouml;&AElig;&frac14;&Auml;&acute;&aelig;&AElig;÷
        FMC_ReadWriteTim.AddressSetupTime=0x0F;        //&micro;&Oslash;&Ouml;·&frac12;¨&Aacute;&cent;&Ecirc;±&frac14;&auml;(ADDSET)&Icirc;&ordf;15&cedil;&ouml;HCLK 1/180M*15=5.5ns*15=82.5ns
        FMC_ReadWriteTim.AddressHoldTime=0x00;
        FMC_ReadWriteTim.DataSetupTime=0x46;           //&Ecirc;&yacute;&frac34;&Yacute;±&pound;&acute;&aelig;&Ecirc;±&frac14;&auml;(DATAST)&Icirc;&ordf;70&cedil;&ouml;HCLK        =5.5*70=385ns
        FMC_ReadWriteTim.AccessMode=FMC_ACCESS_MODE_A; //&Auml;&pound;&Ecirc;&frac12;A
        //FMC&ETH;&acute;&Ecirc;±&ETH;ò&iquest;&Oslash;&Ouml;&AElig;&frac14;&Auml;&acute;&aelig;&AElig;÷
        FMC_WriteTim.AddressSetupTime=0x0F;            //&micro;&Oslash;&Ouml;·&frac12;¨&Aacute;&cent;&Ecirc;±&frac14;&auml;(ADDSET)&Icirc;&ordf;15&cedil;&ouml;HCLK=82.5ns
        FMC_WriteTim.AddressHoldTime=0x00;
        FMC_WriteTim.DataSetupTime=0x0F;               //&Ecirc;&yacute;&frac34;&Yacute;±&pound;&acute;&aelig;&Ecirc;±&frac14;&auml;(DATAST)&Icirc;&ordf;5.5ns*15&cedil;&ouml;HCLK=82.5ns
        FMC_WriteTim.AccessMode=FMC_ACCESS_MODE_A;     //&Auml;&pound;&Ecirc;&frac12;A
        HAL_SRAM_Init(&SRAM_Handler,&FMC_ReadWriteTim,&FMC_WriteTim);               
        delay_ms(50); // delay 50 ms
        

  lcddev.id=0X5510;        
        
        if(lcddev.id==0X9341)        //9341&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        {         
                ;
        }else if(lcddev.id==0x5310)
        {
                ;
        }else if(lcddev.id==0x5510)
        {
                LCD_WriteReg(0xF000,0x55);
                LCD_WriteReg(0xF001,0xAA);
                LCD_WriteReg(0xF002,0x52);
                LCD_WriteReg(0xF003,0x08);
                LCD_WriteReg(0xF004,0x01);
                //AVDD Set AVDD 5.2V
                LCD_WriteReg(0xB000,0x0D);
                LCD_WriteReg(0xB001,0x0D);
                LCD_WriteReg(0xB002,0x0D);
                //AVDD ratio
                LCD_WriteReg(0xB600,0x34);
                LCD_WriteReg(0xB601,0x34);
                LCD_WriteReg(0xB602,0x34);
                //AVEE -5.2V
                LCD_WriteReg(0xB100,0x0D);
                LCD_WriteReg(0xB101,0x0D);
                LCD_WriteReg(0xB102,0x0D);
                //AVEE ratio
                LCD_WriteReg(0xB700,0x34);
                LCD_WriteReg(0xB701,0x34);
                LCD_WriteReg(0xB702,0x34);
                //VCL -2.5V
                LCD_WriteReg(0xB200,0x00);
                LCD_WriteReg(0xB201,0x00);
                LCD_WriteReg(0xB202,0x00);
                //VCL ratio
                LCD_WriteReg(0xB800,0x24);
            &n
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
qiancheng2014
1楼-- · 2019-07-20 10:48
已解决。FMC时序配置时间太短。。。清屏正常了。大家注意
qiancheng2014
2楼-- · 2019-07-20 11:06
 精彩回答 2  元偷偷看……
qiancheng2014
3楼-- · 2019-07-20 14:29
连接FMC_A0
qiancheng2014
4楼-- · 2019-07-20 17:32
 精彩回答 2  元偷偷看……
qiancheng2014
5楼-- · 2019-07-20 22:42
 精彩回答 2  元偷偷看……
hpdell
6楼-- · 2019-07-21 04:21
qiancheng2014 发表于 2016-7-3 15:21
初始化未贴出

都用上了 f7了啊,土豪啊

一周热门 更多>