Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Mucit23 - 02 Aralık 2013, 00:01:25

Başlık: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 00:01:25
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 (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?

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: respected - 02 Aralık 2013, 00:14:20
Hocam RESET ucunu bağlamadın mı? yoksa yazmayı mı unuttun. Göremedim onu
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 00:35:06
Yazmayı unutmuşum. Reset bağlı hocam. Başka birşey olmalı.  ???
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 02 Aralık 2013, 08:24:27
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ış
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 11:41:55
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 (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.   
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 02 Aralık 2013, 12:28:18
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 13:33:42
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 02 Aralık 2013, 14:23:04
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
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 14:32:07
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: tekosis - 02 Aralık 2013, 14:53:36
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?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 15:01:17
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 02 Aralık 2013, 15:09:49
@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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 15:28:21
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ı? 
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Aralık 2013, 16:57:00
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Aralık 2013, 09:42:02
Benim aldığım LCD nin arka yüzü budur.
(http://s13.postimg.cc/civjgb02v/DSC06816.jpg) (http://postimg.cc/)
resim (http://postimg.cc/index.php?lang=turkish)
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.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: bocek - 03 Aralık 2013, 10:16:02
hocam UTFT library (http://www.henningkarlsen.com/electronics/library.php?id=52) 'deki ssd1963 için 480x272 ayarları seninkinden farklı biraz. istersen bir de bu ayarlara göre dene:

SSD1963 480x272 UTFT library için initlcd.h dosyası:

case SSD1963_480:
LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M
LCD_Write_DATA(0x23);     //N=0x36 for 6.5M, 0x23 for 10M crystal
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x54);
LCD_Write_COM(0xE0); // PLL enable
LCD_Write_DATA(0x01);
delay(10);
LCD_Write_COM(0xE0);
LCD_Write_DATA(0x03);
delay(10);
LCD_Write_COM(0x01); // software reset
delay(100);
LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution
LCD_Write_DATA(0x01);
LCD_Write_DATA(0x1F);
LCD_Write_DATA(0xFF);

LCD_Write_COM(0xB0); //LCD SPECIFICATION
LCD_Write_DATA(0x20);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x01); //Set HDP 479
LCD_Write_DATA(0xDF);
LCD_Write_DATA(0x01); //Set VDP 271
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x00);

LCD_Write_COM(0xB4); //HSYNC
LCD_Write_DATA(0x02); //Set HT 531
LCD_Write_DATA(0x13);
LCD_Write_DATA(0x00); //Set HPS 8
LCD_Write_DATA(0x08);
LCD_Write_DATA(0x2B); //Set HPW 43
LCD_Write_DATA(0x00); //Set LPS 2
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x00);

LCD_Write_COM(0xB6); //VSYNC
LCD_Write_DATA(0x01); //Set VT 288
LCD_Write_DATA(0x20);
LCD_Write_DATA(0x00); //Set VPS 4
LCD_Write_DATA(0x04);
LCD_Write_DATA(0x0c); //Set VPW 12
LCD_Write_DATA(0x00); //Set FPS 2
LCD_Write_DATA(0x02);

LCD_Write_COM(0xBA);
LCD_Write_DATA(0x0F); //GPIO[3:0] out 1

LCD_Write_COM(0xB8);
LCD_Write_DATA(0x07);     //GPIO3=input, GPIO[2:0]=output
LCD_Write_DATA(0x01); //GPIO0 normal

LCD_Write_COM(0x36); //rotation
LCD_Write_DATA(0x22);

LCD_Write_COM(0xF0); //pixel data interface
LCD_Write_DATA(0x03);


delay(1);

setXY(0, 0, 479, 271);
LCD_Write_COM(0x29); //display on

LCD_Write_COM(0xBE); //set PWM for B/L
LCD_Write_DATA(0x06);
LCD_Write_DATA(0xf0);
LCD_Write_DATA(0x01);
LCD_Write_DATA(0xf0);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);

LCD_Write_COM(0xd0);
LCD_Write_DATA(0x0d);

LCD_Write_COM(0x2C);
break;

setxy.h dosyası:
case SSD1963_480:
swap(word, x1, y1);
swap(word, x2, y2);
LCD_Write_COM(0x2a);
  LCD_Write_DATA(x1>>8);
  LCD_Write_DATA(x1);
  LCD_Write_DATA(x2>>8);
  LCD_Write_DATA(x2);
LCD_Write_COM(0x2b);
  LCD_Write_DATA(y1>>8);
  LCD_Write_DATA(y1);
  LCD_Write_DATA(y2>>8);
  LCD_Write_DATA(y2);
LCD_Write_COM(0x2c);
break;
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 03 Aralık 2013, 10:28:47
Mucit23 Hocam;
Bu Link sanırsam işinizi görecek. en azından İnitle ilgili bilgiler var
http://electronix.ru/forum/index.php?s=90e6f763acf365e3bd89e15a1e91d6b0&act=Attach&type=post&id=56808 (http://electronix.ru/forum/index.php?s=90e6f763acf365e3bd89e15a1e91d6b0&act=Attach&type=post&id=56808)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Aralık 2013, 11:01:55
Ben ilk başlarda STM32F407 ile ilgili olabileceğini düşünüyordum(fsmc veya controllines ayarları) Ama onlarda problem yok. Sorun bence LCD'nin init edilememesinden kaynaklanıyor.Belkide işlemci çok hızlı çalışıyor.İşleri Biraz yavaşlatmayı düşünüyorum. init kodlarında komutların arasına delaylar koyayım. Birde öyle deneyeyim.

Kaynaklar için Teşekkür ederim. Akşam Tekrardan ayrıntılı olarak bakacağım. Bu sefer çalışacağını umuyorum ::)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 03 Aralık 2013, 11:24:07
Mucit23 hocam;
İşlemci ne kadar hızlı çalışırsa çalışsın Sorun olmaz.
Eger SSD1963 init fonksiyonu na istediğin kadar delay koy farkeden bir şey olmaz.
Önemli olan initin doğru kurulmasıdır.
Örneğin ben 7" Lcd ile uğraşırken başıma geldi. SSD1963 PLL kısmını aktif etmedim. Ekrana yazılar o kadar çok yavaş geldi ki
dedim bu böyleyse işimiz var ;) Sonra verdiğim dokuman ve Datasheeti inceleyerek yapılması gereken init işlemlerini yaptım.
Bu işleri yaparken güzel bir not tutmuş olsaydım şimdi bu senin sorunlarını yaşamazdık.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: handybest06 - 03 Aralık 2013, 12:26:09
@M_B

SSD1289 bir LCD' yi sürmeye çalışıyorum.Ama sizin dediğiniz gibi çok yavaş .3-4 sn de ekranı doldurabiliyor.Bunu nasıl çözebilirim ?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 03 Aralık 2013, 14:08:26
Alıntı yapılan: handybest06 - 03 Aralık 2013, 12:26:09
@M_B

SSD1289 bir LCD' yi sürmeye çalışıyorum.Ama sizin dediğiniz gibi çok yavaş .3-4 sn de ekranı doldurabiliyor.Bunu nasıl çözebilirim ?
ssd1289 hangi işlemci ile suruyorsunuz?
Eger Stm32F407 ile suruyorsanız.
stm322xg_eval_lcd.c
stm322xg_eval_lcd.h
işinizi görecektir. En azından ordaki init kısımlarını kontrol edersiniz.

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Aralık 2013, 14:25:03
Hocam İnit Winstarın Kodlarını Aynen Geçirdim. Ekranda Canlanma var. :) Heyecanlandım  :D
(http://s12.postimg.cc/imbbchpy5/20131203_141400.jpg) (http://postimg.cc/image/lgegpxs49/full/)
yükle resim (http://postimg.cc/index.php?lang=turkish)
Çekmeyen Televizyonlar gibi görüntü veriyor şuanda. Mainde Yaptığım Tek şey Ekranı init ettikten sonra LCD Clear Komutuyla Ekranı Kırmızıya boyamak. Sanırsam Vertical ve Horizontal Tarama ayarlarında sıkıntı var. 



Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 03 Aralık 2013, 14:45:33
Alıntı yapılan: Mucit23 - 03 Aralık 2013, 14:25:03
Hocam İnit Winstarın Kodlarını Aynen Geçirdim. Ekranda Canlanma var. :) Heyecanlandım  :D
(http://s12.postimg.cc/imbbchpy5/20131203_141400.jpg) (http://postimg.cc/image/lgegpxs49/full/)
yükle resim (http://postimg.cc/index.php?lang=turkish)
Çekmeyen Televizyonlar gibi görüntü veriyor şuanda. Mainde Yaptığım Tek şey Ekranı init ettikten sonra LCD Clear Komutuyla Ekranı Kırmızıya boyamak. Sanırsam Vertical ve Horizontal Tarama ayarlarında sıkıntı var.
Devam et hocam olacak bu iş.
İstersen yaparkende not al ilerde bir gun gene lazım olabilir. İnsan o an unutmam sanıyor ama unutuyor. ;)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Aralık 2013, 14:51:15
Deniyorum hocam bakalım. Donanımsal olarak bir problem yok. Sorun LCD yi init etmede. Fakat Hazır kodlarla olacak iş değil bu. Winstarınkide düzgün çalışmadı. UTF de düzgün çalışmadı. Anlaşılan Datasheete gömüleceğiz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Aralık 2013, 16:49:42
Hocam işi %80 Çözdüm.

4.3" için Doğru init kodları bunlar

           
            LCD_WriteCommand(0x0001); // software reset
            LCD_WriteCommand(0x0001); // software reset
    LCD_WriteCommand(0x0001); // software reset

    LCD_WriteCommand(0x00E2);  //SET PLL freq=120MHz ;
    LCD_WriteData(0x0023);     //N=0x36 for 6.5M, 0x23 for 10M crystal
            LCD_WriteData(0x0001);
            LCD_WriteData(0x0004);
           
            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

    LCD_WriteCommand(0xE6);    ///PLL setting for PCLK, depends on resolution
            LCD_WriteData(0x0001);
            LCD_WriteData(0x0033);
            LCD_WriteData(0x0032);

            LCD_WriteCommand(0x00B0);   // Set Lcd_Mode
            LCD_WriteData(0x0020);
            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);
            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(0x00F0);       //Pixel data interface
            LCD_WriteData(0x0003);          //16Bit RGB565 Format
            LCD_WriteCommand(0x003A);       //Pixel RGB Format
    LCD_WriteData(0x0050);          //16Bit RGB Format

    LCD_WriteCommand(0x00BC);       //Set image post processor
            LCD_WriteData(0x001F);          //Set the contrast value
    LCD_WriteData(0x0080);          //Set the brightness value
    LCD_WriteData(0x0020);          //Set the saturation value
    LCD_WriteData(0x0001);          //Enable Post Processor

            LCD_WriteCommand(0x0029);       //Display on


LCD Parametreleri

unsigned int  HDP=479;  //Horizontal Display Period
unsigned int  HT=531;   //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


Renkleri ve Kontrast Ayarlarını elden geçirmem gerekecek. Bunlarla biraz oynadım daha beter ettim. Kırmızı pembe gibi çıkıyor.  :D

Aldığım Sonuçlar Böyle

(http://s24.postimg.cc/m0e246p9x/20131203_163627.jpg) (http://postimg.cc/image/b0suskyup/full/)
resim (http://postimg.cc/index.php?lang=turkish)

(http://s18.postimg.cc/l6hpccull/20131203_163713.jpg) (http://postimg.cc/image/q557qvyed/full/)
hızlı resim yükle (http://postimg.cc/index.php?lang=turkish)

Fakat Kütüphaneyi Değiştirmeyi düşünüyorum. Birçok fonksiyon şuanda çalışmıyor. Renkler doğru düzgün çıkmıyor. Biraz elden geçirmem gerekecek. Neyse İşin En önemli kısmını yaptık. Yazıda çıktığına göre gerisi cilalama. Ama biraz uğraşacağım. 

@Mehmet Hocam özellikle Size ve diğer yardımcı olan arkadaşlara teşekkür ederim
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 03 Aralık 2013, 17:11:54
@Mucit23 hocam ;
Renk işi RGB sıralamasından kaynaklanıyordur. Oda gene init kısmından ayarlanıyor.
Datasheette Page 38 olsa gerek ordan bakarak duzenleme yapabilirsin.
Benimde başıma gelmişti. ;) Doğru yoldasınız.

Kolay gelsin.


Yardımcı olabildiysem/sek ne mutlu bize.


Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 04 Aralık 2013, 00:57:45
Merhaba Arkadaşlar

Şuanda stm3240f_lcd.c dosyasında ssd1289 için hazırlanmış olan Text Basma Rutinlerini SSD1963 Kütüphaneme adapte etmeye çalışıyorum. Aslında Bu kütüphanenin tümünü SSD1963'de çalışacak şekilde ayarladığımı söylesem daha yerinde olur.

Normalde SSD1289 için GRAM X ve Y Counterleri Vardır. Bu Counterleri Bir kere ayarladığınız zaman RAM Her yazışınızda Bu counter değerleri artarak sonraki kordinata gelinmiş olur. Yanlışım yoksa böyle olması gerekiyordu.

Orjinal Kütüphanede Bu iş için  aşağıdaki fonksiyon var

void LCD_SetCursor(uint8_t Xpos, uint16_t Ypos)
{
  LCD_WriteReg(0x004E, Xpos);
  LCD_WriteReg(0x004F, Ypos);
}


0x4E ve 0x4F GRAM Counter Adresleri oluyor.

Bu işlemin Aynısının SSD1963de nasıl yapacağımı çözemedim. Ben karakterin basılacağı noktaya LCD_SetDisplayWindow fonksiyonu ile karakter boyutunda pencere açayıp dedim ama olmadı. İşlemci Fonksiyonda takılıp kalıyor şuanda. Peşi Sıra data göndermeyi Çözmem lazım. Yoksa başka bir yöntem bulmam gerekecek.

Şuanda text basma fonksiyonuyla uğraşıyorum. SSD1289 programında Text Basmak için şu 3 Fonksiyon kullanılıyor.
void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
{
  uint32_t index = 0, i = 0;
  uint8_t  Xaddress = 0;
  Xaddress = Xpos;
 
   
  //GPIO_ResetBits(GPIOD, GPIO_Pin_11);
  LCD_SetCursor(Xaddress, Ypos);
 
  for(index = 0; index < LCD_Currentfonts->Height; index++)
  {
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */

  //GPIO_SetBits(GPIOD, GPIO_Pin_11);
    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_WriteRAM(BackColor);
      }
      else
      {
        LCD_WriteRAM(TextColor);
      }
    }
    Xaddress++;
//if(index!=LCD_Currentfonts->Height-1&&i!=LCD_Currentfonts->Width-1)
    LCD_SetCursor(Xaddress, Ypos);
  }
}


void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
{
  Ascii -= 32;
  LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
}

void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
{
  uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;

  /* Send the string character by character on lCD */
  while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
  {
    /* Display one character on LCD */
    LCD_DisplayChar(Line, refcolumn, *ptr);
    /* Decrement the column position by 16 */
    refcolumn -= LCD_Currentfonts->Width;
    /* Point on the next character */
    ptr++;
  }
}

Bu kodları ssd1963 driverine bu şekilde geçirdim.

void LCD_DrawChar(uint8_t Xpos, uint16_t Ypos, const uint16_t *c)
{
  uint32_t index = 0, i = 0;
 
  LCD_SetDisplayWindow(Xpos, Ypos, Xpos+(LCD_Currentfonts->Width-1), Ypos+(LCD_Currentfonts->Height-1));
 
  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(BackColor);
      }
      else
      {
        LCD_WriteData(TextColor);
      }
    }
  }
}

void LCD_DisplayChar(uint8_t Line, uint16_t Column, uint8_t Ascii)
{
  Ascii -= 32;
  LCD_DrawChar(Line, Column, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
}

void LCD_DisplayStringLine(uint8_t Line, uint8_t *ptr)
{
  uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;

  /* Send the string character by character on lCD */
  while ((*ptr != 0) & (((refcolumn + 1) & 0xFFFF) >= LCD_Currentfonts->Width))
  {
    /* Display one character on LCD */
    LCD_DisplayChar(Line, refcolumn, *ptr);
    /* Decrement the column position by 16 */
    refcolumn -= LCD_Currentfonts->Width;
    /* Point on the next character */
    ptr++;
  }

}


Fark LCD_DrawChar Fonksiyonunda. Zaten özellikle burada sıkıntı çekiyorum.
Bu konuda ne yapabilirim. Fikri olan varmı?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: tekosis - 04 Aralık 2013, 01:18:16
maşallah güzel gidiyor çalışmalarınız kısmetse yakında ben de tft ile çalışmaya başlayacağım. bu arada hangi derleyiciyi kullanıyorsunuz acaba? anlayamadım da.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 04 Aralık 2013, 10:35:27
Text Fonksiyonları beni bayağı uğraştıracak anlaşılan.   :o

Edit: Text basma İşini Çözmek üzereyim.Bunun dışında bir sorun var. LCD çok hassas. Mesela Ekrana beyaz renkte bir harf basayım LCD donuyor ve yavaşça ekran beyazlamaya başlıyor. Birtek beyaz değil. Başka renklerdede böyle yapıyor. Bu acaba SSD1963 init ayarlarıylamı ilgilidir. Anlam veremedim? Normalde Yeşil Kırmızı veya mavi düzgün çıkıyor. Diğer renkler ise problemli
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 04 Aralık 2013, 14:01:19
Alıntı yapılan: Mucit23 - 04 Aralık 2013, 10:35:27
Text Fonksiyonları beni bayağı uğraştıracak anlaşılan.   :o

Edit: Text basma İşini Çözmek üzereyim.Bunun dışında bir sorun var. LCD çok hassas. Mesela Ekrana beyaz renkte bir harf basayım LCD donuyor ve yavaşça ekran beyazlamaya başlıyor. Birtek beyaz değil. Başka renklerdede böyle yapıyor. Bu acaba SSD1963 init ayarlarıylamı ilgilidir. Anlam veremedim? Normalde Yeşil Kırmızı veya mavi düzgün çıkıyor. Diğer renkler ise problemli
Hocam neden emwin kullanmıyorsunuz?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 04 Aralık 2013, 14:16:25
Alıntı yapılan: yamak - 04 Aralık 2013, 14:01:19
Hocam neden emwin kullanmıyorsunuz?

Hocam emwin Gui ile birlikte kullanılmıyormu? Yani Tek başına sadece bir kütüphane olarak kullanabilirmiyim(Rtos benzeri bir yapı olmadan) Daha önce hiç uğraşmadım.

Bu konuyu biraz araştırayım. Youtube de birkaç video izledim. Bayağı hoşuma gitti.  :)


