STM32F4 ile TFT LCD sürme image

Başlatan tesladream, 27 Mayıs 2013, 22:18:48

tesladream

Arkadaşlar merhaba,

    TFT'yi almıştım ebay'dan sürmeye başladım fakat ekrana papatyalı image'den başka bir image i tam bastıramadım.Diğer resimleri extern ettim programa tıpkı papatyalı resim gibi bastırıyorum fakat abuk subuk bir şey basıyor yardımcı olabilir misiniz? Image2lcd programını kurdum bir kaç fotoyu yaptım forum da bahsedildiği gibi fakat resimi sağlıklı bir şekilde bastıramıyorum.Bir diğer problemimde ekrana bastırdığım yazılar sanki büyük gibi yazıların boyutunu küçültebilir miyim?

Not: SSD1289 library kullanıyorum.Forumda Diot Hoca'nın paylaştığı library.
#include "main.h"
#include "system_stm32f4xx.h"
#include "stm3240f_lcd.h"
#include "touch_7846.h"


char degerx[30]= "    Umit KAYACIK     ";
char degery[30]= " Anadolu University  ";
char degerz[30]= "      SUNATOLIA      ";
char degert[30]= "  Solar Car Project  ";
extern unsigned int xxx,yyy;
extern unsigned char flag;
extern u8 gImage_ikon[];
extern u8 gImage_r2[];
extern u8 gImage_r1[];
static __IO uint32_t TimingDelay;

void GPIO_Configuration(void);
					 					   
 
int main()
{ 
	if (SysTick_Config(SystemCoreClock / 1000)){ while (1);}

   GPIO_Configuration();
   Delay(250);
   STM3240F_LCD_Init();
   Delay(250);
	
    LCD_Clear(LCD_COLOR_YELLOW);
    LCD_WindowModeDisable(); 
				LCD_SetTextColor(LCD_COLOR_BLUE);
				LCD_SetBackColor(LCD_COLOR_RED);  
				LCD_DisplayStringLine(60, (uint8_t *)degerz);
				LCD_DisplayStringLine(80, (uint8_t *)degert);    	 
			 
				LCD_SetTextColor(LCD_COLOR_BLUE);
				LCD_SetBackColor(LCD_COLOR_RED);  
				LCD_DisplayStringLine(120, (uint8_t *)degerx);
				LCD_DisplayStringLine(140, (uint8_t *)degery);

				LCD_DrawRect(10,100,40,80);
				LCD_DrawRect(10,200,40,80);
				LCD_DrawRect(10,300,40,80);
				LCD_DrawRect(180,100,40,80);
				LCD_DrawRect(180,200,40,80);
				LCD_DrawRect(180,300,40,80);
				Delay(1000);   	Delay(1000);	Delay(1000); 
				LCD_Clear(LCD_COLOR_BLACK);
				LCD_WriteBMP2(239, 319, 240, 320,gImage_ikon);	// Resim
				Delay(1000);   	Delay(1000);	Delay(1000); 
			
		 
}




void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStruct; 
 	
 	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE); 	

	//Ledler
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_12;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
	GPIO_Init(GPIOD,&GPIO_InitStruct);

	//buton
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

}


/**
  * @brief  Inserts a delay time.
  * @param  nTime: specifies the delay time length, in milliseconds.
  * @retval None
  */
void Delay(__IO uint32_t nTime)
{ 
  TimingDelay = nTime;

  while(TimingDelay != 0);
}

/**
  * @brief  Decrements the TimingDelay variable.
  * @param  None
  * @retval None
  */
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  { 
    TimingDelay--;
  }
}

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

respected

Merhaba M_B Hocamın ssd 1963 için verdiği kodları düzenleyip kullanabilirsin. Ben denedim çalışıyor. Ayrıca resim için ST nin GUI editörünü kullan. Orada image ekleyip kod üretirsen o kodları alıp resim basabilirsin.

tesladream

O chip bizim kulladığımızdan farklı sanırım kullanabilir miyiz ki? birde ST GUI dediğimiz ne oluyo usta image i C coduna çeviren bir program mı?

