STM32F4x Çalışmalarım

Başlatan Mucit23, 02 Aralık 2013, 00:01:25

Mucit23

Nasip olursa stm32f407 ile ilgili sorunlarımı bu başlıkta yazmak istiyorum.

Bu gün elimde bulunan SSD1963 ÇipSetli 4.3" TFT ve Stm32f407 Discovery için Delikli Pertinaks ile bir board hazırladım. Boardda discovery ile TFT LCD bağlantılarını yaptım. Amacım FSMC ile TFT yi kullanmak.

Besleme Dışında Discovery ile TFT arasında yaptığım bağlantılar bu şekilde

      PD14 -----FSMC_D0  ----TFT_D0
      PD15 -----FSMC_D1  ----TFT_D1
      PD0  -----FSMC_D2  ----TFT_D2
      PD1  -----FSMC_D3  ----TFT_D3
      PE7  -----FSMC_D4  ----TFT_D4
      PE8  -----FSMC_D5  ----TFT_D5
      PE9  -----FSMC_D6  ----TFT_D6
      PE10 -----FSMC_D7  ----TFT_D7
      PE11 -----FSMC_D8  ----TFT_D8
      PE12 -----FSMC_D9  ----TFT_D9
      PE13 -----FSMC_D10 ----TFT_D10
      PE14 -----FSMC_D11 ----TFT_D11
      PE15 -----FSMC_D12 ----TFT_D12
      PD8  -----FSMC_D13 ----TFT_D13
      PD9  -----FSMC_D14 ----TFT_D14
      PD10 -----FSMC_D15 ----TFT_D15
      PD4  -----FSMC_NOE ----TFT_RD
      PD5  -----FSMC_NWE ----TFT_WR
      PD7  -----FSMC_NE1 ----TFT_CS
      PD11 -----FSMC_A16 ----TFT_RS


Bu bağlantıları Kullandığım TFT Kütüphanesininden çıkardım

Kullandığım Kütüphane ise Bu sayfada paylaşılan kütüphane
https://www.picproje.org/index.php/topic,46031.0.html

Kütüphane ile Genel TFT ayarları dışında oynama yapmadım. Sadece TFT nin horizontal ve Vertical Tarama ayarlarını 480x272 TFT ye göre ayarladım. Kodun orjinali 800x480 TFT ye göreydi zaten.

/* Includes ------------------------------------------------------------------*/
#include "SSD1963.h"


#define ABS(X)  ((X) > 0 ? (X) : -(X))     


unsigned long color1=0;

unsigned int  HDP=479;  //Horizontal Display Period
unsigned int  HT=525;   //Horizontal Total
unsigned int  HPS=43;   //LLINE Pulse Start Position
unsigned int  LPS=8;    //Horizontal Display Period Start Position
unsigned char HPW=10;   //LLINE Pulse Width


unsigned int  VDP=271;	//Vertical Display Period
unsigned int  VT=285;	  //Vertical Total
unsigned int  VPS=12;	  //LFRAME Pulse Start Position
unsigned int  FPS=4;	  //Vertical Display Period Start Positio
unsigned char VPW=10;	  //LFRAME Pulse Width


extern u16  POINT_COLOR = BLACK;  
extern u16  BACK_COLOR  = WHITE;


static sFONT *LCD_Currentfonts;

  /* Global variables to set the written text color */
static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
  
/**
  * @}
  */ 

#ifndef USE_Delay
static void delay(__IO uint32_t nCount);
#endif /* USE_Delay*/


void SSD1963_LCD_Init(void)
{ 
  __IO uint32_t lcdid = 0;
  
/* Configure the LCD Control pins --------------------------------------------*/
  LCD_CtrlLinesConfig();
/* Configure the FSMC Parallel interface -------------------------------------*/
  LCD_FSMCConfig();
 
    /* Start Initial Sequence ------------------------------------------------*/
  
  	GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);
  	GPIOC->BSRRH = GPIO_BSRR_BS_6;
    _delay_(5);
  	GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);