SSD1963 ile ilgili şuanda Birtek renklerde sıkıntım kaldı. Nedense Ekrana beyaz renk yolladığım zaman TFT donuyor. Ekrandaki Bilgiler yavaştan kaybolup ekran beyazlamaya başlıyor. Bunu çözemiyorum. Neden Beyazın datasını gönderince ekran donsun? Sabahtan beri registerleri inceliyorum. İlgili birşey bulamadım Fikri olan varmı?

Bunun dışında Text basmada birkaç problem kaldı. Olarda basit gibi görünüyor
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 04 Aralık 2013, 15:32:32
Hocam RTOS olmadan da kullanılabiliyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mnemonic - 04 Aralık 2013, 15:49:19
Merhaba arkadaşlar;
emwini bende zamanında incelemiştim ancak oldukça pahalı
bildiğiniz ücretsiz yada uygun fiyatlı ssd1963 ve xpt2046yı kapsayan grafif gui/library varmı ?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 04 Aralık 2013, 16:12:06
ST ve NXP ücretsiz olarak sunuyor.İsterseniz aşağıdaki linkteki örnek uygulamayı inceleyebilirsiniz.
http://www.yusufyamak.com/stm32f429i-disco-emwin-uygulamasi/ (http://www.yusufyamak.com/stm32f429i-disco-emwin-uygulamasi/)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mnemonic - 04 Aralık 2013, 16:25:12
cevap için teşekkür ederim
bu uygulama ile sadece f417 içinmi library geliyor yoksa f407 içinde kullanabiliyormuyuz ?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 04 Aralık 2013, 16:47:25
İstediğiniz stm ile kullanabilirsiniz. Yeterki kulandığınız ekranın driver ı emwin'de mevcut olsun.Normalde emwin ini satın alınca piyasadaki neredeyse tüm lcd driver ları destekliyor fakat ST nin ve NXP nin destekledikleri biraz kısıtlı.Desteklenen driverları daha önce aşağıdaki linkte konuşmuştuk:
https://www.picproje.org/index.php/topic,49785.0.html (https://www.picproje.org/index.php/topic,49785.0.html)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 04 Aralık 2013, 16:59:30
Yeminle Kafa Göz dalacam şimdi bu lcd ye >:( Renkler yanlış çıkıyor arkadaş. Kahverengi veriyorum ekranda sarımsı birşeyler çıkıyor. Buna benzer birçok renk düzgün çıkmıyor. Sadece Kırmızı mavi ve yeşil düzgün çıkıyor.

HSYNC ve VSYNC ayarlarını yaptım. Bunlarda sıkıntı yok artık. Birtek Renk problemim kaldı. Bunuda çözemiyorum.

Datasheette Renklerle ilgili iki adet register var.

Bunlar Pixel Data interface(0xF0) ve Pixel Format(0x3A)

Pixel Data interface Registerine 0x03 değerini vermişim. Buda Datasheete göre 16Bit 565 değerine denk geliyor. Bunda sıkıntı olmaması lazım. Renkleride zaten buna gönderiyorum.

Pixel Format Registerine ise 0x50 değerinie verdim. Buda 16 Bit Pixel Format değerine denk geliyor. Bunun dışında renklerle oynayabileceğim bir yer yok. 

İşin ilginç olanı beyaz veya beyaza yakın bir renk datası göndersem SSD1963 donuyor? Buna hiç anlam veremiyorum.


Hata yaptığım bir yermi var takıldım kaldım burada


Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 04 Aralık 2013, 22:44:50
@Mucit23 hocam;
SSD1963 datasheet Rev0.20  86 Sayfalık  Dec 2008 dokumanda
sayfa 39 dan 46 ya olan kısmı iyi inceleyin derim.

Set Pixel Format 0x3A adresinde sadece rengin kac bitle iletileceği belirleniyor.
0xB0 ve 0xB1 adreslerini incelemek lazım RGB diziliş şekli mevcut.

Sayfa 40 daki RGB dizilişine göre rengi de bulabilirsin.




Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Aralık 2013, 13:27:53
Hocam Teker teker registerleri deniyorum şimdi. Renklerde problem kalmadı şuanda. Birtek Beyaz Çıkmıyor. Daha doğrusu beyaz renkte bir pixel basıldığı zaman SSD1963 donuyor?

Renk Kodlarım bunlar. Birkaç Makro kullanıyorum.

#define BLACK               RGB565CONVERT(0,    0,      0)
#define DARKBLUE            RGB565CONVERT(0,    0,      128)
#define DARKGREEN           RGB565CONVERT(0,    128,    0)
#define DARKCYAN            RGB565CONVERT(0,    128,    128)
#define DARKRED             RGB565CONVERT(128,  0,      0)
#define DARKMAGENTA         RGB565CONVERT(128,  0,      128)
#define DARKYELLOW          RGB565CONVERT(128,  128,    0)
#define BLUE                RGB565CONVERT(0,    0,      255)
#define GREEN               RGB565CONVERT(0,    255,    0)
#define CYAN                RGB565CONVERT(0,    255,    255)
#define RED                 RGB565CONVERT(255,  0,      0)
#define MAGENTA             RGB565CONVERT(255,  0,      255)
#define BROWN               RGB565CONVERT(102,  51,    0)
#define LIGHTGRAY           RGB565CONVERT(128,  128,    128)
#define DARKGRAY            RGB565CONVERT(64,   64,     64)
#define LIGHTBLUE           RGB565CONVERT(128,  128,    255)
#define LIGHTGREEN          RGB565CONVERT(128,  255,    128)
#define LIGHTCYAN           RGB565CONVERT(128,  255,    255)
#define LIGHTRED            RGB565CONVERT(255,  128,    128)
#define LIGHTMAGENTA        RGB565CONVERT(255,  128,    255)
#define YELLOW              RGB565CONVERT(255,  255,    0)
#define WHITE               RGB565CONVERT(255,  255,    255)                     
#define GRAY0              RGB565CONVERT(224,  224,    224)
#define GRAY1              RGB565CONVERT(192,  192,    192)   
#define GRAY2               RGB565CONVERT(160,  160,    160)   
#define GRAY3               RGB565CONVERT(128,  128,    128)
#define GRAY4               RGB565CONVERT(96,   96,     96)
#define GRAY5               RGB565CONVERT(64,   64,     64)
#define GRAY6               RGB565CONVERT(32,   32,     32)

#define RGB565CONVERT(red, green, blue) (u16) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))


Beyaz pixel Basıldığı zaman 16 bit renk datası olarak 65535 gidiyor TFT ye. Renk Sıralaması RGB ama burada Renk sıralamasıda farketmezki, Her türlü beyaz çıkması gerekiyor. Ben beyaz gönderdğim zaman donuyor.

Ne yapacağım bilmiyorum. Bunun neden kaynaklanabileceği hakkında fikri olan varmı?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: fgokcegoz - 05 Aralık 2013, 21:47:43
Alıntı yapılan: Mucit23 - 05 Aralık 2013, 13:27:53
Hocam Teker teker registerleri deniyorum şimdi. Renklerde problem kalmadı şuanda. Birtek Beyaz Çıkmıyor. Daha doğrusu beyaz renkte bir pixel basıldığı zaman SSD1963 donuyor?

SSD1289 da da aynı durum mevcut. Beyaz rengi göstermiyor... Bu SSD serisi lcd driver ları hiç beğenmedim doğrusu. Display taraması ILI serisine göre çok kötü. Belkide TFT LCD Modülün camı çok adîdir.. 
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Aralık 2013, 22:08:54
Alıntı yapılan: fgokcegoz - 05 Aralık 2013, 21:47:43
SSD1289 da da aynı durum mevcut. Beyaz rengi göstermiyor... Bu SSD serisi lcd driver ları hiç beğenmedim doğrusu. Display taraması ILI serisine göre çok kötü. Belkide TFT LCD Modülün camı çok adîdir.. 

Hiç mantıklı gelmiyor hocam. Beyaz renk basamayan TFT Sürücüsümü olurmuş. Ben hala bir yerlerde hata yaptığımı düşünüyorum. (ki bulamıyorum) Öyleki ileride resim felan basarsam. Tek bir beyaz pixel olsa işlemci donacak. Çözmek gerekiyor bunu

Elinde deneme imkanı olanlar deneyebilirmi? Mehmet Hocam 7" TFT board hala duruyormu beyaz rengi deneyebilirmisiniz?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 05 Aralık 2013, 22:21:52
Alıntı yapılan: Mucit23 - 05 Aralık 2013, 22:08:54
Hiç mantıklı gelmiyor hocam. Beyaz renk basamayan TFT Sürücüsümü olurmuş. Ben hala bir yerlerde hata yaptığımı düşünüyorum. (ki bulamıyorum) Öyleki ileride resim felan basarsam. Tek bir beyaz pixel olsa işlemci donacak. Çözmek gerekiyor bunu

Elinde deneme imkanı olanlar deneyebilirmi? Mehmet Hocam 7" TFT board hala duruyormu beyaz rengi deneyebilirmisiniz?
Mucit23 hocam;
Yarın inşallah denerim. Şu an yanımda değil. Belki bu sayede tekrar üzerinde calışmaya başlarım. Ara verdim ya bir sogukluk geldi ;)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Aralık 2013, 22:35:35
Hocam Text Basmada sorun kalmadı. Şuanda tek problem beyaz ve beyaza yakın renklerin TFT yi dondurması. Mesela Sarı bile göndersem bazen donduğu oluyor. Buna anlam veremiyorum. İlgili birçok register ile oynadım. Beyaz renk sorununa çözüm bulamadım.

LCD nin kalitesiz olduğu doğru ama beyaz renk çıkmaması lcd ile ilgili olmayacağını düşünüyorum.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: fgokcegoz - 05 Aralık 2013, 22:48:44
Alıntı yapılan: Mucit23 - 05 Aralık 2013, 22:08:54
Hiç mantıklı gelmiyor hocam. Beyaz renk basamayan TFT Sürücüsümü olurmuş. Ben hala bir yerlerde hata yaptığımı düşünüyorum. (ki bulamıyorum) Öyleki ileride resim felan basarsam. Tek bir beyaz pixel olsa işlemci donacak. Çözmek gerekiyor bunu

Elinde deneme imkanı olanlar deneyebilirmi? Mehmet Hocam 7" TFT board hala duruyormu beyaz rengi deneyebilirmisiniz?

Beyaz renk basamayan TFT sürücüsü olamaz bencede hocam. Haklısınız. Bir yerde problem olduğu kesin. Büyük ihtimalle piksellere giden analog voltaj değerlerinin konfigürasyonunda problem var. Bir pikselin beyaz renk görünebilmesi için oraya en yüksek voltaj değeri gitmesi gerekiyor galiba. Zaten White = 0xFFFF, Black = 0x0000... Siyahsa voltaj minimum, beyazsa maksimum... Bizim ayarlarda da problem olduğu için taşma gibi birşey oluyor herhalde... Aklıma böyle birşey geliyor ama ne kadar doğrudur bilmiyorum açıkçası :) O yüzden beyaz yerine gri kullanıyorum. Zaten neredeyse beyaz gibi görünüyor...
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Aralık 2013, 23:01:51
Aslında banada mantıklı gelmeye başladı. Beyaz pixel demek tüm RGB değerlerinin en yüksek şiddetle yanması demek. Belkide Ekranın tümü beyaz olunca LCD nin enerji tüketimi artıp Besleme voltajında düşüşe neden olup bir şekilde ssd1963'ün çalışmasına engel oluyordur. Gerçi TFT de beyaz pixel enerji tüketimini arttırırmı emin değilim.(Led Olsa neyse) Besleme Voltajı zaten düşük. Tüm kitte 2,85 volt civarı bir gelirim vardı. Bununda  LCD aydınlatmasıyla ilgili olabileceğini düşünüyorum. Fazla akım çekiyor olabilir.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 06 Aralık 2013, 09:31:58
Mucit23 hocam;

Ekranın basmıs olduğu beyaz.
İlgili kodlar
SSD1963_LCD_Clear(WHITE);

Fonksiyonu:
void SSD1963_LCD_Clear(uint16_t color)
{                   
     unsigned int l=800,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<480;w++)
{   
          LCD_WriteData(color);
}
}
}


Renk Tablosu:

#define BLUE  0XF800
#define GREEN 0X07E0
#define RED   0X001F 
#define BRED  0XF81F
#define GRED  0XFFE0
#define GBLUE 0X07FF
#define WHITE 0XFFFF


#define BLACK 0X0000
#define BROWN 0XBC40
#define BRRED 0XFC07
#define GRAY  0X8430
#define LGRAY 0XC618

#define FSIZE 16

#define LCD_W 800
#define LCD_H 480



