Skocz do zawartości

STM32F769i-DISCO uruchomienie LCD


virtualny

Pomocna odpowiedź

Zestaw STM32F769i-DISCO przedstawia się następująco:

01.thumb.jpg.65808add936744073807cb0cadd9dd7e.jpg

02.thumb.jpg.45fcf041b3c4937c9d57c5e57f3be7ce.jpg

03.thumb.jpg.7039cc1aabd9f5970a5255988862ebbb.jpg

 

Z danych technicznych posiada on:

128 Mbit SDRAM (mapowane od 0xC0000000)

512 Mbit QSPI flash

4 calowy LCD 800x480, pojemnościowy dotyk

2 MB internal FLASH i 532 KB wewnętrznego RAM, procka można kręcić do bodaj 216 MHZ

 

Wyświetlacz jest identyczny, jak w zestawie 469i, czyli na jedną ramkę bufora obrazu w trybie ARGB8888 potrzeba 1500KB RAMU. Idąc tropem zestawu 469i, niewiele się napracowałem, żeby dobić się do frame bufora. Z przykładów do zestawu użyłem LCD_PicturesFromSDCard następnie w funkcji main() użyłem niemal identycznego kodu, jak w zestawie 469i, co wystarczyło do wyrysowania kolorowej flagi na ekranie:

	BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_BACKGROUND, 255);
	BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_FOREGROUND, 0);

#define FRAME_ADDRESS 0xC0000000

	LTDC_Layer1->CFBAR  = FRAME_ADDRESS ; // set frame buffor address to 0xC0000000
	LTDC->SRCR = LTDC_SRCR_VBR; // or LTDC_SRCR_IMR for immediatelly change

	uint32_t* pFBaddr ;
	pFBaddr = (uint32_t *) FRAME_ADDRESS; // 0xC00000000

	for(uint32_t i=0; i< (1500*1024/8); i++){
		pFBaddr[i] = LCD_COLOR_RED; // fill SDRAM layer buffor at 0xC0000000 as red color
		pFBaddr[i+192000] = LCD_COLOR_BLUE; // and second half fill as blue color
	}

Raptem 10 linii kodu i sprawa załatwiona. Znów BSP odwaliło 99,9% roboty.

 

Funkcja main() zajmuje niewiele linii więcej od powyższego kodu:

int main(void)
{
	MPU_Config();
	CPU_CACHE_Enable();
	HAL_Init();
	SystemClock_Config();
	BSP_LED_Init(LED1);

	/*##-1- Configure LCD ######################################################*/
	LCD_Config();

	BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_BACKGROUND, 255);
	BSP_LCD_SetTransparency(LTDC_ACTIVE_LAYER_FOREGROUND, 0);

#define FRAME_ADDRESS 0xC0000000

	LTDC_Layer1->CFBAR  = FRAME_ADDRESS ; // set frame buffor address to 0xC0000000
	LTDC->SRCR = LTDC_SRCR_VBR; // or LTDC_SRCR_IMR for immediatelly change

	uint32_t* pFBaddr ;
	pFBaddr = (uint32_t *) FRAME_ADDRESS; // 0xC00000000

	for(uint32_t i=0; i< (1500*1024/8); i++){
		pFBaddr[i] = LCD_COLOR_RED; // fill SDRAM layer buffor at 0xC0000000 as red color
		pFBaddr[i+192000] = LCD_COLOR_BLUE; // and second half fill as blue color
	}
	/* Main infinite loop */
	while(1){}
}

 

Skompilowany program zajmuje poniżej 30KB:

IDE.thumb.jpg.75f3ced24e7974fdb0f9a0f59d1699b7.jpg

Efekt działania programu:

04.thumb.jpg.a281042917c015a4945ca347038f2ec3.jpg

 

W załączeniu źródła LCD_PicturesFromSDCard.zip

 

Tym sposobem rozpracowany został kolejny zestaw z LCD.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.