STM32F407 Discovery Resim Basma Ornegi ( TFT LCD ye )

Başlatan M_B, 21 Temmuz 2012, 19:09:30

OrkUn®

ILI9325 sürücüsü herşeyi yapabiliyorum ama resim basamıyorum acaba st'nin driver'larındanmı kaynaklı diye düşünmeden edemiyorum.. SSD1289 ile bbenzer heralde ama datasheet'i tam incelemeden bişey sölemek dogru olmaz kafayı yemeden cözmem lazım.. :o

Burak B

Resim basmadan önce tek renk basmayı dene. Bence resim konusunda büyük ihtimalle pointer ve API kullanım hatası yapıyorsun. Yoksa sırf beyaz renk elde etmezdin. Yani sadece beyaz renk elde etmen anormal bir durum bile denebilir. Bir sebepten dolayı data olarak sürekli 0xFFFFFFh gidiyor olmalı. Datasheet i incele ve hazır libraryden bağımsız olarak veri yollamaya çalış.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

pisayisi

Alıntı yapılan: OrkUn® - 24 Eylül 2012, 17:15:42
ILI9325 sürücüsü herşeyi yapabiliyorum ama resim basamıyorum acaba st'nin driver'larındanmı kaynaklı diye düşünmeden edemiyorum.. SSD1289 ile bbenzer heralde ama datasheet'i tam incelemeden bişey sölemek dogru olmaz kafayı yemeden cözmem lazım.. :o

ili93xx serisi ile ssd1289 komut ve adres itibari ile birbirinden çok farklılar tek ortak nokta 16 bit paralel interface olması...
Murat

XX_CİHAN_XX

@pisayisi,

http://www.waveshare.net/Left_Column/LCD_Module.htm

Bu siteden kullandığın lcd nin programını indirebilirsin.
Adamlar tüm lcd kontrolcüleri için üniversal bir program yazmışlar.
Programın içinde tüm çipler tanımlı. Kendi lcd nin çipini seçip kullanıyorsun.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

muhittin_kaplan


pisayisi

#50
Evet yaa aşağıdaki lcd tipleri için tanımlama yaparak istenilen lcd tipine göre driver kullanılabilir. Baya faydalı olcak başka arkadaşlara da, teşekkürler @XX_CİHAN_XX

/* Private variables ---------------------------------------------------------*/
static uint8_t LCD_Code;

/* Private define ------------------------------------------------------------*/
#define  ILI9320    0  /* 0x9320 */
#define  ILI9325    1  /* 0x9325 */
#define  ILI9328    2  /* 0x9328 */
#define  ILI9331    3  /* 0x9331 */
#define  SSD1298    4  /* 0x8999 */
#define  SSD1289    5  /* 0x8989 */
#define  ST7781     6  /* 0x7783 */
#define  LGDP4531   7  /* 0x4531 */
#define  SPFD5408B  8  /* 0x5408 */
#define  R61505U    9  /* 0x1505 0x0505 */	   
#define  HX8347D    10 /* 0x0047 */
#define  HX8347A    11 /* 0x0047 */	
#define  LGDP4535   12 /* 0x4535 */  
#define  SSD2119    13 /* 3.5 LCD 0x9919 */

Murat

OrkUn®

#51
@ByteMaster ekrana LCD driver'ı ile veya normal sadece stdperiph sürücüleri ile herhangi bisey yazdırıp cizdirebiliyorum. Bende farklı bi durum söz konusu resmi gösteriyorum başlangıç pixel koordinatlarını ve resmin boyutlarını gönderip bekliyorum resmin uzantısını bmp olarak yazarsam beyaz ekran çıkmadan harfault_handler kesmesine dallanıyor bmp uzantısını silersem beyaz ekran olusuyor. simdi cözmem gereken hardfault handler'da iken register'ların değerleri ve ne anlam ifade ettikleri Joseph Yiu Cortex-M3'ler için bahsetmis M4 içinde bi farklılık olmasa gerek.. Debug modunda cogu register'ı görebiliyoruz zaten ama BFAR, CFSR, HFSR, DFSR, AFSR ve SCB->SHCSR register'larınada bakmak gerekiyo anladığım kadarıyla bu yüzden asm C karışık bi kod yazdım ama hata veriyor ; (Acaba Stack Yüzünden Olabilirmi???)


__asm void HardFault_Handler(void)
{
  TST LR, #4
  ITE EQ
  MRSEQ R0, MSP
  MRSNE R0, PSP
  B hard_fault_handler_c
}

void hard_fault_handler_c (unsigned int * hardfault_args)
{
   unsigned int stacked_r0;
   unsigned int stacked_r1;
   unsigned int stacked_r2;
   unsigned int stacked_r3;
   unsigned int stacked_r12;
   unsigned int stacked_lr;
   unsigned int stacked_pc;
   unsigned int stacked_psr;

   stacked_r0 = ((unsigned long) hardfault_args[0]);
   stacked_r1 = ((unsigned long) hardfault_args[1]);
   stacked_r2 = ((unsigned long) hardfault_args[2]);
   stacked_r3 = ((unsigned long) hardfault_args[3]);

   stacked_r12 = ((unsigned long) hardfault_args[4]);
   stacked_lr = ((unsigned long) hardfault_args[5]);
   stacked_pc = ((unsigned long) hardfault_args[6]);
   stacked_psr = ((unsigned long) hardfault_args[7]);

   printf("\n\n[Hard Fault Handler - All Numbers In Hex]\n");
   printf("R0 = %x\n", stacked_r0);
   printf("R1 = %x\n", stacked_r1);
   printf("R2 = %x\n", stacked_r2);
   printf("R3 = %x\n", stacked_r3);
   printf("R12 = %x\n", stacked_r12);
   printf("LR [R14] = %x subroutine call return address\n", stacked_lr);
   printf("PC [R15] = %x programm counter\n", stacked_pc);
   printf("PSR = %x\n", stacked_psr);
   printf("BFAR = %x\n", (*((volatile unsigned long *)(0XE000ED38))));
   printf("CFSR = %x\n", (*((volatile unsigned long *)(0XE000ED28))));
   printf("HFSR = %x\n", (*((volatile unsigned long *)(0XE000ED2C))));
   printf("DFSR = %x\n", (*((volatile unsigned long *)(0XE000ED30))));
   printf("AFSR = %x\n", (*((volatile unsigned long *)(0XE000ED3C))));
   printf("SCB_SHCSR = %x\n", SCB->SHCSR);

   while(1)
   ;
}


[..\stm32f4xx_it.c(60): error: A1516E: Bad symbol 'hard_fault_handler_c', not defined or external]  hatasını alıyorum ama hard_fault_handler_c fonksiyonunu external olarak stm32f4xx_it.h dosyasında tanımladım bu hatayı neden alabilirim?? Simdiden teşekkürler. Kolay gelsin..