(http://u1312.hizliresim.com/1j/6/v71z1.jpg) (http://bit.ly/c25MCx)

(http://u1312.hizliresim.com/1j/6/v71z8.jpg) (http://bit.ly/c25MCx)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Aralık 2013, 10:40:28
Mehmet Hocam Test için Teşekkür ederim. Ben birkaç test daha yapacağım.   

Umarım problemi çözebilirim.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Aralık 2013, 13:54:50
Şöyle birşey denedim. LCD Ekran Aydınlatması önceden direk bağlıydı ben şimdi SSD1963'ün PWM çıkışına bağladım. Beyaz Renk gönderdiğim zaman PWM duruyor yani ekran kararıyor. Demekki SSD1963 donuyor. Ama neden donduğunu hala çözemedim
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 06 Aralık 2013, 16:07:00
Mucit23 hocam;
Neden Beyaz gonderince donsun ki ?
Beyaz gonderdiğinizde SSD1963 besleme voltajını kontrol edin.
Varsa elinizde 3v3  dısardan besleyip deneyin.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Aralık 2013, 20:22:00
Hocam siz 7" TFT yi Yine USB den ve discovery üzerinden besliyorsunuz değilmi? Benim USB voltajımda düşük. 4,5V civarında. 3.3V Beslemesi de 2.8V civarında. Bayağı düşük.

Tek bir pixel basmayı denedim. Tek bir beyaz pixelde herzaman donmuyor. Ard arda beyaz data gönderilince donuyor.

Ben yine Harici beslemeyi deneyeyim
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Aralık 2013, 21:32:50
Hocam Değişik birşey keşfettim. Şimdi Pixel Fonksiyonu ile Ekrana noktacıklar koyuyorum. Normalde Nokta koyma fonksiyonu ekrandaki verilen kordinata ait pixelin rengini değiştirir. Bende böyle olmuyor. Verilen Renk Datasına göre verilen kordinattaki pixeli ve bu pixelin hemen sağındaki pixelin rengini değiştiriyor. Ama Her renkte olmuyor. Testlerim sırasında 0xFF7F den daha büyük bir renk datası olursa eğer bu dediğim işlemin gerçekleştiği kanısına vardım. Yani iki pixel birden renk değiştiriyor. Pixel RGB data uzunluğu 16 bit. Tekrar bi göz atayım ama neden böyle olsunki? Sorun Bence bundan kaynaklanıyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: z - 06 Aralık 2013, 21:46:19
Peki 0xFF7F den buyuk degil de mesela

0x0080, 0x01E0 0x02A0, 0x00FF gibi renk datalarinda da iki pixel birden renk degistiriyormu? (Merak ettim)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Aralık 2013, 22:30:43
Z hocam 0x01E0 da da oluyor. Diğer pixel biraz farklı sanki böyle titrer gibi yanıyor.  Demekki 0xFF7F ile alakası yok.

Ama şimdi Pixel format değerini 24 bite çıkardım. 0xFFFE değerine kadar bul etti. Yani donmadan pixelleri çiftlemeden ekrana bastı. Hatta Ekranın Tümünü 0xFFFE ile boyayabildim. Büyük bir gelişme ama Yine 0XFFFF de donuyor.

Aslında 0xFFFE ile 0xFFFF arasında bir fark yok ikiside beyaz. Beyaz rengi 0xFFFE olarak tanımlayabilirim ama Resim bassam sıkıntı çıkacak. 

Biraz mantık yürütelim. 0xFFFF 16 bit sınırı içerisinde. Ekranda iki adet pixelin rengi boyanması için kordinat verildikten sonra iki adet 16 bitlik data göndermek gerekiyor. Bunun dışında ne gibi olaylar olsunki ikinci pixelin rengi değişsin? Yine iş SSD1963 de bitiyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: z - 07 Aralık 2013, 00:46:46
Peki 24 oncesinde renkler icin kac byte kullaniliyordu? 16 Byte mi?

FF7F den buyuk degerler kafamda su isigi yakti.

MSB LSB yi yer degistirirsek 7FFF eder. Bu 16 bit sayilar icindeki en buyuk degerdir. Bunu 1 artirirsak negatif sayilari elde ederiz.

Programda negatif degerler soruna neden oluyordur.

Bu yuzden  0x0080, 0x01E0 0x02A0, 0x00FF gibi negatif degerleri denemeni istedim.

signed int, unsigned int vs gibi onemli bir ayrinti atlaniyor olabilir.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: z - 07 Aralık 2013, 03:00:10
Alıntı yapılan: Mucit23 - 05 Aralık 2013, 13:27:53
Hocam Teker teker registerleri deniyorum şimdi. Renklerde problem kalmadı şuanda. Birtek Beyaz Çıkmıyor. Daha doğrusu beyaz renkte bir pixel basıldığı zaman SSD1963 donuyor?

Renk Kodlarım bunlar. Birkaç Makro kullanıyorum.

#define BLACK               RGB565CONVERT(0,    0,      0)
#define DARKBLUE            RGB565CONVERT(0,    0,      128)
#define DARKGREEN           RGB565CONVERT(0,    128,    0)
#define DARKCYAN            RGB565CONVERT(0,    128,    128)
#define DARKRED             RGB565CONVERT(128,  0,      0)
#define DARKMAGENTA         RGB565CONVERT(128,  0,      128)
#define DARKYELLOW          RGB565CONVERT(128,  128,    0)
#define BLUE                RGB565CONVERT(0,    0,      255)
#define GREEN               RGB565CONVERT(0,    255,    0)
#define CYAN                RGB565CONVERT(0,    255,    255)
#define RED                 RGB565CONVERT(255,  0,      0)
#define MAGENTA             RGB565CONVERT(255,  0,      255)
#define BROWN               RGB565CONVERT(102,  51,    0)
#define LIGHTGRAY           RGB565CONVERT(128,  128,    128)
#define DARKGRAY            RGB565CONVERT(64,   64,     64)
#define LIGHTBLUE           RGB565CONVERT(128,  128,    255)
#define LIGHTGREEN          RGB565CONVERT(128,  255,    128)
#define LIGHTCYAN           RGB565CONVERT(128,  255,    255)
#define LIGHTRED            RGB565CONVERT(255,  128,    128)
#define LIGHTMAGENTA        RGB565CONVERT(255,  128,    255)
#define YELLOW              RGB565CONVERT(255,  255,    0)
#define WHITE               RGB565CONVERT(255,  255,    255)                     
#define GRAY0              RGB565CONVERT(224,  224,    224)
#define GRAY1              RGB565CONVERT(192,  192,    192)   
#define GRAY2               RGB565CONVERT(160,  160,    160)   
#define GRAY3               RGB565CONVERT(128,  128,    128)
#define GRAY4               RGB565CONVERT(96,   96,     96)
#define GRAY5               RGB565CONVERT(64,   64,     64)
#define GRAY6               RGB565CONVERT(32,   32,     32)

#define RGB565CONVERT(red, green, blue) (u16) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))


Beyaz pixel Basıldığı zaman 16 bit renk datası olarak 65535 gidiyor TFT ye. Renk Sıralaması RGB ama burada Renk sıralamasıda farketmezki, Her türlü beyaz çıkması gerekiyor. Ben beyaz gönderdğim zaman donuyor.

Ne yapacağım bilmiyorum. Bunun neden kaynaklanabileceği hakkında fikri olan varmı?

16 bit modunda iken 

#define RGB565CONVERT(red, green, blue) (u16) (((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))

kullanarak asagidaki degerlerin sonucu ne cikiyor?

#define WHITE               RGB565CONVERT(255,  255,    255)                     
#define GRAY3               RGB565CONVERT(128,  128,    128)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 07 Aralık 2013, 09:22:22
Hocam LSB veya MSB işi olmaması gerekir. Çünkü Renk datalarını tutan değişkenler unsigned int16 şeklinde tanımlı
static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
Yani negatif değerler almaması gerekiyor.

RGB565CONVERT Makrosunun çıkışını ekrana bastım.

RGB565CONVERT(255,  255,    255)     =   0xFFFF
RGB565CONVERT(128,  128,    128)     =   0x8410

çıktılar yukarıdaki gibi oldu. 
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 07 Aralık 2013, 18:47:57
@Z hocam başka yorumunuz varmı?

Hala neden 0XFFFF'i kabul etmediğini çözemedim. Başka ne yapabilirim bu konuda
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: M_B - 08 Aralık 2013, 14:38:47
@Mucit23 hocam;
SSD1963_LCD_Clear(WHITE); Fonksiyonu kullanarak denediniz mi

SSD1963_LCD_Clear(0xFFFF); olarak
Bahsettiğim biraz mantıksız gibi ama denemek lazım.
Veya debug ederek adım adım calıstırarak test etmek lazım
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 08 Aralık 2013, 16:32:41
Mehmet Hocam o fonksiyonu kullanmıyorum. En temelden şekilde direk data göndererek yapıyorum. Yani ilk önce kordinatı belirleyip, sonra direk renk datası göndererek pixel basımı yapıyorum. Problem ararken datasheeti ezberlediğimi söyleyebilirim.

Şuanda bilgisayarım ölü durumda hocam. Son 1 haftaki çalışmalarım masaüstündeydi onları kurtarınca çalışmalara devam edecem.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 09 Aralık 2013, 00:34:35
Önceden derlenen program şimdi bir hata veriyor

.\Output\Discovery.axf: error: L6007U: Could not recognize the format of file .\output\startup_stm32f40xx.o.

Acaba geri dönüşüm dosya yapısınımı bozmuş.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 09 Aralık 2013, 12:50:26
Sorunu buldum. Birkaç dosyaya geri dönüşüm esnasında null karakter atanmış. Onları temizleyince düzeldi.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: matador - 09 Aralık 2013, 18:11:37
Hocam son halini paylaşmanız mümkün mü?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 09 Aralık 2013, 20:16:03
Kütüphaneye diğer fonksiyonları (Circle, Line, Rectangle, Resim basma vs...) ekleyeyim sonra paylaşıcam. Yanlız Beyaz sorunu çözemedim. Halla 0xFFFF kabul etmiyor. Farklı fikir görüş ve önerileri olanlar yazarsa sevinirim.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: matador - 12 Aralık 2013, 11:46:33
Ben lcd'de resim basarken renkler bozuk çıkıyor. Örneğin LCD_Clear(BLUE); komutunu gönderdiğimde ekranın rengi yeşil oluyor. Mavi ile yeşil ters. Renk sıralamasını datasheete bakıp değiştirdim datasheetteki tüm ihtimalleri tek tek denedim hiç bir şey değişmedi. Sürücü kodlarında ki;

unsigned int  HDP=799; //Horizontal Display Period
unsigned int  HT=1000; //Horizontal Total
unsigned int  HPS=51;  //LLINE Pulse Start Position
unsigned int  LPS=3;   // Horizontal Display Period Start Position
unsigned char HPW=8;   // LLINE Pulse Width


unsigned int  VDP=479; //Vertical Display Period
unsigned int  VT=530; //Vertical Total
unsigned int  VPS=24; // LFRAME Pulse Start Position
unsigned int  FPS=23; //Vertical Display Period Start Positio
unsigned char VPW=3; // LFRAME Pulse Width


bu kısım ekranın boyutuna göre mi ayarlanıyor. Bu değerler tam olarak neyi ifade ediyor. Sürücü dosyasında renk sıralamasını değiştirmeme rağmen neden tepki alamadığımı da anlamış değilim.

Ayrıca resim basarken bazen ekran donup kalıyor yavaş yavaş beyaza dönüyor. Bu sadece resim basarken de değil dokunmatik kullanırken de olabiliyor. Bu donmanın nedeni ne olabilir.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 12 Aralık 2013, 12:04:56
Alıntı yapılan: matador - 12 Aralık 2013, 11:46:33
Ben lcd'de resim basarken renkler bozuk çıkıyor. Örneğin LCD_Clear(BLUE); komutunu gönderdiğimde ekranın rengi yeşil oluyor. Mavi ile yeşil ters. Renk sıralamasını datasheete bakıp değiştirdim datasheetteki tüm ihtimalleri tek tek denedim hiç bir şey değişmedi. Sürücü kodlarında ki;

unsigned int  HDP=799; //Horizontal Display Period
unsigned int  HT=1000; //Horizontal Total
unsigned int  HPS=51;  //LLINE Pulse Start Position
unsigned int  LPS=3;   // Horizontal Display Period Start Position
unsigned char HPW=8;   // LLINE Pulse Width


unsigned int  VDP=479; //Vertical Display Period
unsigned int  VT=530; //Vertical Total
unsigned int  VPS=24; // LFRAME Pulse Start Position
unsigned int  FPS=23; //Vertical Display Period Start Positio
unsigned char VPW=3; // LFRAME Pulse Width


bu kısım ekranın boyutuna göre mi ayarlanıyor. Bu değerler tam olarak neyi ifade ediyor. Sürücü dosyasında renk sıralamasını değiştirmeme rağmen neden tepki alamadığımı da anlamış değilim.

Ayrıca resim basarken bazen ekran donup kalıyor yavaş yavaş beyaza dönüyor. Bu sadece resim basarken de değil dokunmatik kullanırken de olabiliyor. Bu donmanın nedeni ne olabilir.

Benzer sorunları yaşadım.

            LCD_WriteCommand(0x0001); // software reset
            LCD_WriteCommand(0x0001); // software reset
          LCD_WriteCommand(0x0001); // software reset

LCD_WriteCommand(0x00E2);  //SET PLL freq=120MHz ;
LCD_WriteData(0x0021);     //23 N=0x36 for 6.5M, 0x23 for 10M crystal
            LCD_WriteData(0x0002);     //02
            LCD_WriteData(0x0004);     //04
           
            LCD_WriteCommand(0x00E0); // Start PLL
            LCD_WriteData(0x0001);
_delay_(10);
            LCD_WriteCommand(0x00E0); // Lock PLL
            LCD_WriteData(0x0003);
_delay_(10);
LCD_WriteCommand(0x0001); // software reset

LCD_WriteCommand(0xE6);    ///PLL setting for PCLK, depends on resolution
            LCD_WriteData(0x0002);     //0x0002
            LCD_WriteData(0x00EA);     //0x00ea
            LCD_WriteData(0x00EC);     //0x00ec

            LCD_WriteCommand(0x00B0);  // Set Lcd_Mode
            LCD_WriteData(0x003F);     //0x003F
            LCD_WriteData(0x0080);     //0x0080
            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);
            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(0x00B8);      //Set GPIO Configuration
          LCD_WriteData(0x0007);         //GPIO3=input, GPIO[2:0]=output
          LCD_WriteData(0x0001);         //GPIO0 normal

          LCD_WriteCommand(0x00BA);      //Set Gpio Value
          LCD_WriteData(0x0005);

            LCD_WriteCommand(0x00F0);       //Pixel data interface
            LCD_WriteData(0x0003);          //16Bit RGB565 Format
//            LCD_WriteCommand(0x003A);       //Pixel RGB Format
// LCD_WriteData(0x0070);          //16Bit RGB Format

          LCD_WriteCommand(0x00BE);       //Set PWM for B/L
            LCD_WriteData(0x0006);          //PWM Frequency
            LCD_WriteData(0x00FF);          //PWM Duty Cyle
  LCD_WriteData(0x0001);
          LCD_WriteData(0x00F0);
            LCD_WriteData(0x0000);
          LCD_WriteData(0x0000);

          LCD_WriteCommand(0x00D0);
          LCD_WriteData(0x000C);

            LCD_WriteCommand(0x0029);       //Display on


Şuan Bende birtek beyaz pixel basmada problem kaldı. Diğer renklerde sıkıntı yok sanırım. Birde bazen durduk yere donuyor. Oda sanırım PCLK ayarlarıyla ilgili. Ben Bu ayarlarla çok oynadım. Ekranda titreme oluyordu onları giderdim.

Şöyle bir çıkarım yaptım. Her LCD nin türüne göre birçok ayarın değişmesi gerekiyor. Yani Sadece LCD parametreleriyle oynamak çözüm değil.
Yinede yukarıdaki kodları bir deneyin.
Renk sorunu için RGB ayarlarını yaptıysanız 0XB0 nolu adrese bakıp ayarları gözden geçirin.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: matador - 12 Aralık 2013, 12:24:04
Hocam bu kodları denedim ekran tam istediğim gibi çalışıyor. Allah razı olsun :)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 12 Aralık 2013, 12:28:42
Sağol Teşekkürler.

Ekrana LCD_Clear ile 0XFFFF gönderebilirmisin Ekran tamamen beyaza boyanacakmı?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: matador - 12 Aralık 2013, 12:33:35
Beyazda ki sıkıntı devam ediyor

Hocam M_B'nin paylaştığı projede ki resmi basmayı dener misin bir ben denedim sıkıntı çıkmadı resmin hex kodlarında tonla 0xFF var herhangi bir sorun çıkmıyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 12 Aralık 2013, 14:23:01
Hocam resim basmayla ilgisi yok. Eğer SSD1963 data olarak 0xFFFF kabul etse resim basma fonksiyonunu iki dakikada bende yazarım. Ama yok öyle birşey. Ben anlamıyorum. M_B hocanın verdiği kodlar bende hiç çalışmıyor. Akşam yine LCD parametreleri hariç diğer tüm ayarları M_B hocanınkiyle değiştireceğim. Bakalım ne olacak?

işin kötüsü kamerada sıkıntı yaşayacağım. Beyaz pixel geldiyse ekran donar
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: matador - 12 Aralık 2013, 14:35:04
M_B hocanın paylaştıkları çalışmıştı bende sadece renk ayarı vardı. Sormak istediğim bir şey var M_B'nin paylaştığı projede ki 01.c resmini basarken sorun yok ama ben herhangi bir resmi image2lcd ile hexe çeviriyorum bunu lcd'ye basarken lcd donup kalıyor.

M_B hocanın paylaştığı projede ki 01.c resmini dener misiniz?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 30 Aralık 2013, 00:30:39
Tekrar Çalışmalara başladım.

Beyaz pixel problemi devam ediyor. Kitin üzerindeki reset butonuna biraz basılı tutup çekince bazen donmadan beyaz pixeli ekrana bastığı olabiliyor. Çok nadir gerçekleşiyor.

Bu konuda yorumu olan varmı?

Bu sorunu çözmem gerek! Bir Bitlik sorun yüzünden bütün ilerlemem durdu! 
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Ocak 2014, 18:19:08
Bir sorum olacak.

Benim discovery kitin üzerindeki 3.3V besleme hattında voltaj çok düşüyor. Genelde 2,85 volt civarında bir gelirim var. Normalde USB beslemeside 4.5 volt civarında ama ben kart üzerinde 5V hattına direk 5v veriyorum karta lcd felan bağlamama rağmen yine 3.3V çıkışı düşüyor. Bunun sebebi nedendir. 
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 02 Ocak 2014, 21:32:22
Arkadaşlar neden böyle olduğunu çözemedim bir türlü. Acaba kit üzerindeki 3.3 regülatörü mü bozuk? LCD bağlı değilken sistem 40ma civarı bir akım çekiyor. LCD varken 150ma çekiliyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Ocak 2014, 22:39:26
Artık bu 4.3" TFT ile uğraşmayı bırakıyorum. Şuan TFT stabil çalışıyor ama hala 0xFFFF renk datası gönderdiğim zaman SSD1963 susuyor. Açıkçası pes ettirdi beni :o

3.2" TFT ile devam edeceğim. Bu LCD'nin sürücüsü SSD1289 umarım abisi gibi aynı problemleri yaşatmaz.

Şimdi Stm32F407 ile bağlantılarını yapıyordum bir yerde takıldım.