/******************************************************/
     LCD_WriteCommand(0x0001);	 // software reset
     LCD_WriteCommand(0x0001);	 // software reset
            _delay_(5);

            LCD_WriteCommand(0x00E2); // PLL ayar bolumu.
            LCD_WriteData(0x0023);  //23 
            LCD_WriteData(0x0001);  //N degeri Bolucu oran1 
            LCD_WriteData(0x0004);	//4
        
            LCD_WriteCommand(0x00E0); // Start PLL 
            LCD_WriteData(0x0001);
              _delay_(5);
            LCD_WriteCommand(0x00E0); // Lock PLL 
            LCD_WriteData(0x0003);
              _delay_(5);
            //	LCD_WriteCommand(0x0001);	 // software reset
              _delay_(5);
                
            LCD_WriteCommand(0x00E6); 	// Set_lshift_freg	  	
            LCD_WriteData(0x0004);		  // 00/04
            LCD_WriteData(0x00DD);	    // 93/DD
            LCD_WriteData(0x00DC);		  // E0/DC
    /************************************************
                LCD Modu ayarlama 
    ************************************************/
            LCD_WriteCommand(0x00B0);   // Set Lcd_Mode 
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0000);
            LCD_WriteData((HDP>>8)&0X00FF);  //Set HDP
            LCD_WriteData(HDP&0X00FF);
            LCD_WriteData((VDP>>8)&0X00FF);  //Set VDP
            LCD_WriteData(VDP&0X00FF);
            LCD_WriteData(0x0000);

            LCD_WriteCommand(0x00B4);		    //HSYNC Set_hori_period.
            LCD_WriteData((HT>>8)&0X00FF);  //Set HT
            LCD_WriteData(HT&0X00FF);
            LCD_WriteData((HPS>>8)&0X00FF); //Set HPS
            LCD_WriteData(HPS&0X00FF);
            LCD_WriteData(HPW);			   			//Set HPW
            LCD_WriteData((LPS>>8)&0X00FF); //Set HPS
            LCD_WriteData(LPS&0X00FF);
            LCD_WriteData(0x0000);

            LCD_WriteCommand(0x00B6);				//VSYNC  Set_Vrt_period.
            LCD_WriteData((VT>>8)&0X00FF);  //Set VT
            LCD_WriteData(VT&0X00FF);
            LCD_WriteData((VPS>>8)&0X00FF); //Set VPS
            LCD_WriteData(VPS&0X00FF);
            LCD_WriteData(VPW);			   		  //Set VPW
            LCD_WriteData((FPS>>8)&0X00FF); //Set FPS
            LCD_WriteData(FPS&0X00FF);
						
            LCD_WriteCommand(0x002a);      //SET column address
            LCD_WriteData(0x0000);         //SET start column address=0
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0001);         //SET end column address=479
            LCD_WriteData(0x00df);
						
            LCD_WriteCommand(0x002b);      //SET page address
            LCD_WriteData(0x0000);         //SET start page address=0
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0001);         //SET end page address=271
            LCD_WriteData(0x000f);

            LCD_WriteCommand(0x00BA);       //Set_gpio_value
            LCD_WriteData(0x000F);          //GPIO[3:0] out 1

            LCD_WriteCommand(0x00B8);       //Set_gpio_conf
            LCD_WriteData(0x0007);          //GPIO3=input, GPIO[2:0]=output
            LCD_WriteData(0x0001);          //GPIO0 normal

            LCD_WriteCommand(0x0036);       //rotation
            LCD_WriteData(0x0080);

            LCD_WriteCommand(0x00F0);       //pixel data interface
            LCD_WriteData(0x0003); 

            _delay_(5);
            LCD_WriteCommand(0x0026);       //display on
            LCD_WriteData(0x0001);
            //	LCD_WriteCommand(0x0029);   //display on
            LCD_WriteCommand(0x00BE);       //set PWM for B/L
            LCD_WriteData(0x0006);
            LCD_WriteData(0x0080);
            LCD_WriteData(0x0001);
            LCD_WriteData(0x00f0);
            LCD_WriteData(0x0000);
            LCD_WriteData(0x0000);
            LCD_WriteCommand(0x00d0);       //set_dbc_conf 
            LCD_WriteData(0x0009);          // d
            LCD_WriteCommand(0x0029);       //display on
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
{
  TextColor = _TextColor; 
  BackColor = _BackColor;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
{
  *_TextColor = TextColor; *_BackColor = BackColor;
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetTextColor(__IO uint16_t Color)
{
  TextColor = Color;
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetBackColor(__IO uint16_t Color)
{
  BackColor = Color;
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_SetFont(sFONT *fonts)
{
  LCD_Currentfonts = fonts;
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
sFONT *LCD_GetFont(void)
{
  return LCD_Currentfonts;
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_DrawChar(uint16_t Xpos, uint16_t Ypos, const uint16_t *c)
{
  uint32_t index = 0, i = 0;
  uint16_t  Xaddress = 0;
  Xaddress = Xpos;
  
    SSD1963_Address_set(Xaddress,Ypos,Xaddress,Ypos);   
  
  for(index = 0; index < LCD_Currentfonts->Height; index++)
  {
 
    for(i = 0; i < LCD_Currentfonts->Width; i++)
    {
      if((((c[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> i)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
      (((c[index] & (0x1 << i)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
      {
                LCD_WriteData(BACK_COLOR); 	
      }
      else
      {
                LCD_WriteData(POINT_COLOR); 	
      } 
    }
    Xaddress++;
    SSD1963_Address_set(Xaddress,Ypos,Xaddress,Ypos);   
 
  }
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void LCD_DisplayChar(uint16_t Line, uint16_t Column, uint8_t Ascii)
{
  Ascii -= 32;
  LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
}
/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
          
void LCD_WriteCommand(uint16_t LCD_Reg)
{
 /* Write 16-bit Reg */
  LCD->LCD_REG = LCD_Reg;
}

void LCD_WriteData(uint16_t LCD_RegValue)	
{
    LCD->LCD_RAM = LCD_RegValue;
}

void SendData(uint32_t color)
{
    LCD_WriteData((color)>>16);
    LCD_WriteData((color)>>8);
    LCD_WriteData(color); 
}

void windowSet(uint16_t s_x,uint16_t e_x,uint16_t s_y,uint16_t e_y)
{
       LCD_WriteCommand(0x2a);
        LCD_WriteData((s_x)>>8);
        LCD_WriteData(s_x);
        LCD_WriteData((e_x)>>8);
        LCD_WriteData(e_x);

        LCD_WriteCommand(0x2b);
        LCD_WriteData((s_y)>>8);
        LCD_WriteData(s_y);
        LCD_WriteData((e_y)>>8);
        LCD_WriteData(e_y);	  
}

void FULL_ON(uint32_t data)
{
uint16_t x,y;
windowSet(0x0000,0x013f,0x0000,0x00ef);
LCD_WriteCommand(0x2c);
    for(x=0;x<320;x++)
        {
            for(y=0;y<240;y++)
                {
                    SendData(data);
                }   
        }	
}
 
      
void TFT_CLEAR(unsigned int color)
{                    
     unsigned int l=480,w;

    LCD_WriteCommand(0x002A);	
    LCD_WriteData(0);	    
    LCD_WriteData(0);
    LCD_WriteData(HDP>>8);	    
    LCD_WriteData(HDP&0x00ff);
    LCD_WriteCommand(0x002b);	
    LCD_WriteData(0);	    
    LCD_WriteData(0);
    LCD_WriteData(VDP>>8);	    
    LCD_WriteData(VDP&0x00ff);
    LCD_WriteCommand(0x002c);
 
    while(l--)
    {
        for(w=0;w<272;w++)
        {    
          	LCD_WriteData(color);
        }
    } 
}

/***************************************************************/

void TFT_Fill(unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend,unsigned int color)
{                    
    unsigned long n;

    n=(unsigned long)(yend-ysta+1)*(xend-xsta+1);

    LCD_WriteCommand(0x002A);	
    LCD_WriteData(xsta>>8);	    
    LCD_WriteData(xsta&0x00ff);
    LCD_WriteData(xend>>8);	    
    LCD_WriteData(xend&0x00ff);
    LCD_WriteCommand(0x002b);	
    LCD_WriteData(ysta>>8);	    
    LCD_WriteData(ysta&0x00ff);
    LCD_WriteData(yend>>8);	    
    LCD_WriteData(yend&0x00ff);
    LCD_WriteCommand(0x002c);
    while(n--)LCD_WriteData(color);
} 


void TFT_DrawPoint(unsigned int x,unsigned int y,unsigned int fontcolor)
{
    LCD_WriteCommand(0x002A);	
    LCD_WriteData(x>>8);	    
    LCD_WriteData(x&0x00ff);
    LCD_WriteData(HDP>>8);	    
    LCD_WriteData(HDP&0x00ff);
    LCD_WriteCommand(0x002b);	
    LCD_WriteData(y>>8);	    
    LCD_WriteData(y&0x00ff);
    LCD_WriteData(VDP>>8);	    
    LCD_WriteData(VDP&0x00ff);
    LCD_WriteCommand(0x002c);	
    LCD_WriteData(fontcolor); 
}  



/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_Address_set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2) 
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_Address_set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{ 
    LCD_WriteCommand(0x002A);	
    LCD_WriteData(x1>>8);	    
    LCD_WriteData(x1&0x00ff);
    LCD_WriteData(x2>>8);	    
    LCD_WriteData(x2&0x00ff);
    LCD_WriteCommand(0x002b);	
    LCD_WriteData(y1>>8);	    
    LCD_WriteData(y1&0x00ff);
    LCD_WriteData(y2>>8);	    
    LCD_WriteData(y2&0x00ff);
    LCD_WriteCommand(0x002c);			
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawPoint(uint16_t x,uint16_t y)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawPoint(uint16_t x,uint16_t y)
{
    SSD1963_Address_set(x,y,x,y);
    LCD_WriteData(POINT_COLOR); 	    
} 	 

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawPoint_big(uint16_t x,uint16_t y)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawPoint_big(uint16_t x,uint16_t y)
{
    SSD1963_LCD_Fill(x-1,y-1,x+1,y+1,POINT_COLOR);
} 

/*********************************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color) 
* Kullanisi      : 
* Output         : 
* Return         : 
**********************************************************************************************************/
void SSD1963_LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
    uint16_t i,j; 
    SSD1963_Address_set(xsta,ysta,xend,yend);   
    for(i=ysta;i<=yend;i++)
    {													   	 	
        for(j=xsta;j<=xend;j++)LCD_WriteData(color);
    } 					  	    
}  

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
    uint16_t t; 
    int xerr=0,yerr=0,delta_x,delta_y,distance; 
    int incx,incy,uRow,uCol; 

    delta_x=x2-x1; 
    delta_y=y2-y1; 
    uRow=x1; 
    uCol=y1; 
    if(delta_x>0)incx=1;  
    else if(delta_x==0)incx=0;
    else {incx=-1;delta_x=-delta_x;} 
    if(delta_y>0)incy=1; 
    else if(delta_y==0)incy=0;
    else{incy=-1;delta_y=-delta_y;} 
    if( delta_x>delta_y)distance=delta_x; 
    else distance=delta_y; 
    for(t=0;t<=distance+1;t++ )
    {  
        SSD1963_LCD_DrawPoint(uRow,uCol);
        xerr+=delta_x ; 
        yerr+=delta_y ; 
        if(xerr>distance) 
        { 
            xerr-=distance; 
            uRow+=incx; 
        } 
        if(yerr>distance) 
        { 
            yerr-=distance; 
            uCol+=incy; 
        } 
    }  
}    

/***********************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
* Kullanisi      : 
* Output         : 
* Return         : 
***************************************************************************************************/
void SSD1963_LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
    SSD1963_LCD_DrawLine(x1,y1,x2,y1);
    SSD1963_LCD_DrawLine(x1,y1,x1,y2);
    SSD1963_LCD_DrawLine(x1,y2,x2,y2);
    SSD1963_LCD_DrawLine(x2,y1,x2,y2);
}

/*******************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r)
* Kullanisi      : 
* Output         : 
* Return         : 
*******************************************************************************/
void SSD1963_Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r)
{
    int a,b;
    int di;
    a=0;b=r;	  
    di=3-(r<<1);           
    while(a<=b)
    {
        SSD1963_LCD_DrawPoint(x0-b,y0-a);             //3           
        SSD1963_LCD_DrawPoint(x0+b,y0-a);             //0           
        SSD1963_LCD_DrawPoint(x0-a,y0+b);             //1       
        SSD1963_LCD_DrawPoint(x0-b,y0-a);             //7           
        SSD1963_LCD_DrawPoint(x0-a,y0-b);             //2             
        SSD1963_LCD_DrawPoint(x0+b,y0+a);             //4               
        SSD1963_LCD_DrawPoint(x0+a,y0-b);             //5
        SSD1963_LCD_DrawPoint(x0+a,y0+b);             //6 
        SSD1963_LCD_DrawPoint(x0-b,y0+a);             
        a++;
        if(di<0)di +=4*a+6;	  
        else
        {
            di+=10+4*(a-b);   
            b--;
        } 
        SSD1963_LCD_DrawPoint(x0+a,y0+b);
    }
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
{
  uint8_t temp;
  uint8_t pos,t;
    uint16_t x0=x;
    uint16_t colortemp=POINT_COLOR;  
    
    if(x>LCD_W-16||y>LCD_H-16)return;	
    
    num=num-' ';
    
    SSD1963_Address_set(x,y,x+8-1,y+16-1);     
    if(!mode) 
    {
        for(pos=0;pos<16;pos++)
        { 
            temp=ASCII16x8_Table[(uint16_t)num*16+pos];		 
                for(t=0;t<8;t++)
                        {                 
                                if(temp&0x01)POINT_COLOR=colortemp;
                        else
                                    POINT_COLOR=BACK_COLOR;
                                    LCD_WriteData(POINT_COLOR);	
                                    temp>>=1; 
                                    x++;
                        } x=x0;	y++;
        }	
    }else  // bu kisimda yazi cikmiyor. Bu kisma ise 1 konulursa geliyor.
    {
                for(pos=0;pos<16;pos++)
                        {
                                temp=ASCII12x12_Table[(uint16_t)num*16+pos];		
                                            for(t=0;t<8;t++)
                                                {                 
                                                        if(temp&0x01)SSD1963_LCD_DrawPoint(x+t,y+pos);     
                                                        temp>>=1; 
                                                }
                        }
            } POINT_COLOR=colortemp;	    	   	 	  
}   

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/

uint32_t mypow(uint8_t m,uint8_t n)
{
    uint32_t result=1;	 
    while(n--)result*=m;    
    return result;
}			 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len)
{         	
    uint8_t t,temp;
    uint8_t enshow=0;
    num=(uint16_t)num;
    for(t=0;t<len;t++)
    {
        temp=(num/mypow(10,len-t-1))%10;
        if(enshow==0&&t<(len-1))
        {
            if(temp==0)
            {
                SSD1963_LCD_ShowChar(x+8*t,y,' ',0);
                continue;
            }else enshow=1; 
         	 
        }
     	SSD1963_LCD_ShowChar(x+8*t,y,temp+48,0); 
    }
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/

void SSD1963_LCD_Show2Num(uint16_t x,uint16_t y,uint16_t num,uint8_t len)
{         	
    uint8_t t,temp;						   
    for(t=0;t<len;t++)
    {
        temp=(num/mypow(10,len-t-1))%10;
     	SSD1963_LCD_ShowChar(x+8*t,y,temp+'0',0); 
    }
} 

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_ShowString(uint16_t x,uint16_t y,const uint8_t *p)
{         
    while(*p!='\0')
    {       
        if(x>LCD_W-16){x=0;y+=16;}
        if(y>LCD_H-16){y=x=0;SSD1963_LCD_Clear(WHITE);}
        SSD1963_LCD_ShowChar(x,y,*p,0); //0 olacak aksi halde yazi farkli cikiyor
        x+=8;
        p++;
    }  
}


/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_Clear(uint16_t color)
{                    
     unsigned int l=480,w;

    LCD_WriteCommand(0x002A);	
    LCD_WriteData(0x00);	    
    LCD_WriteData(0x00);
    LCD_WriteData(HDP>>8);	    
    LCD_WriteData(HDP&0x00ff);
    LCD_WriteCommand(0x002b);	
    LCD_WriteData(0x00);	    
    LCD_WriteData(0x00);
    LCD_WriteData(VDP>>8);	    
    LCD_WriteData(VDP&0x00ff);
    LCD_WriteCommand(0x002c);
        
    while(l--)
    {
        for(w=0;w<272;w++)
        {    
          	LCD_WriteData(color);
        }
    } 
}

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
{
    POINT_COLOR = _TextColor;  
    BACK_COLOR  = _BackColor;		
}

/***************************************************************************************
* Hazirlayan     : Mehmet
* Function Name  : SSD1963_LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t mode)
* Kullanisi      : 
* Output         : 
* Return         : 
****************************************************************************************/
void SSD1963_LCD_SetTextColor(__IO uint16_t Color)
{
  POINT_COLOR = Color;
}

/****************** Fonksiyon sonu***************/

void LCD_CtrlLinesConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIOD, GPIOE, and AFIO clocks */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE |
  						 RCC_AHB1Periph_GPIOC, ENABLE);

/*-- GPIO Configuration ------------------------------------------------------*/
  /* SRAM Data lines,  NOE and NWE configuration */
  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_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_11;//|
                                //GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
	
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

  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_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);

  /* RESET lines configuration */
  GPIOC->MODER |= GPIO_MODER_MODER6_0;
  GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6_1;	   
}

/**
  * @brief  Configures the Parallel interface (FSMC) for LCD(Parallel mode)
  * @param  None
  * @retval None
  */
void LCD_FSMCConfig(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
   
  /* Enable FSMC clock */
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
  
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 3 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
  p.FSMC_AddressSetupTime = 30;			 // 0x06 /
  p.FSMC_AddressHoldTime = 0;				   //	0 /
  p.FSMC_DataSetupTime = 30;				 //		 0x6 /
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  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_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);   

  /* Enable FSMC NOR/SRAM Bank3 */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}


#ifndef USE_Delay
/**
  * @brief  Inserts a delay time.
  * @param  nCount: specifies the delay time length.
  * @retval None
  */
static void delay(__IO uint32_t nCount)
{
  __IO uint32_t index = 0; 
  for(index = (100000 * nCount); index != 0; index--)
  {
  }
}
#endif /* USE_Delay*/
/**
  * @}
  */ 

/**
  * @}
  */ 
  
/**
  * @}
  */ 

/**
  * @}
  */ 
  
/**
  * @}
  */  

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/


Sonuca Gelirsek main programda TFT yi init ettikten sonra TFT_Clear fonksiyonu ile Ekranı Kırmızıya veya herhangi bir renge boyamaya çalışıyorum.
Ekranda hiçbir hareket olmuyor. Karta enerji verdikten sonra TFT nin Hemen arka ışıkları yanıyor(Direk bağlı zaten). Ekran ise tamamen beyaz.

Bağlantıların hepsini teker teker kontrol ettim. Yukarıda verdiğim şekilde bağlılar. Burada sıkıntı olacağını sanmıyorum.
stm32f407 ile tft arasında hareketlenmeler oluyor. Onuda şurdan anlıyorum. Discovery üzrerindeki Ledlerden bazıları LCD data hattına denk geliyor.(PD14 ile PD15) TFT init Edilirken Bu ledler yanıyor.

TFT yi 3-4 ay önce almıştım. Hiç kullanmadım daha önce.

Acaba atladığım birşeymi var. Sorun ne olabilir sizce?


respected

Hocam RESET ucunu bağlamadın mı? yoksa yazmayı mı unuttun. Göremedim onu

Mucit23

Yazmayı unutmuşum. Reset bağlı hocam. Başka birşey olmalı.  ???

M_B

Yukarda verdiğin Pin baglantılarında sorun yok.
Ama kitle TFT arasındaki baglantını  bilmiyorum ;)

Not: Ekranın 3v3 beslemesi dısında ayrıyetende 5V beslemesi var mı ? 
Olması lazım. Onu da bagladınız mı ?

Almış olduğunuz ekranın  linki var mı ? Ordan bir ekrana bakalım nasılmış
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam Ben Reset Pinini Discovery Kitin NRST hattına bağladım. Yani Resetler ortak. 

Besleme Voltajı biraz düşük geldi bana 2.83V görüyorum. Resette de bu var Ana beslemedede bu gelirim var. Birtek USB den enerji veriyorum.

TFT yi alalı epeyce olmuştu.
http://www.ebay.com/itm/4-3-TFT-LCD-Module-Display-Touch-Panel-Screen-PCB-Adapter-Build-in-SSD1963-/190742815837?pt=LH_DefaultDomain_0&hash=item2c6928645d

SSD1963 ile ilgili Boşta birtek SSS_TE pini kaldı.

Acaba FSMC ayarlarındamı sıkıntı var. İnterface kısmının düzgün çalışıp çalışmadığını nasıl test edebilirim.   

M_B

Alıntı yapılan: Mucit23 - 02 Aralık 2013, 11:41:55
Hocam Ben Reset Pinini Discovery Kitin NRST hattına bağladım. Yani Resetler ortak. 
PD11 niye baglamadınız.
NRST ile PD11 aynı mıki ?
Ben NRST ile PD11 olcuyorum kısa devre degil.
PD11 bir baglayıp deneyin bakalım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

#6
Alıntı yapılan: M_B - 02 Aralık 2013, 12:28:18
PD11 niye baglamadınız.
NRST ile PD11 aynı mıki ?
Ben NRST ile PD11 olcuyorum kısa devre değil.
PD11 bir baglayıp deneyin bakalım.


Hocam Biraz Kafam Karıştı.

Ben PD11 i TFTnin RS pinine bağlamışım.TFTnin Reset Pini ise NRST Pinine bağladım. Yani reset butonuna basıldığı zaman TFT de resetlensin diye. Acaba Buradamı hata var.

M_B

Alıntı yapılan: Mucit23 - 02 Aralık 2013, 13:33:42
Hocam Biraz Kafam Karıştı.

Ben PD11 i TFTnin RS pinine bağlamışım.TFTnin Reset Pini ise NRST Pinine bağladım. Yani reset butonuna basıldığı zaman TFT de resetlensin diye. Acaba Buradamı hata var.

Pardon Hocam  Kafanızı karıştırdım . Baglantı sekliniz dogru ben okurken yanlıs anlamısım.
Tekrar dan baktım kendi baglantı şeklimede sizin ki gibi.
PD11 --> TFT nin RS pinine
NRST--> TFT nini Reset pinine
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

#8
LCD yi çalıştırırsam bir sonraki aşamada Kamera bağlayacağım. Şişmdilik FSMC olmasada olur ama kamera bağlandığı zaman Kesinlikle FSMC olması gerekiyor.

Hocam Adım adım TFTyi test etmem gerekecek. Ben bu FSMC donanımının düzgün çalışmadığından dolayı sorun yaşladığımı düşünüyorum. Yoksa TFT mutlaka tepki verirdi. Yani Genel TFT ayarları yanlış olsa bile mutlaka ekranda birşeyler çıkardı. Bence Hala TFT ye ulaşım sağlanamıyorum. Acaba TFT GPIO port ayarlarındamı sıkıntı var? Bunu nasıl test edebilirim

Acaba Şimdi ne yapayım kafam durdu resmen.

tekosis

hocam stm32f407 ile 20khz'e kadar AC sinyal üretebilir miyiz aynı zamanda grafik basmada sıkıntı yaşar mıyız? Fikriniz nedir acaba?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Mucit23

Mehmet hocam akşam fsmc kullanılmayan başka bir kütüphane deneyeceğim.  Sorunun fsmc ve control lines ayarlarıyla ilgili olabileceğini düşünüyorum.

M_B

@Mucit23 Hocam;
Elinizde 3.2" lik ssd1298 li TFT ekranınız varsa onunla FSMC deneyebilirsiniz.
Cunku Her iki  displayde de FSMC ayarları aynı değişen bir şey yok
Tek fark :
/*----------------------- SRAM Bank 3 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
  p.FSMC_AddressSetupTime = 30;			 // 0x06 /
  p.FSMC_AddressHoldTime = 0;				   //	0 /
  p.FSMC_DataSetupTime = 30;				 //		 0x6 /

burda oluyor. Oda ekrana resim basma da falan etki yapıyor. Normal fontta sıkıntı yok.
Daha once elimdeki 3.2" TFT Lcd ye resim basarken bu kısımla cok oynadım.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam ben şunu anlamıyorum.  TFT neden hiç tepki vermiyor.  Hani ekranda ufaktan karalama bişeyler olsa bir şekilde birseyler gidiyor lcd ye diyebilecegim.
Geçen hafta ebaydan aldım birtane ssd1289 lu 3.2" tft. Zaten asıl denemelerimi onunla yapacağım. Bunuda daha önce almıştım. Dedim deneyeyim bari

Sorun hakkında başka fikri olan varmı? 

Mucit23

Edit; Fsmc olmadan başka kutuphaneyi çalıştıramam. Data pinleri sıralı degil. Yazılımla halletmek çok uğraştırır. Bu kütüphane niye çalışmıyor ona uğraşayım.

Mucit23

Benim aldığım LCD nin arka yüzü budur.

resim
Bilmiyorum dünden beri uğraşıyorum. Acaba bu LCD üzerindemi bir işlem yapmak gerekiyor. LCD nin hiç tepki vermemesini anlamıyorum. Buna Neler Sebeb olabilir 

Farklı Kaynaklardan FSMC ile kullanılmış kütüphaneler denedim.  Sonuç aynı değişmiyor. Bence Kütüphane kodlar çalışıyor. Artık LCD den şüphelenmeye başladım.