Kaanx

Ssd1289 a göre yazılmıs main fonksiyonunu yazdım sadece diger kutuphaneler yepyeniprojelerdeki ve element14 deki lıbraryler ile aynı while içerisinde görebilirisin 2 tane farklı resim basmıstım. istersen arrtırabilirsinde yardımcı olması dılegıyle :)

http://kaankandemir.wordpress.com/2013/05/27/stm32f4-discovery-3-2-tft-lcd-surme/


tesladream

Teşekkür ederim Kaanx ve respected . Peki ekrana bastırdığımız yazı fontunu nasıl değiştirebileceğiz.Yazının şeklini ,büyüklüğünü falan birde bastırmak için illa ki arka plan rengi mi eklememiz lazım? Bu konular hakkında bir bilginiz var mı?


Kaanx

#7
Hocam SSD1289 kütühanesini incelerseniz hatta söyle vereyım headerını

#ifndef __SSD1289_H
#define __SSD1289_H

#include "stm32f4xx.h"
#include "fonts.h"
#include "delay.h"

typedef struct
{
  int16_t X;
  int16_t Y;
} Point, * pPoint;

#define LCD_REG_0             0x00
#define LCD_REG_1             0x01
#define LCD_REG_2             0x02
#define LCD_REG_3             0x03
#define LCD_REG_4             0x04
#define LCD_REG_5             0x05
#define LCD_REG_6             0x06
#define LCD_REG_7             0x07
#define LCD_REG_8             0x08
#define LCD_REG_9             0x09
#define LCD_REG_10            0x0A
#define LCD_REG_12            0x0C
#define LCD_REG_13            0x0D
#define LCD_REG_14            0x0E
#define LCD_REG_15            0x0F
#define LCD_REG_16            0x10
#define LCD_REG_17            0x11
#define LCD_REG_18            0x12
#define LCD_REG_19            0x13
#define LCD_REG_20            0x14
#define LCD_REG_21            0x15
#define LCD_REG_22            0x16
#define LCD_REG_23            0x17
#define LCD_REG_24            0x18
#define LCD_REG_25            0x19
#define LCD_REG_26            0x1A
#define LCD_REG_27            0x1B
#define LCD_REG_28            0x1C
#define LCD_REG_29            0x1D
#define LCD_REG_30            0x1E
#define LCD_REG_31            0x1F
#define LCD_REG_32            0x20
#define LCD_REG_33            0x21
#define LCD_REG_34            0x22
#define LCD_REG_36            0x24
#define LCD_REG_37            0x25
#define LCD_REG_40            0x28
#define LCD_REG_41            0x29
#define LCD_REG_43            0x2B
#define LCD_REG_45            0x2D
#define LCD_REG_48            0x30
#define LCD_REG_49            0x31
#define LCD_REG_50            0x32
#define LCD_REG_51            0x33
#define LCD_REG_52            0x34
#define LCD_REG_53            0x35
#define LCD_REG_54            0x36
#define LCD_REG_55            0x37
#define LCD_REG_56            0x38
#define LCD_REG_57            0x39
#define LCD_REG_58            0x3A
#define LCD_REG_59            0x3B
#define LCD_REG_60            0x3C
#define LCD_REG_61            0x3D
#define LCD_REG_62            0x3E
#define LCD_REG_63            0x3F
#define LCD_REG_64            0x40
#define LCD_REG_65            0x41
#define LCD_REG_66            0x42
#define LCD_REG_67            0x43
#define LCD_REG_68            0x44
#define LCD_REG_69            0x45
#define LCD_REG_70            0x46
#define LCD_REG_71            0x47
#define LCD_REG_72            0x48
#define LCD_REG_73            0x49
#define LCD_REG_74            0x4A
#define LCD_REG_75            0x4B
#define LCD_REG_76            0x4C
#define LCD_REG_77            0x4D
#define LCD_REG_78            0x4E
#define LCD_REG_79            0x4F
#define LCD_REG_80            0x50
#define LCD_REG_81            0x51
#define LCD_REG_82            0x52
#define LCD_REG_83            0x53
#define LCD_REG_96            0x60
#define LCD_REG_97            0x61
#define LCD_REG_106           0x6A
#define LCD_REG_118           0x76
#define LCD_REG_128           0x80
#define LCD_REG_129           0x81
#define LCD_REG_130           0x82
#define LCD_REG_131           0x83
#define LCD_REG_132           0x84
#define LCD_REG_133           0x85
#define LCD_REG_134           0x86
#define LCD_REG_135           0x87
#define LCD_REG_136           0x88
#define LCD_REG_137           0x89
#define LCD_REG_139           0x8B
#define LCD_REG_140           0x8C
#define LCD_REG_141           0x8D
#define LCD_REG_143           0x8F
#define LCD_REG_144           0x90
#define LCD_REG_145           0x91
#define LCD_REG_146           0x92
#define LCD_REG_147           0x93
#define LCD_REG_148           0x94
#define LCD_REG_149           0x95
#define LCD_REG_150           0x96
#define LCD_REG_151           0x97
#define LCD_REG_152           0x98
#define LCD_REG_153           0x99
#define LCD_REG_154           0x9A
#define LCD_REG_157           0x9D
#define LCD_REG_192           0xC0
#define LCD_REG_193           0xC1
#define LCD_REG_229           0xE5