LCD'nin Pin bağlantıları şöyle.
(http://s11.postimg.cc/58jgioijn/3_2pinout.jpg) (http://postimg.cc/)
jpg upload (http://postimg.cc/index.php?lang=turkish)

Daha önceki 4.3" TFT'de LCD ekran ledini SSD1963'ün PWM çıkışına bağlamıştım. Oradan parlaklığını ayarlıyordum.

Sanırım SSD1289 da böyle bir seçenek yok. Zaten sadece LED_A şeklinde pin çıkarmışlar. Parlaklık için buradan harici pwm uygulamak gerekiyor değilmi? Eğer direk yakmak istersem +3.3V'a direk bağlamam yeterli sanırım.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: kantirici - 06 Ocak 2014, 00:04:24
Bendeki 3.2" ssd1289 LCD'de LED için ayrıca pin yok, besleme verilince ekran ışığı yanıyor. Yani sen ister direnç üzerinden 3.3V bağla ister PWM ile sür, her ikisininde olacağını düşünüyorum.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Ocak 2014, 23:08:23
Arkadaşlar Merhaba

Elimde OV9655 Kamera bordu var. Bunu STM32F407 nin DCMI modülüne bağlamaya çalışıyorum.
Kameranın 2x10 header bağlantıları aşağıdaki gibi.
(http://s30.postimg.cc/7wphi4igt/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/7wphi4igt/)
Dikkat ederseniz Data bacakları 2. bitten itibaren başlıyor. Bildiğim kadarıyla kamera max 10 bit haberleşiyor. Acaba buradaki bağlantıya göre 10 bit formatında datalar sola dayalı olarakmı geliyor? Yani Y2 pini D0, Y9 pini D7 olarak almam gerekiyor değilmi?


Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 30 Ocak 2014, 00:26:35
Merhaba,

Daha öncede sormuştum fakat net bir cevap alamadım.

Keilde Ana programa eklediğim kütüphanelerdeki tanımlı olan bir değişkeni main programında da kullanmak istiyorum.

Örneğin DMA ile ADC okuması yapıyorum. ADC değerini DMA ile ADC kütüphanesindeki bir değişkene aktarıyorum. Şuan ADC değerini main programına almak için bir fonksiyon yazıp değişken değerini fonksiyondan geri yolluyorum.

Bu dediğim işlemi nasıl yaparım.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 30 Ocak 2014, 00:36:07
extern Degisken ile.

Mesela ADC dosyasındaki değişken

uint16_t ADC olsun.

main.c içerisinde

extern uint16_t ADC; demeniz yeterli.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 30 Ocak 2014, 00:55:53
Evet, istediğim buydu, Teşekkürler..
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Şubat 2014, 22:34:38
Stm32f4X de delay fonksiyonu ile us bazında gecikme yaptıran oldumu? Stm32F10x için systick.c ve systick.h kütüphanelerim vardı onda kolay oluyordu. Stm32f4'de ise systick örneğindeki yapıyı kullanıyordum fakat farkettimki düzgün çalışmıyor. Yani 1ms yerine 3.120 ms gecikme yapıyordu. Bende SysTick_Config fonksiyonuna gönderdiğim parametreyi 1000 yerine 3119 yaparak çözdüm.

Bundan daha düşük gecikmeleri SysTick ile nasıl yaparım?

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 03 Şubat 2014, 22:49:15
SystemTick her clock darbesiyle 24bitten geri sayar. LOAD resisterındaki değere gelince kesme üretir.

delay.h

#ifndef DELAY_H_
#define DELAY_H_

#include <stm32f10x.h>

extern volatile uint32_t tick;

extern void delay_ms(uint32_t value);
extern void delay_us(uint32_t value);
extern uint32_t yuzmicrosec(void);
extern void SystemTick_init(uint32_t freq);
extern void SysTick_Handler(void);


#endif // DELAY_H_


delay.c

#include <stm32f10x.h>
#include <delay.h>

volatile uint32_t tick=0;

void delay_yuz_us(uint32_t delay_value)
{
   uint32_t currentTicks;
     currentTicks = tick;
     while ((tick - currentTicks) < delay_value);
   
}


void delay_ms(uint32_t delay_value)
{
     uint32_t currentTicks;
     currentTicks = tick;
     while ((tick - currentTicks) < 10 * delay_value);
}

uint32_t yuzmicrosec(void)
{
   uint32_t sonzaman;

   sonzaman=tick;
   return sonzaman;   
}

void SystemTick_init(uint32_t freq)
{
if( freq > 0x00FFFFFF ){
freq = 0x00FFFFFF;
}

   SysTick -> LOAD = freq;
   SysTick -> VAL  = 0;
   SysTick -> CTRL &=~(1 << 16);
   SysTick -> CTRL |= 7; 
}

void SysTick_Handler(void)
{
   SysTick -> CTRL &=~(1 << 16);
   tick++;
}



SystemTick_init(SystemCoreClock/10000) yaptığınızda 100us'de kesme üretir.

Osiloskopta baktığımda 100us'ye çok yakın değerlerde gecikme alabiliyordum yarın tekrar kontrol edeyim.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Şubat 2014, 23:19:13
Teşekkür ederim deneyelim.

Bir sorum daha olacak. Keil'de bazı lib dosyalarının üzerinde anahtar işareti var. Yani o dosya kilitlenmiş, Hiçbir şekilde dosyayı editleyemiyorum. Bu dosya üzerindeki korumayı nasıl kaldırırım.

ST'nin DSP librarysindeki math fonksiyonlarını kullanmak istiyorum fakat ATMCM4.h bulunamadı diye hata veriyor.

.\Libraries\CMSIS\Include\arm_math.h(280): error:  #5: cannot open source input file "ARMCM4.h": No such file or directory

ARMCM4.h yerine "stm32f4xx.h" dosyasını çağırmam gerekiyor bildiğim kadarıyla.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 04 Şubat 2014, 00:37:58
O konuda bilgim yok ama bende merak ediyorum.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: camby - 04 Şubat 2014, 09:15:50
Dosyayı 'salt okunur' yaptığınızda üzerinde değişiklik yapılamıyor , bu da Keil'da kilit olarak gözüküyor. STM library'leri bu şekilde.

mesaj birleştirme:: 04 Şubat 2014, 09:23:17

Alıntı yapılan: Mucit23 - 03 Şubat 2014, 22:34:38
Stm32f4X de delay fonksiyonu ile us bazında gecikme yaptıran oldumu? Stm32F10x için systick.c ve systick.h kütüphanelerim vardı onda kolay oluyordu. Stm32f4'de ise systick örneğindeki yapıyı kullanıyordum fakat farkettimki düzgün çalışmıyor. Yani 1ms yerine 3.120 ms gecikme yapıyordu. Bende SysTick_Config fonksiyonuna gönderdiğim parametreyi 1000 yerine 3119 yaparak çözdüm.

Bundan daha düşük gecikmeleri SysTick ile nasıl yaparım?

Hocam bu şekilde olmaması lazım , ya kullandığın fonsiyonda sıkıntı var , yada system clock sıkıntılı.

Ben hem F4 hem de F1 için aşağıdakileri kullanıyorum.

//====== SysTick Handler ======================================================
void SysTick_Handler(void)
{
  TimingDelay_Decrement();
}//============================================================================



//====== Systick Init =========================================================
void Systick_Init(void)
{
SysTick_Config(SystemCoreClock/1000000); // 1us step for Delay Function
STK_CTRL &=~ 0x00000001;    // 1: Counter disabled

}//============================================================================


#include "delay.h"

static __IO uint32_t TimingDelay;

//====== Delay ================================================================ 
void Delay(__IO uint32_t nTime)
{
STK_CTRL |= 0x00000001;    // 1: Tick Counter enabled

TimingDelay = nTime;

while(TimingDelay != 0);

STK_CTRL &=~ 0x00000001;    // 1: Tick Counter disabled
}//============================================================================

//====== Timing Delay =========================================================
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}//============================================================================


/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __delay_H
#define __delay_H

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

#define STK_CTRL (*((volatile unsigned int*) 0xE000E010))

/* Exported functions ------------------------------------------------------- */
void TimingDelay_Decrement(void);
void Delay(__IO uint32_t nTime);

#endif /* __MAIN_H */


Kullanım :

GPIO_WriteBit(GPIOB,GPIO_Pin_7,Bit_SET); // Signal LED
Delay(1000000);
GPIO_WriteBit(GPIOB,GPIO_Pin_7,Bit_RESET); // Signal LED
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yılmaz - 04 Şubat 2014, 15:20:40
Merhaba

Stm32f4 için PIC C Compiler da yazdığım standart c fonksiyonlarını kullanabilir miyim? Keil IDE kullanıyorum.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 11 Şubat 2014, 22:51:36
Keilin şu L6200E hataları çok canımı sıkıyor.. Yazım hatası felan olsa hataya çift tıklayınca hatanın yapıldığı satıra gidiyor. Gösteriyor orayı. Fakat bu tür hatalarda göstermiyor.

Multiply defined hatası var fakat nerede olduğunu bulamıyorum. Siz bu tür problemleri nasıl aşıyorsunuz?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 11 Şubat 2014, 23:52:59
"Find in files" ile kelimeyi projenin neresinde olduğunu bi araştırın isterseniz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: camby - 11 Şubat 2014, 23:58:30
Ic ice header , define tanimlamalarini dikkatli yapmak lazim , yoksa dediginiz gibi cildirtiyor.
Define tanimlamalari .h icine alin , header dosyasinda header guard olsun.

Benim kendi yazdigim kutuphanelerde kendilerine ait .h dosyalari var , onun icinde kendi tanimlamalari ve main.h cagrisu var.

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 12 Şubat 2014, 00:05:19
keil saçlarımı ağarttı.
Kendi yazdığım kütüphanelerde zaten problem olmuyor ama başka bir kütüphaneyi programa ekleyince uğraş babam uğraş.... Uğraşki hatayı bulasın..

mistek dediğin gibi yaptım, Bütün dosyaların içerisinde teker teker arama yapıp buldum.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 12 Şubat 2014, 00:09:52
Alıntı yapılan: camby - 11 Şubat 2014, 23:58:30
Define tanimlamalari .h icine alin , header dosyasinda header guard olsun.

Hocam header guard dediğiniz bu mu?

#ifndef __PWM_SETUP_H
#define __PWM_SETUP_H
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: marecrisium - 12 Şubat 2014, 00:46:05
Alıntı yapılan: Mucit23 - 03 Şubat 2014, 23:19:13
Teşekkür ederim deneyelim.

Bir sorum daha olacak. Keil'de bazı lib dosyalarının üzerinde anahtar işareti var. Yani o dosya kilitlenmiş, Hiçbir şekilde dosyayı editleyemiyorum. Bu dosya üzerindeki korumayı nasıl kaldırırım.

ST'nin DSP librarysindeki math fonksiyonlarını kullanmak istiyorum fakat ATMCM4.h bulunamadı diye hata veriyor.

.\Libraries\CMSIS\Include\arm_math.h(280): error:  #5: cannot open source input file "ARMCM4.h": No such file or directory

ARMCM4.h yerine "stm32f4xx.h" dosyasını çağırmam gerekiyor bildiğim kadarıyla.

Kilitli olmasının sebebi dosyanın salt okunur olarak işaretlenmesi olabilir. Kilitli dosyayı bulup özelliklerden salt okunur kutucuğundaki işareti kaldırırsanız dosya üzerinde değişiklik yapabilirsiniz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: camby - 12 Şubat 2014, 00:55:05
Alıntı yapılan: mistek - 12 Şubat 2014, 00:09:52
Hocam header guard dediğiniz bu mu?

#ifndef __PWM_SETUP_H
#define __PWM_SETUP_H

Evet , tekrar tekrar cagirilmasinin onune geciyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Mart 2014, 22:48:32
Arkadaşlar merhaba, Malum bu aralar kamera ile uğraşıyorum. Kamerayı uyandırabilmek için STM32F4'den 10Mhz Clock uygulamam gerekiyor. Bu iş için Timer ve PWM kullandım fakat istediğim frekansı ayarlayamadım.

Ayarlarım bu şekilde,
GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;

  uint16_t PrescalerValue=0;

  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOC and GPIOB clock enable */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB, ENABLE);
 
  /* GPIOC Configuration: TIM3 CH1 (PC6) and TIM3 CH2 (PC7) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /* Connect TIM3 pins to AF2 */ 
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);

  /* Compute the prescaler value */
  PrescalerValue = (uint16_t) ((SystemCoreClock /4) / 10000000) - 1;

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 665;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 333;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OC1Init(TIM3, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  TIM_ARRPreloadConfig(TIM3, ENABLE);

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);


Benim SystemCoreClock değerim 168000000, ABP1 Prescaler bölücüsü ise 4 olarak ayarlı. Yani ABP1 Hattında max frekans olan 42Mhz olmalı. Buara kadar sıkıntı olmaması gerekiyor.

Timer Prescaller değerini böyle ayarladım

  PrescalerValue = (uint16_t) ((SystemCoreClock /4) / 10000000) - 1;

ABP1 hattında 42Mhz olduğu için SystemCoreClock değerini 4'e böldüm. Ardından elde edilen değeri de 10Mhz için 10000000 değerine böldüm.
Ayarlar böyle olunca Benim 10Mhz sinyal almam gerekir ama gerçekte sadece 10 küsür khz sinyal alıyorum.

Yapılan hesap hatası nedir?

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 05 Mart 2014, 22:58:34
Kesme Frekansı = SystemFreq / (ARR+1)(PR+1)

Burada sizin
System Freq=42MHz
ARR=665
PR=3.2

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 05 Mart 2014, 23:42:18
Hocam tamam ama hesaplarımla elde ettiğim sonuçlar birbirini tutmuyor.

Forumdan @muzoo arkadaşımızın sitesinden bir alıntı. (Yazı için teşekkürler)
http://gunluk.muuzoo.gen.tr/2012/08/13/stm32f4-discovery-maceralari-8-tim10-pwm-pin-yon/ (http://gunluk.muuzoo.gen.tr/2012/08/13/stm32f4-discovery-maceralari-8-tim10-pwm-pin-yon/)

Alıntı YapTIM bileşenleri bağlı oldukları veri yolunun 2 katı bir hızla tetikleniyor. APB2 normalde 84MHz'de çalışmaktadır.

Benim ABP1 Hattımda 42Mhz var ama yukarıdaki bilgiye dayanarak timer'in girişinde 84Mhz olduğunu varsayıyorum.
Timer Prescaller değerini ayarlayacağım. Timer 21Mhz de çalışsın istiyorum.

((SystemCoreClock /2) / 21000000) - 1 //(168000000/2)/21000000
Sonuç olarak Prescaller değerimiz 3 oldu.

Bundan sonra Preload değerini 0 versem olmaz. 1 versem frekans ikiye bölünecek. Tamam bölünsün. Peki Duty Değerini nasıl yapacağım. Çözünürlük aşırı düşüyor. Hatta hiç kalmıyor. 1 veya 0.

Bana 10Mhz için gerçek bir örnek verebilirmisiniz. Hesaplamaları biliyorum. Her yerde yazıyor. Ama hiçbirini tutturamıyorum.

Bu arada System CoreClock Değerini ekrana yazdırdım. Ekranda 168000000 değeri göründü.

Mesela 1Khz için prescaler değerini,

PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 1000000) - 1;

yaparak Timeri 1Mhz ile beslemiş oldum. Fakat 1Khz lazım olduğu için Preload değerini 1000 yapıyorum(1 eksiği). Duty Registerinede 500 verdiğim zaman alacağım sinyal %50 duty'ye sahip 1Khz sinyal olması gerekirken 320Hz alıyorum.   :o
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 05 Mart 2014, 23:56:00
Evet çözünürlük düşüyor aynı sorunu bende yaşıyorum, kare dalga çıkartabilmek için kesme içerisinden bir pini toggle edin.

Systeminit() çağırın ilk önce 168MHz ayarlandığına emin olun.

Sonra
PR=16
ARR=0
Clockdiv=0

Kesme Frekansı = 10.5MHz olması gerekiyor.

Kesme içerisinde Pin toggle işlemi yapın bunu kontrol edin.

muzoo sayfasında demek istediği şu normalde veri yolu 84MHz ile çalışıyor ancak timerlarda istisna durumlar var clockdiv değeri 1 ise doğrudan SystemClock ile besleniyor yani 168MHz olarak çalışıyor.

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 00:21:25
Hocam verdiğiniz ayarlarla çıkışta hiçbirşey olmuyor. Duty registerine 0 verirsem çıkış 0, 1 verirsem çıkış 1 oluyor.

Fakat Prescaler değerini 16 Yaptığımda, Period değerini 1 yaptığımda ve duty registerini 1 yaptığımda tam olarak 800Khz düzgün bir sinyal alıyorum.

Period değerini 1 yaptığım için her iki clock darbesinde kesme üretilir. Dolayısıyla Timer girişindeki frekans ikiye bölünür. 800Khz aldığıma göre Timer girişinde 1.6Mhz sinyal olması gerekir. Fakat Timer Prescaler değerini 16 olarak belirlediğimiz için Asıl ABP1 değeri 1.6*16 dan 25.6Mhz çıkıyor.  ??? ???

Neden ABP1 frekansı bu derece düşük anlamadım.Başlangıçta System_init fonksiyonunu çağırıyorum. İçeriğide böyle

/**
  ******************************************************************************
  * @file    system_stm32f4xx.c
  * @author  MCD Application Team
  * @version V1.0.0
  * @date    30-September-2011
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File.
  *          This file contains the system clock configuration for STM32F4xx devices,
  *          and is generated by the clock configuration tool
  *          stm32f4xx_Clock_Configuration_V1.0.0.xls
  *             
  * 1.  This file provides two functions and one global variable to be called from
  *     user application:
  *      - SystemInit(): Setups the system clock (System clock source, PLL Multiplier
  *                      and Divider factors, AHB/APBx prescalers and Flash settings),
  *                      depending on the configuration made in the clock xls tool.
  *                      This function is called at startup just after reset and
  *                      before branch to main program. This call is made inside
  *                      the "startup_stm32f4xx.s" file.
  *
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
  *                                  by the user application to setup the SysTick
  *                                  timer or configure other parameters.
  *                                     
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
  *                                 be called whenever the core clock is changed
  *                                 during program execution.
  *
  * 2. After each device reset the HSI (16 MHz) is used as system clock source.
  *    Then SystemInit() function is called, in "startup_stm32f4xx.s" file, to
  *    configure the system clock before to branch to main program.
  *
  * 3. If the system clock source selected by user fails to startup, the SystemInit()
  *    function will do nothing and HSI still used as system clock source. User can
  *    add some code to deal with this issue inside the SetSysClock() function.
  *
  * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define
  *    in "stm32f4xx.h" file. When HSE is used as system clock source, directly or
  *    through PLL, and you are using different crystal you have to adapt the HSE
  *    value to your own configuration.
  *
  * 5. This file configures the system clock as follows:
  *=============================================================================
  *=============================================================================
  *        Supported STM32F4xx device revision    | Rev A
  *-----------------------------------------------------------------------------
  *        System Clock source                    | PLL (HSE)
  *-----------------------------------------------------------------------------
  *        SYSCLK(Hz)                             | 168000000
  *-----------------------------------------------------------------------------
  *        HCLK(Hz)                               | 168000000
  *-----------------------------------------------------------------------------
  *        AHB Prescaler                          | 1
  *-----------------------------------------------------------------------------
  *        APB1 Prescaler                         | 4
  *-----------------------------------------------------------------------------
  *        APB2 Prescaler                         | 2
  *-----------------------------------------------------------------------------
  *        HSE Frequency(Hz)                      | 25000000
  *-----------------------------------------------------------------------------
  *        PLL_M                                  | 25
  *-----------------------------------------------------------------------------
  *        PLL_N                                  | 336
  *-----------------------------------------------------------------------------
  *        PLL_P                                  | 2
  *-----------------------------------------------------------------------------
  *        PLL_Q                                  | 7
  *-----------------------------------------------------------------------------
  *        PLLI2S_N                               | NA
  *-----------------------------------------------------------------------------
  *        PLLI2S_R                               | NA
  *-----------------------------------------------------------------------------
  *        I2S input clock                        | NA
  *-----------------------------------------------------------------------------
  *        VDD(V)                                 | 3.3
  *-----------------------------------------------------------------------------
  *        Main regulator output voltage          | Scale1 mode
  *-----------------------------------------------------------------------------
  *        Flash Latency(WS)                      | 5
  *-----------------------------------------------------------------------------
  *        Prefetch Buffer                        | OFF
  *-----------------------------------------------------------------------------
  *        Instruction cache                      | ON
  *-----------------------------------------------------------------------------
  *        Data cache                             | ON
  *-----------------------------------------------------------------------------
  *        Require 48MHz for USB OTG FS,          | Enabled
  *        SDIO and RNG clock                     |
  *-----------------------------------------------------------------------------
  *=============================================================================
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/** @addtogroup CMSIS
  * @{
  */

/** @addtogroup stm32f4xx_system
  * @{
  */ 
 
/** @addtogroup STM32F4xx_System_Private_Includes
  * @{
  */

#include "stm32f4xx.h"

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
  * @{
  */

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_Defines
  * @{
  */

/************************* Miscellaneous Configuration ************************/
/*!< Uncomment the following line if you need to use external SRAM mounted
     on STM324xG_EVAL board as data memory  */
/* #define DATA_IN_ExtSRAM */

/*!< Uncomment the following line if you need to relocate your vector Table in
     Internal SRAM. */
/* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET  0x00 /*!< Vector Table base offset field.
                                   This value must be a multiple of 0x200. */
/******************************************************************************/

/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      25
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

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

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_Macros
  * @{
  */

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_Variables
  * @{
  */

  uint32_t SystemCoreClock = 168000000;

  __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
  * @{
  */

static void SetSysClock(void);
#ifdef DATA_IN_ExtSRAM
  static void SystemInit_ExtMemCtl(void);
#endif /* DATA_IN_ExtSRAM */

/**
  * @}
  */

/** @addtogroup STM32F4xx_System_Private_Functions
  * @{
  */

/**
  * @brief  Setup the microcontroller system
  *         Initialize the Embedded Flash Interface, the PLL and update the
  *         SystemFrequency variable.
  * @param  None
  * @retval None
  */
void SystemInit(void)
{
  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif

  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

#ifdef DATA_IN_ExtSRAM
  SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
         
  /* Configure the System clock source, PLL Multiplier and Divider factors,
     AHB/APBx prescalers and Flash settings ----------------------------------*/
  SetSysClock();

  /* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}

/**
   * @brief  Update SystemCoreClock variable according to Clock Register Values.
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
  *         be used by the user application to setup the SysTick timer or configure
  *         other parameters.
  *           
  * @note   Each time the core clock (HCLK) changes, this function must be called
  *         to update SystemCoreClock variable value. Otherwise, any configuration
  *         based on this variable will be incorrect.         
  *     
  * @note   - The system frequency computed by this function is not the real
  *           frequency in the chip. It is calculated based on the predefined
  *           constant and the selected clock source:
  *             
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
  *                                             
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
  *                         
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
  *         
  *         (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value
  *             16 MHz) but the real value may vary depending on the variations
  *             in voltage and temperature.   
  *   
  *         (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value
  *              25 MHz), user has to ensure that HSE_VALUE is same as the real
  *              frequency of the crystal used. Otherwise, this function may
  *              have wrong result.
  *               
  *         - The result of this function could be not correct when using fractional
  *           value for HSE crystal.
  *     
  * @param  None
  * @retval None
  */
void SystemCoreClockUpdate(void)
{
  uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
 
  /* Get SYSCLK source -------------------------------------------------------*/
  tmp = RCC->CFGR & RCC_CFGR_SWS;

  switch (tmp)
  {
    case 0x00:  /* HSI used as system clock source */
      SystemCoreClock = HSI_VALUE;
      break;
    case 0x04:  /* HSE used as system clock source */
      SystemCoreClock = HSE_VALUE;
      break;
    case 0x08:  /* PLL used as system clock source */

      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
         SYSCLK = PLL_VCO / PLL_P
         */   
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
     
      if (pllsource != 0)
      {
        /* HSE used as PLL clock source */
        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
      }
      else
      {
        /* HSI used as PLL clock source */
        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);     
      }

      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
      SystemCoreClock = pllvco/pllp;
      break;
    default:
      SystemCoreClock = HSI_VALUE;
      break;
  }
  /* Compute HCLK frequency --------------------------------------------------*/
  /* Get HCLK prescaler */
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
  /* HCLK frequency */
  SystemCoreClock >>= tmp;
}

/**
  * @brief  Configures the System clock source, PLL Multiplier and Divider factors,
  *         AHB/APBx prescalers and Flash settings
  * @Note   This function should be called only once the RCC clock configuration 
  *         is reset to the default reset state (done in SystemInit() function).   
  * @param  None
  * @retval None
  */
static void SetSysClock(void)
{
/******************************************************************************/
/*            PLL (clocked by HSE) used as System clock source                */
/******************************************************************************/
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
 
  /* Enable HSE */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);

  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }

  if (HSEStatus == (uint32_t)0x01)
  {
    /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    PWR->CR |= PWR_CR_VOS;

    /* HCLK = SYSCLK / 1*///AHB Prescaller
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
     
    /* PCLK2 = HCLK / 2*///APB2 Prescaller
    RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
   
    /* PCLK1 = HCLK / 4*///APB1 Prescaller
    RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;

    /* Configure the main PLL */
    RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
                   (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);

    /* Enable the main PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till the main PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
   
    /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
    FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;

    /* Select the main PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= RCC_CFGR_SW_PLL;

    /* Wait till the main PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
  }

}

/**
  * @brief  Setup the external memory controller. Called in startup_stm32f4xx.s
  *          before jump to __main
  * @param  None
  * @retval None
  */
#ifdef DATA_IN_ExtSRAM
/**
  * @brief  Setup the external memory controller.
  *         Called in startup_stm32f4xx.s before jump to main.
  *         This function configures the external SRAM mounted on STM324xG_EVAL board
  *         This SRAM will be used as program data memory (including heap and stack).
  * @param  None
  * @retval None
  */
void SystemInit_ExtMemCtl(void)
{
/*-- GPIOs Configuration -----------------------------------------------------*/
/*
+-------------------+--------------------+------------------+------------------+
+                       SRAM pins assignment                                   +
+-------------------+--------------------+------------------+------------------+
| PD0  <-> FSMC_D2  | PE0  <-> FSMC_NBL0 | PF0  <-> FSMC_A0 | PG0 <-> FSMC_A10 |
| PD1  <-> FSMC_D3  | PE1  <-> FSMC_NBL1 | PF1  <-> FSMC_A1 | PG1 <-> FSMC_A11 |
| PD4  <-> FSMC_NOE | PE3  <-> FSMC_A19  | PF2  <-> FSMC_A2 | PG2 <-> FSMC_A12 |
| PD5  <-> FSMC_NWE | PE4  <-> FSMC_A20  | PF3  <-> FSMC_A3 | PG3 <-> FSMC_A13 |
| PD8  <-> FSMC_D13 | PE7  <-> FSMC_D4   | PF4  <-> FSMC_A4 | PG4 <-> FSMC_A14 |
| PD9  <-> FSMC_D14 | PE8  <-> FSMC_D5   | PF5  <-> FSMC_A5 | PG5 <-> FSMC_A15 |
| PD10 <-> FSMC_D15 | PE9  <-> FSMC_D6   | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 |
| PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7   | PF13 <-> FSMC_A7 |------------------+
| PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8   | PF14 <-> FSMC_A8 |
| PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9   | PF15 <-> FSMC_A9 |
| PD14 <-> FSMC_D0  | PE13 <-> FSMC_D10  |------------------+
| PD15 <-> FSMC_D1  | PE14 <-> FSMC_D11  |
|                   | PE15 <-> FSMC_D12  |
+-------------------+--------------------+
*/
   /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
  RCC->AHB1ENR   = 0x00000078;
 
  /* Connect PDx pins to FSMC Alternate function */
  GPIOD->AFR[0]  = 0x00cc00cc;
  GPIOD->AFR[1]  = 0xcc0ccccc;
  /* Configure PDx pins in Alternate function mode */ 
  GPIOD->MODER   = 0xaaaa0a0a;
  /* Configure PDx pins speed to 100 MHz */ 
  GPIOD->OSPEEDR = 0xffff0f0f;
  /* Configure PDx pins Output type to push-pull */ 
  GPIOD->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PDx pins */
  GPIOD->PUPDR   = 0x00000000;

  /* Connect PEx pins to FSMC Alternate function */
  GPIOE->AFR[0]  = 0xc00cc0cc;
  GPIOE->AFR[1]  = 0xcccccccc;
  /* Configure PEx pins in Alternate function mode */
  GPIOE->MODER   = 0xaaaa828a;
  /* Configure PEx pins speed to 100 MHz */
  GPIOE->OSPEEDR = 0xffffc3cf;
  /* Configure PEx pins Output type to push-pull */ 
  GPIOE->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PEx pins */
  GPIOE->PUPDR   = 0x00000000;

  /* Connect PFx pins to FSMC Alternate function */
  GPIOF->AFR[0]  = 0x00cccccc;
  GPIOF->AFR[1]  = 0xcccc0000;
  /* Configure PFx pins in Alternate function mode */   
  GPIOF->MODER   = 0xaa000aaa;
  /* Configure PFx pins speed to 100 MHz */
  GPIOF->OSPEEDR = 0xff000fff;
  /* Configure PFx pins Output type to push-pull */ 
  GPIOF->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PFx pins */
  GPIOF->PUPDR   = 0x00000000;

  /* Connect PGx pins to FSMC Alternate function */
  GPIOG->AFR[0]  = 0x00cccccc;
  GPIOG->AFR[1]  = 0x000000c0;
  /* Configure PGx pins in Alternate function mode */
  GPIOG->MODER   = 0x00080aaa;
  /* Configure PGx pins speed to 100 MHz */
  GPIOG->OSPEEDR = 0x000c0fff;
  /* Configure PGx pins Output type to push-pull */ 
  GPIOG->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PGx pins */
  GPIOG->PUPDR   = 0x00000000;
 
/*-- FSMC Configuration ------------------------------------------------------*/
  /* Enable the FSMC interface clock */
  RCC->AHB3ENR         = 0x00000001;

  /* Configure and enable Bank1_SRAM2 */
  FSMC_Bank1->BTCR[2]  = 0x00001015;
  FSMC_Bank1->BTCR[3]  = 0x00010603;
  FSMC_Bank1E->BWTR[2] = 0x0fffffff;
/*
  Bank1_SRAM2 is configured as follow:

  p.FSMC_AddressSetupTime = 3;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 6;
  p.FSMC_BusTurnAroundDuration = 1;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
  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;
*/
 
}
#endif /* DATA_IN_ExtSRAM */


/**
  * @}
  */

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


Bu hesaba göre İşlemcide 25,6*4=102,4 Mhz de çalışması gerekir.

Acep system init fonksiyonumu problemli? Mümkünse kendi kullandığınız system init fonksiyonuyla karşılaştırabilirmisiniz?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: mistek - 06 Mart 2014, 00:31:16
Ben keil'in SystemInit(); fonksiyonunu çağırıyorum kendim yazmadım. İşlemciyi en yüksek hıza ayarlıyor.
Şunuda belirteyim ben F1 de çalışıyorum genelde F4 tecrübem pek yok sadece benzer yapılar olduğu için yorum yapıyorum

z hocanın örneklerden birini çalıştırıp test edebilirsiniz aslında.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 00:45:22
Bir hata buldum.

Bendeki Kartta 8Mhz kristal var. Fakat Systeminit fonksiyonunda PLLM değeri 25 olarak verilmiş. Yani Sistem 25Mhz'ye göre kurulmuş. Ben bu değeri 8 Yapınca biraz hızlanma oldu fakat tam değil. PWM için Aynı değerlerle 800Khz'den 2.4Mhz ye çıktı. Yani 3 kat arttı. Fakat yine Hesaba vurunca ABP1 81 Küsür Mhz ediyor. Bu değer Normal'mi? Ya yine Hesapta yanlış yapıyoruz yada başka atladığım nokta var. Çünkü ABP1 Değerinin bölücüsü 4 olarak ayarlı. Yani 168Mhz çalışsa bile ABP1'de 42Mhz olacak.

@z hocam şu konuyu bi aydınlatsan çok iyi olacak. Kafam çok karışık :o :o
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 11:15:44
Benim bulduğum hatalar şöyle

Sistem 25Mhz osilatöre göre kurulmuştu. Bunu 8Mhz ye göre yaptım. Ayrıca HSI osilatör kullanılmıştı. Ben bunuda HSE osilatörle çalışacak şekilde düzenledim.

Diğer ayarlara hiç karışmadım. AHB ve ABP bölücü oranları aynı. Fakat bunlara rağmen timer hesaplarım gerçektekini tutmuyor.

Hesabı geçtim deneme yanılma ile belki tuttururum dedim ama ne yaptıysam 10Mhz sağlıklı bir sinyal alamadım. Acaba timer ile yapmak mümkün değilmi?

Z hocanın init kodlarını kullanıyorum. Ondada sıkıntı yaşıyorum.

Bana işlemcinin 168Mhz'de çalıştıına emin olduğunuz bir system init fonksiyonu verebilirmisiniz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 12:49:41
Galiba Yanlış yoldayım. Timer ile bu iş yapılmıyor. Bu kadar yüksek Frekans almak sıkıntılı.

MCO2 ve I2S ile yapılabiliyor. Bu konuları araştırayım.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: z - 06 Mart 2014, 13:35:33
(http://www.cncdesigner.com/STM/CLK_PLL.JPG)

Kamera ile çalışırken MCO pininden clock sinyali almıştım.

Aşağıdaki iki başlığa gözatmakta fayda var.

https://www.picproje.org/index.php/topic,35896.msg256592.html#msg256592 (https://www.picproje.org/index.php/topic,35896.msg256592.html#msg256592)

https://www.picproje.org/index.php/topic,35896.msg256669.html#msg256669 (https://www.picproje.org/index.php/topic,35896.msg256669.html#msg256669)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 13:44:35
Evet hocam, MCO bu iş için.

Fakat şuan konuya çok yabancıyım. Nasıl çalıştığını ve frekansın nasıl ayarlandığı konusunda çok az bilgim var. Biraz araştırma yapmam gerekiyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: z - 06 Mart 2014, 13:55:07
MCO dan çıkacak sinyalin frekansını ayarlama üzerine çok fazla şansın yok.

Aşağıdaki linkte MCO pini ile ilgili bir çalışma yapmıştık. Sayfa numaraları vs yardımcı olacaktır.

https://www.picproje.org/index.php/topic,35896.msg256592.html#msg256592 (https://www.picproje.org/index.php/topic,35896.msg256592.html#msg256592)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 16:04:24
Hocam MCO nun nasıl çalıştığını anladım. Ama MCO'saat kaynağı olarak SYSCLK yı gösterirsem istediğim frekansı yakalayamam. Anladığım kadarıyla Araya PLLI2S donanımını koymak gerekiyor. Bu I2S denen şeyin nasıl çalıştığını anlayamadım. Benim bildiğim audio çipleriyle iletişim kurmak amacıyla kullanılıyor. Galiba Sampling Rate vs gibi konuları ilgilendiriyor.

Hocam bu konuda bilginiz varmı? Siz kendi uygulamanızda kameraya kaç Mhz sinyal uyguladınız?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 06 Mart 2014, 22:40:24
Hocam I2S meselesini anladım. Şimdi PLLI2S çarpanlarıyla oynayarak 10Mhz 10Mhz sinyal aldım fakat sinyal biraz dengesiz çıkıyor sanki.

Lojik anallyser ile incelediğimde değişken bir sinyal görüyorum.

(http://s28.postimg.cc/s66ofwl71/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/fesi9ebex/full/)
resim upload (http://postimg.cc/index.php?lang=turkish)

Genişliği dar olan saykıllar 41.7ns Burada 12Mhz gösteriyor frekansı. Geniş olanlar ise 83.3ns, burada ise 8Mhz gösteriyor. 

Anlam veremedim.

Birde osiloskop ile bakayım.

Edit

Lojik Analyserin Band genişliği yetmiyor anlaşılan. Osiloskop ile baktım problem göremedim. 24Mhz yi denedim. Ondada sıkıntısız bir şekilde 24Mhz sinyal aldım.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 00:01:46
Arkadaşlar merhaba,

Kamera ile uğraşıyorum. Amacım kameradan aldığım görüntüyü işlemci de tanımladığım bir diziye atmak. Kamerayı snapshot moduna aldım. Yapabilirsem eğer cameraya start verdiğimde görüntüyü diziye atıp kesme oluşturacağım. İşte bu noktada bayağı bir sıkıntı yaşıyorum.

320x240 bir görüntü için dizinin boyutu 76800 olması gerekiyor. Benim en ilk başta böyle bir dizi tanımlamam gerekiyor ama STM32F407 de 64kb'dan daha büyük diziler tanımlayamıyorum.

Manual'de şöyle bir ifade var.
Up to 192+4 Kbytes of SRAM including 64-
Kbyte of CCM (core coupled memory) data
RAM


Bu tam olarak ne anlama geliyor?

Eğer İşlemcinin Ram'ini kullanamazsam STM32F407'ye harici flash ram takmayı düşünüyorum. Eğer bu yönde bir çalışma yapmam gerekirse FSMC kullanmam gerekir ama FSMC  ile zaten LCD sürüyorum. FSMC kullanılırsa eğer LCD ile flashı aynı anda kullanabilirmiyim. Yada Flashı başka nasıl kullanabilirim.

Amacım dediğim gibi görüntüyü diziye atmak. Bu konuda neler yapılabilir?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 19 Mart 2014, 09:32:07
Hocam diziye atmayın direkt gelen veriyi LCD'nizin frame buffer ına yazın.LCD'nizde hangi sürücü mevcut?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 10:34:41
Hocam şuanda öyle yapıyorum zaten. Ama benim amacım görüntüyü lcd ye hiç göndermemek. Lcd ye gönderdiğim zaman görüntü ekranda çıkıyor. Bunu istemiyorum. Bu arada lcd'nin çipi ssd1289.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 19 Mart 2014, 13:51:17
Hocam o zaman harici RAM kullanmanız gerekiyo.Zaten 240*320 lik görüntü 150 kb yer kaplıyo.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 14:57:48
Doğru söylüyorsunuz. Aslında LCD'nin ram alanını kullanabilseydik güzel olurdu. Yani LCD nin Ram'ine data yazacağım ama LCD de görünmeyecek. SSD1289'un böyle bir özelliği varmı?

Bu konuda öneriye ihtiyacım var.

Harici RAM bakıyorum ama daha önce hiç kullanmadım. Hangi Özelliklerde ne tür bir ram almalıyım. STM32F103 kartımda NAND512 diye Memory bulunuyor.  Fakat kullanılan ram 8 bitlik. Bana 16 bitlik lazım.

Özellikle şunu yapmayı isterdim.

LCD yi FSMC ile zaten sürüyorum. LCD'nin Chip Select(CS) pini var. Büyük ihtimal kullanacağım harici RAM'in de CS pini bulunacaktır. LCD ile Aynı Data hattını kullanarak data gönderip fakat CS pinleri ile istediğim zaman LCD ye istediğim zaman Harici RAM'e yazma yapabileceğim bir çip arıyorum.

LCD'nin RAM' indeki aynı özellikleri gösteren bir çip varmıdır. Ne diye araştırmalıyım?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 19 Mart 2014, 16:25:03
P5Q PCM diye spi dan kullandığım 128Mb lik bir ram vardı.

Büyük veriler için Usart tan dma ile spi a, spidan dma ile kullandığım buffer'a aktarım sağlıyordum.

sizde benzer bir yapı kullanabilirsiniz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 22:19:02
Aslında SPI ram olsa süper olur. İşlemcimdeki SPI kanalları boşta duruyor zaten.

Ben hız konusunda endişeliyim. Örneğin 15FPS de görüntü alıp Ram'e atarsam eğer yaklaşık 66ms de bir 153600 byte veri alacağım kameradan. Bu değeri saniyeye vurunca 15*153600=2304000Byte yani saniyede 2,19 Megabyte veri elimde olur. Gerçekte kamera ile Snapshot modunda çalışacağım için bu hıza yaklaşmam zor ama yinede kullanacağım harici ram bu hızlarda çalışmabilmesi gerekir. Boyutta önemli değil. 256kb'dan aşağı olmasın yeter. Seçeceğim SPI Ram'in bu dediğim şartları sağlamam lazım.

Ersin Hocam sizin kullandığınız çip 66Mhz'e kadar çalışabiliyor. Yani yukarıda bahsettiğim hızlarda rahatlıkla çalışır ama piyasa bulunan birşey değil. Microchip'in ürünleri var ama hızları düşük. Başka önererebileceğiniz spi sram varmı?

Birtek SPI bakmıyorum. Paralel olsada olur. 8 bit bile olur. SRAM'i illa donanımsal kullanacağım diye birşey yok.  Nasıl olsa DMA kullanıyorum. DMA kesmesini aktif eder kesme ile yazarım.


Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 19 Mart 2014, 23:03:36
http://expkits.com/smagaza/entegre-component/memory/AT25DF041A-SSH-B#.UyoF7KiSxZ4 (http://expkits.com/smagaza/entegre-component/memory/AT25DF041A-SSH-B#.UyoF7KiSxZ4)
http://expkits.com/smagaza/entegre-component/memory/32Mb-SDRAM#.UyoF7KiSxZ4 (http://expkits.com/smagaza/entegre-component/memory/32Mb-SDRAM#.UyoF7KiSxZ4)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 23:19:03
Ersin hocam teşekkürler..
SPI olan süpermiş. Hemen alıp denemelere başlayacağım. Hızı çok iyi.

Beni bir süreliğine oyalar bu çip.

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 19 Mart 2014, 23:37:40
ram olsa çok daha iyi olurdu, 100,000 yazma ömrü sıkıntı çıkarmazdı
ama idare eder soketli yaptın mı en azından değişirirken kolaylık sağlar
şu an için üretime geçerken kullandığım ürün p5q spi ram e en uygun seçenek gibi gözüküyor.
oda ram değil ama 10 kat daha fazla yazma ömrü var ve hafıza alanı çok daha geniş
bozulma olan alanları bad sector misali kenara ayırma imkanı mevcut en azından
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 19 Mart 2014, 23:56:37
100 000 yazma ömrü açıkçası ilk etapda gözüme çarpmadı. Microchip'in de SPI SRAM lerine baktım. Hızda problem yok ama yazma ömrü yine 100 000. Eeprom olsa tamam ama ram için çok düşük değilmi bu değerler. Adı üstünde ram bu. sürekli yazma okuma yapılacak buna. Ben yinede SPI ramlerde ışık görüyorum. Belki daha gelişmişi vardır. Biraz araştırayım.

Seri olanların dışında Paralel haberleşen ürünlerede baksam iyi olacak. Sizin gönderdiğiniz 32Mb sd ram iyi de hocam bunlarda çok fazla pin kullanıyor. Discoveryde zaten LCD kamera felan derken epeyce pin harcadım. Diğer Pinlerde zaten sıralı değiller. (Örneğin D portunun x kadar pini başka birşey için kullanılıyor. ) Kullanırsam FSMC ile kullanmam gerek. Bunun içinde LCD yi sökmem lazım.

LCD ile aynı hat üzerinde kullanılabilecek paralel ram tipleri varmıdır piyasada. Hem adresi hemde datayı aynı hat üzerinde alacak. Böyle birşey bulsam çok sevinirim.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: camby - 20 Mart 2014, 00:09:19
Ram de okuma yazma siniri olmaz , emin misiniz
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 20 Mart 2014, 00:21:09
Alıntı yapılan: camby - 20 Mart 2014, 00:09:19
Ram de okuma yazma siniri olmaz , emin misiniz
olur ama flash vs kadar kısıtlı değildir. ayrıca spi olarak bahsedilen ürünler ram değil

@mucit23

fsmc ile 32Mb lik ram ve lcd yi paralel çalıştırabilirsin

reference manual i iyi incele
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSDD1963%20LCD%20Controller%20with%20FSMC&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=1111 (https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSDD1963%20LCD%20Controller%20with%20FSMC&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=1111)

SSD1963 480x272 display on STM32 F1 (http://www.youtube.com/watch?v=32Q-PeT5H8c#ws)
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 00:47:25
Ersin Hocam RAM'in LCD ile beraber nasıl çalışacaklarını anlayamadım. LCD' de adres bacakları(A0- A15) yok. Yazma okuma, Data, Komut gibi işlemleri belirleyen pinler var. Datalar neysede Adres için yeniden bağlantı çekmem lazım. Diğer bir yandan yazılımsal olarak nasıl bir işlem yapacam. Her LCD kullanırsam FSMC yi LCD ye göre, RAM kullanırsam FSMC'yi Ram'e göremi ayarlamam gerekiyor?

Birde Normal RAM ile ile SRAM arasında ne gibi farklar var. Yani demek istediğim SPI Ram'lerin neden ömürleri kısa. Normal ram ile aynı performansta kullanılabilecek SPI memory ürünleri varmıdır?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 20 Mart 2014, 00:54:28
kullandığınız tft sürücüsünün kodu nedir?

sitenizde gördüğüm kadarıyla ssd1963 kullanmışsınız fsmc ile şuan ki driver farklı mı?

FSMC de 4 page bulunmakta bu page leri farklı modlara ayarlayabiliyorsunuz
reference manualde detayları mevcut

1. page atıyorum 70000000-7fffffff
2. page 80000000-8fffffff
3. ..
4. ...
arasında gibi
siz 70000000 adersine ulaşmaya çalıştığınızda fsmc otomatik o adres yapısına göre hareket ederken
8000000 diğer yapıya göre hareket edebiliyorsunuz

nor/nand sram vs gibi modlar mevcut
nand için ya 2.page ya 3, sram 1-4 farketmiyor gibi sınırlandırmalarda var dikkat etmek lazım
spi ram ler nvram olarak geçiyor içeriği elektrik kesilince silinmiyor. bu sebepten daha az yazma yapılabiliyor.

normal ram ile aynı performansta spi ram yok en yakını fram diye biliyorum mram, pcm diye sıralama devam ediyor.
boyut/ maliyet oranıda ters yönde
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 00:57:22
SSD1289

#include "stm3240f_lcd.h"
#include "fonts.c"

typedef struct
{
  __IO uint16_t LCD_REG;
  __IO uint16_t LCD_RAM;
} LCD_TypeDef;


#define Bank1_LCD_D    ((uint32_t)0x60020000)    //disp Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x60000000) //disp Reg ADDR

#define MAX_POLY_CORNERS   200
#define POLY_Y(Z)          ((int32_t)((Points + Z)->X))
#define POLY_X(Z)          ((int32_t)((Points + Z)->Y))

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

static sFONT *LCD_Currentfonts;

static __IO uint16_t TextColor = 0x0000, BackColor = 0xFFFF;
 

#ifndef USE_Delay
static void delay(__IO uint32_t nCount);
#endif /* USE_Delay*/
static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed);

void STM3240F_LCD_Init(void)
{
  LCD_CtrlLinesConfig();
  LCD_FSMCConfig();

    GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);
  GPIOC->BSRRH = GPIO_BSRR_BS_6;
    _delay_(30);
  GPIOC->BSRRL = GPIO_BSRR_BS_6;
    _delay_(5);

   // power supply setting
    // set R07h at 0021h (GON=1,DTE=0,D[1:0]=01)
    LCD_WriteReg(0x0007,0x0021);
    // set R00h at 0001h (OSCEN=1)
    LCD_WriteReg(0x0000,0x0001);
    // set R07h at 0023h (GON=1,DTE=0,D[1:0]=11)
    LCD_WriteReg(0x0007,0x0023);
    // set R10h at 0000h (Exit sleep mode)
    LCD_WriteReg(0x0010,0x0000);
    // Wait 30ms
    _delay_(3);
    // set R07h at 0033h (GON=1,DTE=1,D[1:0]=11)
    LCD_WriteReg(0x0007,0x0033);
    // Entry mode setting (R11h)
    // R11H Entry mode
    // vsmode DFM1 DFM0 TRANS OEDef WMode DMode1 DMode0 TY1 TY0 ID1 ID0 AM LG2 LG2 LG0
    //   0     1    1     0     0     0     0      0     0   1   1   1  *   0   0   0
    LCD_WriteReg(0x0011,0x6038); 
    // LCD driver AC setting (R02h)
    LCD_WriteReg(0x0002,0x0600);
    // power control 1
    // DCT3 DCT2 DCT1 DCT0 BT2 BT1 BT0 0 DC3 DC2 DC1 DC0 AP2 AP1 AP0 0
    // 1     0    1    0    1   0   0  0  1   0   1   0   0   1   0  0
    // DCT[3:0] fosc/4 BT[2:0]  DC{3:0] fosc/4
   
  LCD_WriteReg(0x0003,0xA8A4);//0xA8A4
    LCD_WriteReg(0x000C,0x0000);//0x0000
    LCD_WriteReg(0x000D,0x080C);// 0x080C --> 0x0808
    // power control 4
    // 0 0 VCOMG VDV4 VDV3 VDV2 VDV1 VDV0 0 0 0 0 0 0 0 0
    // 0 0   1    0    1    0    1    1   0 0 0 0 0 0 0 0
    LCD_WriteReg(0x000E,0x2B00); //0x2900
    LCD_WriteReg(0x001E,0x00B8); //0x00B8
    LCD_WriteReg(0x0001,0x293F); //0110000000101000 293f
    LCD_WriteReg(0x0010,0x0000);
    LCD_WriteReg(0x0005,0x0000);
    LCD_WriteReg(0x0006,0x0000);
    LCD_WriteReg(0x0016,0xEF1C);
    LCD_WriteReg(0x0017,0x0003);
    LCD_WriteReg(0x0007,0x0233);
    LCD_WriteReg(0x000B,0x0000|(3<<6));
    LCD_WriteReg(0x000F,0x0000);
    LCD_WriteReg(0x0041,0x0000);
    LCD_WriteReg(0x0042,0x0000);
    LCD_WriteReg(0x0048,0x0000);
    LCD_WriteReg(0x0049,0x013F);
    LCD_WriteReg(0x004A,0x0000);
    LCD_WriteReg(0x004B,0x0000);
    LCD_WriteReg(0x0044,0xEF00);
    LCD_WriteReg(0x0045,0x0000);
    LCD_WriteReg(0x0046,0x013F);
    LCD_WriteReg(0x0030,0x0707);
    LCD_WriteReg(0x0031,0x0204);
    LCD_WriteReg(0x0032,0x0204);
    LCD_WriteReg(0x0033,0x0502);
    LCD_WriteReg(0x0034,0x0507);
    LCD_WriteReg(0x0035,0x0204);
    LCD_WriteReg(0x0036,0x0204);
    LCD_WriteReg(0x0037,0x0502);
    LCD_WriteReg(0x003A,0x0302);
    LCD_WriteReg(0x003B,0x0302);
    LCD_WriteReg(0x0023,0x0000);
    LCD_WriteReg(0x0024,0x0000);
    LCD_WriteReg(0x0025,0x8000); 
    LCD_WriteReg(0x004f,0);       
    LCD_WriteReg(0x004e,0);       
  LCD_SetFont(&LCD_DEFAULT_FONT);
}
/**
  * @brief  Sets the LCD Text and Background colors.
  * @param  _TextColor: specifies the Text Color.
  * @param  _BackColor: specifies the Background Color.
  * @retval None
  */
void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor)
{
  TextColor = _TextColor;
  BackColor = _BackColor;
}

/**
  * @brief  Gets the LCD Text and Background colors.
  * @param  _TextColor: pointer to the variable that will contain the Text
            Color.
  * @param  _BackColor: pointer to the variable that will contain the Background
            Color.
  * @retval None
  */
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor)
{
  *_TextColor = TextColor; *_BackColor = BackColor;
}

/**
  * @brief  Sets the Text color.
  * @param  Color: specifies the Text color code RGB(5-6-5).
  * @retval None
  */
void LCD_SetTextColor(__IO uint16_t Color)
{
  TextColor = Color;
}


/**
  * @brief  Sets the Background color.
  * @param  Color: specifies the Background color code RGB(5-6-5).
  * @retval None
  */
void LCD_SetBackColor(__IO uint16_t Color)
{
  BackColor = Color;
}

/**
  * @brief  Sets the Text Font.
  * @param  fonts: specifies the font to be used.
  * @retval None
  */
void LCD_SetFont(sFONT *fonts)
{
  LCD_Currentfonts = fonts;
}

/**
  * @brief  Gets the Text Font.
  * @param  None.
  * @retval the used font.
  */
sFONT *LCD_GetFont(void)
{
  return LCD_Currentfonts;
}

/**
  * @brief  Clears the selected line.
  * @param  Line: the Line to be cleared.
  *   This parameter can be one of the following values:
  *     @arg Linex: where x can be 0..n
  * @retval None
  */
void LCD_ClearLine(uint8_t Line)
{
  uint16_t refcolumn = LCD_PIXEL_WIDTH - 1;
  /* Send the string character by character on lCD */
  while (((refcolumn + 1)& 0xFFFF) >= LCD_Currentfonts->Width)
  {
    /* Display one character on LCD */
    LCD_DisplayChar(Line, refcolumn, ' ');
    /* Decrement the column position by 16 */
    refcolumn -= LCD_Currentfonts->Width;
  }
}

/**
  * @brief  Clears the hole LCD.
  * @param  Color: the color of the background.
  * @retval None
  */
void LCD_Clear(uint16_t Color)
{
  uint32_t index = 0;
  int i;

  // GPIO_ResetBits(GPIOD, GPIO_Pin_11);
//  LCD_SetCursor(0x00, 0x013F);
  LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
//  _delay_(5);
  // GPIO_SetBits(GPIOD, GPIO_Pin_11);
  for(index = 0; index < 76800; index++)
  {
   // LCD->LCD_RAM = Color;
*(__IO uint16_t *) (Bank1_LCD_D)= Color;   
for(i=0;i<2;i++);
  } 
}

/**
  * @brief  Sets the cursor position.
  * @param  Xpos: specifies the X position.
  * @param  Ypos: specifies the Y position.
  * @retval None
  */
void LCD_SetCursor(uint16_t Xpos, uint8_t Ypos)
{
  LCD_WriteReg(0x004E, Ypos);
  LCD_WriteReg(0x004F, Xpos);
LCD_WriteRAM_Prepare();
}

/**
  * @brief  Draws a character on LCD.
  * @param  Xpos: the Line where to display the character shape.
  * @param  Ypos: start column address.
  * @param  c: pointer to the character data.
  * @retval None
  */
void LCD_DrawChar(uint16_t Xpos, uint8_t Ypos, const uint16_t *c)
{
uint32_t index = 0, i = 0;
//  LCD_SetDisplayWindow(Xpos, Ypos, Xpos+(LCD_Currentfonts->Width-1), Ypos+(LCD_Currentfonts->Height-1));

  for(index = 0; index <LCD_Currentfonts->Height; index++)
  {
    for(i = 0; i < LCD_Currentfonts->Width; i++)
    {
LCD_SetCursor(Xpos+i,Ypos+index);
      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_WriteRAM(BackColor);
      }
      else
      {
        LCD_WriteRAM(TextColor);
      }
    }
  }
}

/**
  * @brief  Displays one character (16dots width, 24dots height).
  * @param  Line: the Line where to display the character shape .
  *   This parameter can be one of the following values:
  *     @arg Linex: where x can be 0..9
  * @param  Column: start column address.
  * @param  Ascii: character ascii code, must be between 0x20 and 0x7E.
  * @retval None
  */
void LCD_DisplayChar(uint16_t Column, uint8_t Line, uint8_t Ascii)
{
  Ascii -= 32;
  LCD_DrawChar(Column, Line, &LCD_Currentfonts->table[Ascii * LCD_Currentfonts->Height]);
}

/**
  * @brief  Displays a maximum of 20 char on the LCD.
  * @param  Line: the Line where to display the character shape .
  *   This parameter can be one of the following values:
  *     @arg Linex: where x can be 0..9
  * @param  *ptr: pointer to string to display on LCD.
  * @retval None
  */
void LCD_DisplayStringLine(uint16_t Xpos, uint8_t Ypos, uint8_t *ptr)
{
  uint16_t refcolumn = Xpos, refrow = Ypos;

  /* Send the string character by character on lCD */
  while (*ptr != 0)
  {
    /* Display one character on LCD */
    LCD_DisplayChar(refcolumn, refrow, *ptr);
    /* increment the column position by 16 */
    refcolumn += LCD_Currentfonts->Width;
if (refcolumn>=LCD_PIXEL_WIDTH-1)
{
refcolumn=0;
refrow+=LCD_Currentfonts->Height;
}
    /* Point on the next character */
    ptr++;
  }
}

/**
  * @brief  Sets a display window
  * @param  Xpos: specifies the X buttom left position.
  * @param  Ypos: specifies the Y buttom left position.
  * @param  Height: display window height.
  * @param  Width: display window width.
  * @retval None
  */
void LCD_SetDisplayWindow(uint16_t Xpos, uint8_t Ypos, uint16_t Width, uint8_t Height)
{
   LCD_WriteReg(0x0044,(uint16_t)(Height<<8)|Ypos);
LCD_WriteReg(0x0045,Xpos);
LCD_WriteReg(0x0046,Width);
LCD_SetCursor(Xpos,Ypos);
}

/**
  * @brief  Put Pixel LCD.
  * @param  Xpos, Ypos, rgb_data
  * @retval None
  */
void LCD_PutPixel(uint16_t Xpos, uint8_t Ypos, uint16_t rgb_data)
{
   LCD_SetCursor(Xpos, Ypos);
LCD_WriteRAM(rgb_data);
}
/**
  * @brief  Get Pixel LCD.
  * @param  Xpos, Ypos
  * @retval RGB_Data
  */
uint16_t LCD_GetPixel(uint16_t Xpos, uint8_t Ypos)
{
  LCD_SetCursor(Xpos, Ypos);
  return LCD_ReadRAM();
}

/**
  * @brief  Disables LCD Window mode.
  * @param  None
  * @retval None
  */
void LCD_WindowModeDisable(void)
{
  //LCD_SetDisplayWindow(239, 0x13F, 240, 320);
  LCD_WriteReg(LCD_REG_3, 0x1018);   
}

/**
  * @brief  Displays a rectangle.
  * @param  X1: specifies the X position.
  * @param  Y1: specifies the Y position.
  * @param  X2: display rectangle height.
  * @param  Y2: display rectangle width.
  * @retval None
  */
void LCD_Rectangle(uint16_t x1, uint8_t y1, uint16_t x2, uint8_t y2, uint8_t fill)
{
LCD_DrawLine(x1, y1, x2, y1);
LCD_DrawLine(x1, y2, x2, y2);
LCD_DrawLine(x1, y1, x1, y2);
LCD_DrawLine(x2, y1, x2, y2);
}

/**
  * @brief  Displays a circle.
  * @param  Xpos: specifies the X position.
  * @param  Ypos: specifies the Y position.
  * @param  Radius
  * @retval None
  */
void LCD_DrawCircle(uint8_t Xpos, uint16_t Ypos, uint16_t Radius)
{
  int32_t  D;/* Decision Variable */
  uint32_t  CurX;/* Current X Value */
  uint32_t  CurY;/* Current Y Value */
 
  D = 3 - (Radius << 1);
  CurX = 0;
  CurY = Radius;
 
  while (CurX <= CurY)
  {
    LCD_SetCursor(Xpos + CurX, Ypos + CurY);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos + CurX, Ypos - CurY);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos - CurX, Ypos + CurY);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos - CurX, Ypos - CurY);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos + CurY, Ypos + CurX);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos + CurY, Ypos - CurX);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos - CurY, Ypos + CurX);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    LCD_SetCursor(Xpos - CurY, Ypos - CurX);
    LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
    LCD_WriteRAM(TextColor);
    if (D < 0)
    {
      D += (CurX << 2) + 6;
    }
    else
    {
      D += ((CurX - CurY) << 2) + 10;
      CurY--;
    }
    CurX++;
  }
}