#define LCD_COLOR_WHITE          0xFFFF
#define LCD_COLOR_BLACK          0x0000
#define LCD_COLOR_GREY           0xF7DE
#define LCD_COLOR_BLUE           0x001F
#define LCD_COLOR_BLUE2          0x051F
#define LCD_COLOR_RED            0xF800
#define LCD_COLOR_MAGENTA        0xF81F
#define LCD_COLOR_GREEN          0x07E0
#define LCD_COLOR_CYAN           0x7FFF
#define LCD_COLOR_YELLOW         0xFFE0

#define   BLACK        0x0000
#define   NAVY         0x000F
#define   DGREEN       0x03E0
#define   DCYAN        0x03EF
#define   MAROON       0x7800
#define   PURPLE       0x780F
#define   OLIVE        0x7BE0
#define   GREY         0xF7DE
#define   LGRAY        0xC618
#define   DGRAY        0x7BEF
#define   BLUE         0x001F
#define   GREEN        0x07E0
#define   CYAN         0x07FF
#define   RED          0xF800
#define   MAGENTA      0xF81F
#define   YELLOW       0xFFE0
#define   WHITE        0xFFFF

#define LCD_DIR_HORIZONTAL       0x0000
#define LCD_DIR_VERTICAL         0x0001

#define LCD_PIXEL_HEIGHT          0x0140
#define LCD_PIXEL_WIDTH         0x00F0

#define ASSEMBLE_RGB(R ,G, B)    ((((R)& 0xF8) << 8) | (((G) & 0xFC) << 3) | (((B) & 0xF8) >> 3))

void LCD_Init(void);
void TIM_Config(void);
void LCD_CtrlLinesConfig(void);
void LCD_FSMCConfig(void);

void PutPixel(int16_t x, int16_t y);

void LCD_SetColors(__IO uint16_t _TextColor, __IO uint16_t _BackColor);
void LCD_GetColors(__IO uint16_t *_TextColor, __IO uint16_t *_BackColor);
void LCD_SetTextColor(__IO uint16_t Color);
void LCD_SetBackColor(__IO uint16_t Color);
void LCD_Clear(uint16_t Color);
void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);
void LCD_CharSize(__IO uint16_t size);
void Pixel(int16_t x, int16_t y,int16_t c);