/**
  * @brief  Displays an uni line (between two points).
  * @param  x1: specifies the point 1 x position.
  * @param  y1: specifies the point 1 y position.
  * @param  x2: specifies the point 2 x position.
  * @param  y2: specifies the point 2 y position.
  * @retval None
  */
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
{
  int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
  yinc1 = 0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
  curpixel = 0;
 
  deltax = ABS(x2 - x1);        /* The difference between the x's */
  deltay = ABS(y2 - y1);        /* The difference between the y's */
  x = x1;                       /* Start x off at the first pixel */
  y = y1;                       /* Start y off at the first pixel */
 
  if (x2 >= x1)                 /* The x-values are increasing */
  {
    xinc1 = 1;
    xinc2 = 1;
  }
  else                          /* The x-values are decreasing */
  {
    xinc1 = -1;
    xinc2 = -1;
  }
 
  if (y2 >= y1)                 /* The y-values are increasing */
  {
    yinc1 = 1;
    yinc2 = 1;
  }
  else                          /* The y-values are decreasing */
  {
    yinc1 = -1;
    yinc2 = -1;
  }
 
  if (deltax >= deltay)         /* There is at least one x-value for every y-value */
  {
    xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
    yinc2 = 0;                  /* Don't change the y for every iteration */
    den = deltax;
    num = deltax / 2;
    numadd = deltay;
    numpixels = deltax;         /* There are more x-values than y-values */
  }
  else                          /* There is at least one y-value for every x-value */
  {
    xinc2 = 0;                  /* Don't change the x for every iteration */
    yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
    den = deltay;
    num = deltay / 2;
    numadd = deltax;
    numpixels = deltay;         /* There are more y-values than x-values */
  }
 
  for (curpixel = 0; curpixel <= numpixels; curpixel++)
  {
    LCD_PutPixel(x, y, TextColor);             /* Draw the current pixel */
    num += numadd;              /* Increase the numerator by the top of the fraction */
    if (num >= den)             /* Check if numerator >= denominator */
    {
      num -= den;               /* Calculate the new numerator value */
      x += xinc1;               /* Change the x as appropriate */
      y += yinc1;               /* Change the y as appropriate */
    }
    x += xinc2;                 /* Change the x as appropriate */
    y += yinc2;                 /* Change the y as appropriate */
  }
}

/**
  * @brief  Displays a monocolor picture.
  * @param  Pict: pointer to the picture array.
  * @retval None
  */
void LCD_DrawMonoPict(const uint32_t *Pict)
{
  uint32_t index = 0, i = 0;
  //LCD_SetCursor(0, (LCD_PIXEL_WIDTH - 1));
  LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
  for(index = 0; index < 2400; index++)
  {
    for(i = 0; i < 32; i++)
    {
      if((Pict[index] & (1 << i)) == 0x00)
      {
        LCD_WriteRAM(BackColor);
      }
      else
      {
        LCD_WriteRAM(TextColor);
      }
    }
  }
}

/**
  * @brief  Displays a bitmap picture loaded in the internal Flash.
  * @param  BmpAddress: Bmp picture address in the internal Flash.
  * @retval None
  */
void LCD_WriteBMP(uint32_t BmpAddress)
{

  uint32_t index = 0, size = 0;
  /* Read bitmap size */
  size = *(__IO uint16_t *) (BmpAddress + 2);
  size |= (*(__IO uint16_t *) (BmpAddress + 4)) << 16;
  /* Get bitmap data address offset */
  index = *(__IO uint16_t *) (BmpAddress + 10);
  index |= (*(__IO uint16_t *) (BmpAddress + 12)) << 16;
  size = (size - index)/2;
  BmpAddress += index;
  /* Set GRAM write direction and BGR = 1 */
  /* I/D=00 (Horizontal : decrement, Vertical : decrement) */
  /* AM=1 (address is updated in vertical writing direction) */
  LCD_WriteReg(LCD_REG_3, 0x1008);

  LCD_WriteRAM_Prepare();

  for(index = 0; index < size; index++)
  {
    LCD_WriteRAM(*(__IO uint16_t *)BmpAddress);
    BmpAddress += 2;
  }

  /* Set GRAM write direction and BGR = 1 */
  /* I/D = 01 (Horizontal : increment, Vertical : decrement) */
  /* AM = 1 (address is updated in vertical writing direction) */
  LCD_WriteReg(LCD_REG_3, 0x1018);
}

/**
  * @brief  Displays a bitmap picture loaded in the internal Flash.
  * @param  BmpAddress: Bmp picture address in the internal Flash.
  * @retval None
  */
void LCD_WriteBMP2(uint16_t Xpos, uint8_t Ypos, uint16_t Width, uint16_t Height, unsigned char *bitmap)
{
  volatile uint32_t index;
  unsigned short *bitmap_ptr = (unsigned short *)bitmap;
  uint16_t i;
  LCD_SetDisplayWindow(Xpos, Ypos, Width, Height);

//LCD_SetCursor(Xpos, Ypos);
  LCD_WriteRAM_Prepare();

  for(index = 0; index < 76800; index++)
  {
  LCD_WriteRAM(bitmap_ptr[index]);
for(i=0;i<100;i++);
  }

}
/**
  * @brief  Displays a full rectangle.
  * @param  Xpos: specifies the X position.
  * @param  Ypos: specifies the Y position.
  * @param  Height: rectangle height.
  * @param  Width: rectangle width.
  * @retval None
  */
void LCD_DrawFullRect(uint16_t x1, uint8_t y1, uint16_t x2, uint8_t y2)
{
  unsigned char  i, xmin, xmax, ymin, ymax;
unsigned char xend=x2-x1;
unsigned char yend=y2-y1;

LCD_SetDisplayWindow(x1,y1,xend+1,yend+1);

if(x1 < x2)
{
xmin = x1;
xmax = x2;
}
else
{
xmin = x2;
xmax = x1;
}

if(y1 < y2)
{
ymin = y1;
ymax = y2;
}
else
{
ymin = y2;
ymax = y1;
}

for(; xmin <= xmax; ++xmin)
{
for(i=ymin; i<=ymax; ++i)
{
LCD_PutPixel(xmin, i, TextColor);
}
}
}

/**
  * @brief  Displays a full circle.
  * @param  Xpos: specifies the X position.
  * @param  Ypos: specifies the Y position.
  * @param  Radius
  * @retval None
  */
void LCD_DrawFullCircle(uint16_t Xpos, uint8_t Ypos, uint16_t Radius)
{

signed int a,b,P;
a=0;
b=Radius;
P=1-Radius;

do
{
LCD_DrawLine(Xpos-a, Ypos+b, Xpos+a, Ypos+b);
LCD_DrawLine(Xpos-a, Ypos-b, Xpos+a, Ypos-b);
LCD_DrawLine(Xpos-b, Ypos+a, Xpos+b, Ypos+a);
LCD_DrawLine(Xpos-b, Ypos-a, Xpos+b, Ypos-a);
if(P < 0)
      P+= 3 + 2*a++;
    else
      P+= 5 + 2*(a++ - b--);
 
  }while(a<=b);
}



/**
  * @brief  Displays an polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @retval None
  */
void LCD_PolyLine(pPoint Points, uint16_t PointCount)
{
  int16_t X = 0, Y = 0;

  if(PointCount < 2)
  {
    return;
  }

  while(--PointCount)
  {
    X = Points->X;
    Y = Points->Y;
    Points++;
    LCD_DrawLine(X, Y, Points->X, Points->Y);
  }
}

/**
  * @brief  Displays an relative polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @param  Closed: specifies if the draw is closed or not.
  *           1: closed, 0 : not closed.
  * @retval None
  */
static void LCD_PolyLineRelativeClosed(pPoint Points, uint16_t PointCount, uint16_t Closed)
{
  int16_t X = 0, Y = 0;
  pPoint First = Points;

  if(PointCount < 2)
  {
    return;
  } 
  X = Points->X;
  Y = Points->Y;
  while(--PointCount)
  {
    Points++;
    LCD_DrawLine(X, Y, X + Points->X, Y + Points->Y);
    X = X + Points->X;
    Y = Y + Points->Y;
  }
  if(Closed)
  {
    LCD_DrawLine(First->X, First->Y, X, Y);
  } 
}

/**
  * @brief  Displays a closed polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @retval None
  */
void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount)
{
  LCD_PolyLine(Points, PointCount);
  LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
}

/**
  * @brief  Displays a relative polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @retval None
  */
void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount)
{
  LCD_PolyLineRelativeClosed(Points, PointCount, 0);
}

/**
  * @brief  Displays a closed relative polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @retval None
  */
void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount)
{
  LCD_PolyLineRelativeClosed(Points, PointCount, 1);
}


/**
  * @brief  Displays a  full polyline (between many points).
  * @param  Points: pointer to the points array.
  * @param  PointCount: Number of points.
  * @retval None
  */
void LCD_FillPolyLine(pPoint Points, uint16_t PointCount)
{
  /*  public-domain code by Darel Rex Finley, 2007 */
  uint16_t  nodes = 0, nodeX[MAX_POLY_CORNERS], pixelX = 0, pixelY = 0, i = 0,
  j = 0, swap = 0;
  uint16_t  IMAGE_LEFT = 0, IMAGE_RIGHT = 0, IMAGE_TOP = 0, IMAGE_BOTTOM = 0;

  IMAGE_LEFT = IMAGE_RIGHT = Points->X;
  IMAGE_TOP= IMAGE_BOTTOM = Points->Y;

  for(i = 1; i < PointCount; i++)
  {
    pixelX = POLY_X(i);
    if(pixelX < IMAGE_LEFT)
    {
      IMAGE_LEFT = pixelX;
    }
    if(pixelX > IMAGE_RIGHT)
    {
      IMAGE_RIGHT = pixelX;
    }
   
    pixelY = POLY_Y(i);
    if(pixelY < IMAGE_TOP)
    {
      IMAGE_TOP = pixelY;
    }
    if(pixelY > IMAGE_BOTTOM)
    {
      IMAGE_BOTTOM = pixelY;
    }
  }
 
  LCD_SetTextColor(BackColor); 

  /*  Loop through the rows of the image. */
  for (pixelY = IMAGE_TOP; pixelY < IMAGE_BOTTOM; pixelY++)
  { 
    /* Build a list of nodes. */
    nodes = 0; j = PointCount-1;

    for (i = 0; i < PointCount; i++)
    {
      if (POLY_Y(i)<(double) pixelY && POLY_Y(j)>=(double) pixelY || POLY_Y(j)<(double) pixelY && POLY_Y(i)>=(double) pixelY)
      {
        nodeX[nodes++]=(int) (POLY_X(i)+((pixelY-POLY_Y(i))*(POLY_X(j)-POLY_X(i)))/(POLY_Y(j)-POLY_Y(i)));
      }
      j = i;
    }
 
    /* Sort the nodes, via a simple "Bubble" sort. */
    i = 0;
    while (i < nodes-1)
    {
      if (nodeX[i]>nodeX[i+1])
      {
        swap = nodeX[i];
        nodeX[i] = nodeX[i+1];
        nodeX[i+1] = swap;
        if(i)
        {
          i--;
        }
      }
      else
      {
        i++;
      }
    }
 
    /*  Fill the pixels between node pairs. */
    for (i = 0; i < nodes; i+=2)
    {
      if(nodeX[i] >= IMAGE_RIGHT)
      {
        break;
      }
      if(nodeX[i+1] > IMAGE_LEFT)
      {
        if (nodeX[i] < IMAGE_LEFT)
        {
          nodeX[i]=IMAGE_LEFT;
        }
        if(nodeX[i+1] > IMAGE_RIGHT)
        {
          nodeX[i+1] = IMAGE_RIGHT;
        }
        LCD_SetTextColor(BackColor);
        LCD_DrawLine(pixelY, nodeX[i+1], nodeX[i+1] - nodeX[i], LCD_DIR_HORIZONTAL);
        LCD_SetTextColor(TextColor);
        LCD_PutPixel(pixelY, nodeX[i+1], TextColor);
        LCD_PutPixel(pixelY, nodeX[i], TextColor);
        /* for (j=nodeX[i]; j<nodeX[i+1]; j++) PutPixel(j,pixelY); */
      }
    }
  }

  /* draw the edges */
  LCD_SetTextColor(TextColor);
}

/**
  * @brief  Writes to the selected LCD register.
  * @param  LCD_Reg: address of the selected register.
  * @param  LCD_RegValue: value to write to the selected register.
  * @retval None
  */
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
{
  *(__IO uint16_t *) (Bank1_LCD_C)= LCD_Reg;
  *(__IO uint16_t *) (Bank1_LCD_D)= LCD_RegValue;
}

/**
  * @brief  Reads the selected LCD Register.
  * @param  LCD_Reg: address of the selected register.
  * @retval LCD Register Value.
  */
uint16_t LCD_ReadReg(uint8_t LCD_Reg)
{
  return (*(__IO uint16_t *) (Bank1_LCD_D));
}

/**
  * @brief  Prepare to write to the LCD RAM.
  * @param  None
  * @retval None
  */
void LCD_WriteRAM_Prepare(void)
{
  *(__IO uint16_t *) (Bank1_LCD_C)= LCD_REG_34;
}

/**
  * @brief  Writes to the LCD RAM.
  * @param  RGB_Code: the pixel color in RGB mode (5-6-5).
  * @retval None
  */
void LCD_WriteRAM(uint16_t RGB_Code)
{   
*(__IO uint16_t *) (Bank1_LCD_D)=RGB_Code;
}