void LCD_PutChar(int16_t PosX, int16_t PosY, char c);
void LCD_StringLine(uint16_t PosX, uint16_t PosY, uint8_t *str);
void LCD_DrawLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length, uint8_t Direction);
void LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
void LCD_DrawSquare(uint16_t Xpos, uint16_t Ypos, uint16_t a);
void LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);;
void LCD_DrawUniLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void LCD_DrawFullRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
void LCD_DrawFullCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
void LCD_PolyLine(pPoint Points, uint16_t PointCount);
void LCD_PolyLineRelative(pPoint Points, uint16_t PointCount);
void LCD_ClosedPolyLine(pPoint Points, uint16_t PointCount);
void LCD_ClosedPolyLineRelative(pPoint Points, uint16_t PointCount);
void LCD_FillPolyLine(pPoint Points, uint16_t PointCount);
void LCD_SetDisplayWindow(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width);
void LCD_WriteBMP(uint8_t Xpos, uint16_t Ypos, uint8_t Height, uint16_t Width, uint8_t *bitmap);
void LCD_DrawFullSquare(uint16_t Xpos, uint16_t Ypos, uint16_t a);


void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(uint16_t RGB_Code);
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue);
void LCD_DisplayOn(void);
void LCD_DisplayOff(void);
void LCD_BackLight(int procentai);

#endif


Burada verilen fonksiyonları ssd1289.c den ne yaptıgını ve nasıl işlediğine bakabilirisniz. 

Mesela lcd_displaystringline font yazdırır.
lcd_writebmp2 resim çizdirir. vs vs...

mesaj birleştirme:: 28 Mayıs 2013, 12:42:54

Alıntı yapılan: muhendisbey - 28 Mayıs 2013, 11:24:31
Editörün linki:
http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257934
en altta download'a basarak indirebilirsiniz. Denemekte fayda var.

Hocam Bu dökuman ne işe yarıyor GUİ olarak indi ama k. bkmayın anlayamadım

pisayisi

#8
St embedded gui library ile gelen örneklerin içinde stm32f4 için hazır şablon yok. Bu library basitce arabirim hazırlamak için ideal. Eski visualbasic editörü gibi bir yapısı var, Resurce editör ile birkaç tane c dodyası üretiyorsunuz ve bu dosyalarışablon projenizin içine atıp görsel arabiriminiz çalışır hale geliyor.St şuan itibari ile görsel ögeleri güçlendirmek için emwin yazılımına destek veriyor. KEndi gui library leri amatörce işler yapmak için gerekli boşluğu doldurdu denebilir. Yakın zamanda emwin ile görsel arabirim hazırlama üzerine örnekler yayınlanacağını düşünüyorum...

STM32 embedded graphic object/touchscreen library
Murat

Kaanx

Hocam bende bu vıdeoyu izledim aklıma direk FreeRTOS ve Chibi OS lar geldi dedim orada yapıyolar sanırım bunları bulamamıstım siz kullandınız mı böyle birşey ?

muhendisbey

Alıntı yapılan: pisayisi - 28 Mayıs 2013, 12:45:34
St embedded gui library ile gelen örneklerin içinde stm32f4 için hazır şablon yok. Bu library basitce arabirim hazırlamak için ideal. Eski visualbasic editörü gibi bir yapısı var, Resurce editör ile birkaç tane c dodyası üretiyorsunuz ve bu dosyalarışablon projenizin içine atıp görsel arabiriminiz çalışır hale geliyor.St şuan itibari ile görsel ögeleri güçlendirmek için emwin yazılımına destek veriyor. KEndi gui library leri amatörce işler yapmak için gerekli boşluğu doldurdu denebilir. Yakın zamanda emwin ile görsel arabirim hazırlama üzerine örnekler yayınlanacağını düşünüyorum...

STM32 embedded graphic object/touchscreen library

Hocam sanki diğer cihazlarda ör:STM32F4'te de kullanılabilir gibi geliyor. Dediğim gibi "gibi geliyor"

Alternatif, renkli görüntüyü (resmi) koda çevirecek bir araç var mı? Renkli grafik LCD'lere yeni el atıyorum.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

respected


tesladream

Kaanx hocam elinde varsa keil dosyasını atarmısın? farklı resimlerin olduğu.

Kaanx

Hocam en kısa zamanda upload edicem bu aralar yogunum biraz.

tesladream