/**
  * @brief  Reads the LCD RAM.
  * @param  None
  * @retval LCD RAM Value.
  */
uint16_t LCD_ReadRAM(void)
{
  *(__IO uint16_t *) (Bank1_LCD_C)=LCD_REG_34 ;
  return *(__IO uint16_t *) (Bank1_LCD_D);
}

/**
  * @brief  Power on the LCD.
  * @param  None
  * @retval None
  */
void LCD_PowerOn(void)
{
/* Power On sequence ---------------------------------------------------------*/
  LCD_WriteReg(LCD_REG_16, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
  LCD_WriteReg(LCD_REG_17, 0x0000); /* DC1[2:0], DC0[2:0], VC[2:0] */
  LCD_WriteReg(LCD_REG_18, 0x0000); /* VREG1OUT voltage */
  LCD_WriteReg(LCD_REG_19, 0x0000); /* VDV[4:0] for VCOM amplitude*/
  _delay_(20);                 /* Dis-charge capacitor power voltage (200ms) */
  LCD_WriteReg(LCD_REG_16, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
  LCD_WriteReg(LCD_REG_17, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
  _delay_(5);                  /* Delay 50 ms */
  LCD_WriteReg(LCD_REG_18, 0x0139); /* VREG1OUT voltage */
  _delay_(5);                  /* Delay 50 ms */
  LCD_WriteReg(LCD_REG_19, 0x1d00); /* VDV[4:0] for VCOM amplitude */
  LCD_WriteReg(LCD_REG_41, 0x0013); /* VCM[4:0] for VCOMH */
  _delay_(5);                  /* Delay 50 ms */
  LCD_WriteReg(LCD_REG_7, 0x0173);  /* 262K color and display ON */
}

/**
  * @brief  Enables the Display.
  * @param  None
  * @retval None
  */
void LCD_DisplayOn(void)
{
  /* Display On */
  LCD_WriteReg(LCD_REG_7, 0x0173); /* 262K color and display ON */
}

/**
  * @brief  Disables the Display.
  * @param  None
  * @retval None
  */
void LCD_DisplayOff(void)
{
  /* Display Off */
  LCD_WriteReg(LCD_REG_7, 0x0);
}

/**
  * @brief  Configures LCD Control lines (FSMC Pins) in alternate function mode.
  * @param  None
  * @retval None
  */
void LCD_CtrlLinesConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Enable GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD |  RCC_AHB1Periph_GPIOE, 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_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_PinSource8, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, 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_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);

   /* NE1 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;   
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);

 
  /* SRAM Address lines configuration */   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);

}

/**
  * @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);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG , ENABLE);
 
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 3 ----------------------------------------*/
  /* FSMC_Bank1_NORSRAM4 configuration */
  p.FSMC_AddressSetupTime = 0;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 9;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 1;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;
  /* Color LCD configuration ------------------------------------
     LCD configured as follow:
        - Data/Address MUX = Disable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Enable
        - Asynchronous Wait = Disable */

  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_Enable;//
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;//
  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*/

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ErsinErce - 20 Mart 2014, 01:11:55
bu lcd yi de fsmc ile kullanıyorsunuz ztn
hatta page 1 i atamışsınız

stm32f4 den ram için gereken diğer pinleri çıkarıp direk bağlayın
page 2 ye de ram i atayın

FSMC_BCR1..4 diye 4 farklı register mevcut

page -> bank olarak geçiyormuş
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 01:37:10
Hocam yarın konuyu biraz araştırayım. Bu Page1, Page 2 konularını hiç bilmiyorum. Bu konuda birazdaha başınızı ağrıtabilirim. Atama işlemi anlattığınız kadar kolaysa ne mutlu bana. Yanlız bunlarında fiyatı çok pahalı. Tanesi 17 küsür lira. Eğer Page Atama işini çözersem hurda pc ramlerinden işime yarayacak bir tane bulmaya çalışayım. Benzerdir herhalde.

Son yarım saattir bir yandanda gözüm STM32F429-Discovery de geziniyor. SDRam LCD felan herşeyi üzerinde. 64Mbit SD ram bulunuyor üzerinde. Sanırsam LCD ile ortak kullanılıyor. Buradaki Ortak kullanımdaki karışmaları page'ler ilemi hallediyorlar?

DMA2D denen bir donanım eklemişler. Layer meselesi hoşuma gitti.
http://www.youtube.com/watch?v=TJWeVvicvZk#ws (http://www.youtube.com/watch?v=TJWeVvicvZk#ws)

Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 14:14:51
Daha önce STM32F429'da DMA2D modülünü araştıran oldumu. Bazı güzel Özellikleri var.

Örnek programlarda bakıyorum anlamadığım bir iki nokta var. LCD ye yazı yazılacağı zaman LCD nin RAM alanı yerine direk SDRAM'e data gönderiliyor. Anladığım kadarıyla DMA2D donanımıda SDRAMdeki datayı alıp LCD nin ram alanına taşıyor. Bu sayede LCD ye data göndermeden önce DMA2D donanımı sayesinde Görüntüde işlemeler yapılabiliyor. Yani hiç bir zaman direk LCD nin ram alanına yazılma yapılmıyor. Durum böyle işliyor değilmi?

Bir başka örnekte kart üzerindeki SD ram'in kullanımı gösterilmiş. Kullanıcı SD ram'e data yazabiliyor. Anlamadığım nokta şudur. SD ram LCD için kullanılıyorsa kullanıcının Ram alanına veri yazması Sıkıntı çıkarmazmı? Gördüğüm kadarıyla kullanıcıya ayrılmış özel bir alan yok. Hem LCD hemde Kullanıcı SDRam'de aynı adresi kullanıyor.

SDRAM, LTDC ve DMA2D donanımları birlikte nasıl işliyor. SDRAM nasıl kullanılıyor? Açıklayacak olan varmı?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 20 Mart 2014, 17:09:15
Hocam olay şu şekilde:
FMC modülü yardımıyla SDRAM sürülüyor. DMA2D aracılığıyla da lcd'ye basılacak olan veriler SDRAM'in başlangıç adresinden itibaren yazılır.Mesela Stm32f429 da bu adres 0xD0000000.LTDC donanımı da konfigüre edilirken start adres olarak da bu adres verilir.Böylece LTDC donanımı bu adresten itibaren adresleri tarar ve herbir pixele tekbül eden adresteki veriyi ekrana basar.
Bu arada LTDC donanımı arada bir tft driver entegresi olmadığı durumlarda kullanıyor.Yani driver'ın görevini LTDC yapmış oluyor.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 21:31:12
Anladım. Ama mesela LCD kütüphanesini inceliyorum Text basarken direk SDRAM'in başlangıc adresinden itibaren yazma yapılıyor.Bunun yanı sıra  DrawLine, DrawRect gibi fonksiyonlarda DMA2D kullanılıyor. Burada istenseydi direk SDRAM'e yazılabilirdi değilmi. DMA2D kullanılmasındaki sebeb nedir?

Örnek kodları inceliyorum. LTDC  donanımının init edildiği kısımda SDRAM de init ediliyor. Fakat LTDC donanımının SDRAM'in başlangıc adresinden itibaren tarama yapılabilmesi için LTDC donanımına mutlaka bir yerde SDRAM in başlangıc adresini tanımlamaları lazım. Bunu nerede yapıyorlar çözemedim.

Hocam LCD de driver ic yok diyorsunuz ama ILI9341 yokmu?


Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 20 Mart 2014, 22:42:51
Birde;
Hocam Ben 192+4Kb işinde birşey anlamadım. Bana 153 kb boyutunda bir dizi lazım. Keil bana müsade etmiyor.

Dizi kullanmadan şuanki program boyutum aşağıdaki gibi.
Program Size: Code=19044 RO-data=6556 RW-data=96 ZI-data=1656 

Aslında diziyi tanımlıyorum sıkıntı yok ama diziyi kullanmak istediğimde keil bana aşağıdaki hatayı veriyor

.\Output\Discovery.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.bss).
.\Output\Discovery.axf: Error: L6407E: Sections of aggregate size 0x25800 bytes could not fit into .ANY selector(s).


Atladığım bir noktamı var. Acaba tek seferde tanımlanabilecek max. bir dizi boyutumu var? Atladığım nokta nedir?
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 21 Mart 2014, 09:46:46
Hocam stm32f4xx lerde.Ram iki bölümden oluşuyomuş.
128 kb'lık Major Ram+64 Kb CCM Data Ram şeklinde.
64 Kb CCM Data Ram kısmına çevre birimleri ya da DMA tarafından erişilemiyor.Bu alanı sadece CPU'yu kullanabiliyor.Reference Manual'de Memory And Bu Architecture bölümünde bahsediliyor biraz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 21 Mart 2014, 11:25:54
Anladım hocam, STM32F429 ile ilgili son bir soru sormak istiyorum. LCD sürekli SDRAM i kullanıyor. Fakat hepsini kullanmıyor herhalde. Çünkü SDRAM yanlış hatırlamıyorsam 8Mbyte. LCD için çok fazla bir değer. Acaba LCD, SDRAM de nekadarlık bir alanı kullanıyor? Ben Hem LCD yi kullanıp hemde SDRAM'i external ram olarak kullanabilirmiyim?

@Ersin Hocam

STM32F407'ye paralel SD ram bağlama içinden vazgeçtim. Çok fazla kablolama işi yapmam gerekiyor. Sırf 12 tane Adres, 15 tane Data, 7-8 tanede kontrol için kablo çekmem gerekiyor. Açıkçası gözüm korktu bu kablolama işinden.

Ben yine SPI RAM konularına bakacağım. Şuanda piyasada birtek microchip'in SPI SRAM'leri işimi görüyor. Zaten başka bir firmadada SPI Sram bulamadım. 23LCV1024 var. Her biri 125KB, Bundan iki tane bağlayıp toplamda 2 adet CS 3 adette SPI haberleşme hattı ile RAM işini çözmeyi düşünüyorum. Datasheet'te "Unlimited Read and Write Cycles" yazıyor. Yazma okuma ömründe problem yok. Benim gözümte tek eksiği max 20Mhz desteklemesi. Onuda şuanda göz ardı ediyorum. 20Mhz'in yeterli olup olmadığını gerçek uygulamada test edip göreceğim.

Bana 4 adet 23LCV1024 lazım. Türkiyede bulamadım. Yurtdışından satın almayı düşünüyorum. Nerden almam daha uygun olur?



Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: yamak - 21 Mart 2014, 12:09:25
Alıntı YapAnladım hocam, STM32F429 ile ilgili son bir soru sormak istiyorum. LCD sürekli SDRAM i kullanıyor. Fakat hepsini kullanmıyor herhalde. Çünkü SDRAM yanlış hatırlamıyorsam 8Mbyte. LCD için çok fazla bir değer. Acaba LCD, SDRAM de nekadarlık bir alanı kullanıyor? Ben Hem LCD yi kullanıp hemde SDRAM'i external ram olarak kullanabilirmiyim?
Hocam kodları inceledim biraz anladığım kadarıyla yaklaşık 600 kb lık bir alan kullanılıyor.Geri kalan alanı siz istediğiniz bir işlem için kullanabilirsiniz.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 23 Mart 2014, 11:42:37
Az önce her bir pixel nekadar sürede geliyor onu ölçebilmek için DMA Transfer Complete kesmesini açtım. Her bir pixel geldiğinde kesme oluşacağı için  kesme içinde bir pini toggle yaparak pixel frekansını ölçtüm.

Pixel frekansı konusunda ufak bir tespit yaptım. Kameranın FPS değeri düşünce gelen dataların hızı değişmiyor. Herzaman 3Mhz frekansta kesme oluşuyor. Yani 333ns aralıklarla yeni bir pixel geliyor. Bu frekansta gelen 16 bit bir datayı spi ile göndermek x16 clock daha demektir. Microchip'in SPI SRAMleri bu frekansta çalışması olanaksız.

STM32F407 için Paralel SDRAM den başka çözüm yok. Onunlada uğraşmak istemiyorum. STM32F429 Discovery alacağım.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Nisan 2014, 13:08:04
Arkadaşlar bir problemim var.

STM32F429 Discovery'ye kamera bağlayacağım. Aynı zamanda LCD de kullanacağım. Discovery üzerinde zaten LCD var. LTDC ile kullanılabiliyor. DCMI modülüde var ama öyle bir zıtlık varki bu iki modül aynı anda kullanılamıyor? DCMI ve LTDC bazı pinleri ortak kullanıyor. Bu bir hatamı yoksa st bilerekmi böyle yapmışlar anlam veremedim. Biraz hayal kırıklığına uğradım açıkçası

Çakışan pinler aşağıdaki gibi

PA4 = DCMI_HSYNC = LTDC_VSYNC
PA6 = DCMI_PXCLK = LTDC_G2
PC6 = DCMI_D0       = LTDC_HSYNC
PC7 = DCMI_D1       = LTDC_G6
PD3 = DCMI_D5       = LTDC_G7

DCMI modülünün işlemci üzerinde kullanılabilecek bütün pinlerine baktım. Çakışan D0, D1 ve D5 Pinlerini Başka pinlere taşıyabiliyorum ama DCMI_ PXCLK ve DCMI_HSYNC pinlerinin başka karşılığı yok bulamadım ben. Yinede gözümden kaçmış bir nokta olabilir. Birde siz inceleyebilirmisiniz
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Nisan 2014, 16:02:53
Yok olmuyor. Çok kötü bir durum.  :'(

Hatta şurada benzer bir konu var.
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32F429I-DISCO%20LCD%20and%20DCMI&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=284

Sadece 2 Pinin LTDC ile çakışması yüzünden (HSYNC ve PXCLK) DCMI kullanamıyacam. Büyük ihtimal Kamerayı Software kullanmam gerekecek..
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: ercan_t - 03 Nisan 2014, 16:19:47
merhaba
AF tablosunda
istediğin fonksiyon ucları başka pinlerede tanımlanmış görünüyor?


PI9,PI13   = LTDC_VSYNC
PJ9,PH13  = LTDC_G2
PI10,PI12 = LTDC_HSYNC
PK1,PI1    = LTDC_G6
PI2,Pk2    = LTDC_G7
bunları kullanabilirsin işine yarayabilir.
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 03 Nisan 2014, 23:05:16
Hocam sizin dediğiniz farklı bir board sanırım. Benim kullandığım STM32F429 Discovery, Üzerindeki işlemci STM32F429ZI serisi 144 pin, Portlardan en fazla PG var.

Ben hangi pinde hangi özellik var diye bakmak için ST'nin mikroxplorer programını kullanıyorum. LTDC_VSYNC pini için başka bir seçenek yok illa PA4 olacak.
Data pinleri ise yer değiştirebiliyor. Aynı şekilde DCMI_PXCLK, HSYNC VSYNC de öyle.

Kimse fazla kullanmadığı için bu durum fazla bilinmiyor zaten. ST_Forumda durumu dile getirdim. O board ile olmaz, üzerinde daha fazla pin bulunduran başka bir board kullanın gibi bir cevap geldi. 

Keşke FPGA'larda olduğu gibi istideğimiz pini istediğimiz donanıma bağlayabilseydik. Hem yazılımcı için hemde kart tasarımı için kullanıcıya nede güzel bir kolaylık sağlardı.

İşin yoksa git şimdi uğraşki kamerayı yazılımla çalıştırasın... Kesmelerle boğuşacağız.

Büyük ihtimal birçok işlemcide bu durum vardır ama şunuda sorgulamadan edemiyorum.

SPI, I2C, UART olsa her birinden 2 şer 3 er tane koyuyorlar. SPI nin biri başka bir donanımla çakışsa gider başka bir SPI kullanırsın. Ama bunlar öyle değilki LTDC ve DCMI den işlemci üzerinde birer tane var. İkisininde ortak pinleri var ve ortak olan pinlerin AF seçeneği yok. Yani adam resmen ikisin aynı anda kullanamazsın diyor.

Kamera kullanan biriside LCD kullanır herhalde, ST bunu belliki düşünememiş. Yada bazı şeyleri çok basit düşünüyorum. Atladığım şeylerde olabilir emin değilim.

ST beni biraz hayal kırıklığına uğrattı... :( Mecburen kamerayı yazılımsal olarak kullanacağız. İşin yoksa git uğraş şimdi...
Başlık: Ynt: STM32F4x Çalışmalarım
Gönderen: Mucit23 - 04 Nisan 2014, 02:11:26
Alıntı yapılan: ErsinErce - 20 Mart 2014, 01:11:55
bu lcd yi de fsmc ile kullanıyorsunuz ztn
hatta page 1 i atamışsınız

stm32f4 den ram için gereken diğer pinleri çıkarıp direk bağlayın
page 2 ye de ram i atayın

FSMC_BCR1..4 diye 4 farklı register mevcut

page -> bank olarak geçiyormuş

Ersin hocam yeni dikkatimi çekti. STM32F40X'e Normal SDRAM bağlayamıyoruz. Çünkü normal SDRAM lerdeki Adres bacakları ayrı oluyor. Örneğin STM32F429 Discovery kitinde SDRAM olarak IS42S16400J var. 12bit adres hattı kullanıyor. (A0-A11)  STM32F429'da FSMC'ye SDRAM modu eklemişler. Yani Adres Bacaklarının hangi pinler olduğu belli.

STM32F40x'de ise bu adres bacakları yok. Yani FSMC de sadece Nor_Mux özelliği var. Max. 24 bit adresleme yapabiliyor ama adres hattının ilk 16 bitini Data hattıyla ortak olarak kullanıyor sanırım. Çünkü Pin_Map'e baktığımda FSMC ile ilgili Adres bacaklarından sadece A16 ile A23 arasını görebiliyorum.

STM32F407 için FSMC ye ram bağlamak istersek ne tür bir ram kullanmalıyız? Ben ilk başta SDRAM bağlanacağını sandığım için biraz gözüm korktu.