본문 바로가기

[STM32F746G-DISCO] LTDC 사용하기

by rudals.kim 2024. 7. 9. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


STM32F746NG의 LCD-TFT Display Controller (LTDC)는 아래와 같은 특징을 가지고 있습니다.
• 24-bit RGB Parallel Pixel Output; 8 bits-per-pixel (RGB888)
• 2 display layers with dedicated FIFO (64x32-bit)
• Color Look-Up Table (CLUT) up to 256 color (256x24-bit) per layer
• Supports up to XGA (1024x768) resolution
• Programmable timings for different display panels
• Programmable Background color
• Programmable polarity for HSync, VSync and Data Enable
• Up to 8 Input color formats selectable per layer
– ARGB8888
– RGB888
– RGB565
– ARGB1555
– ARGB4444
– L8 (8-bit Luminance or CLUT)
– AL44 (4-bit alpha + 4-bit luminance)
– AL88 (8-bit alpha + 8-bit luminance)
• Pseudo-random dithering output for low bits per channel
– Dither width 2-bits for Red, Green, Blue
• Flexible blending between two layers using alpha value (per pixel or constant)
• Color Keying (transparency color)
• Programmable Window position and size
• Supports thin film transistor (TFT) color displays
• AHB master interface with burst of 16 words
• Up to 4 programmable interrupt event

아래는 LTDC 블록 다이어그램인데 2개의 LAYER가 Blending 되어 LCD 인터페이스를 통해 TFT-LCD 패널로 출력되는 구조입니다.

STM32F746G-DISCO 보드에서 사용되는 LCD는 RK043FN48H-CT672B 모델로 Color display, 4.3-inch LCD-TFT (resolution: 480x272), capacitive touch가 지원됩니다.
아래는 데이터시트에서 발췌한 LCD 스펙입니다.

드라이버용 IC는 OTA5180A를 사용합니다.
아래는 OTA5180A 데이터시트에서 찾은 LTDC의 설정에 필요한 LCD 타이밍 관련 내용입니다.

STM32CubeIDE에서 새 프로젝트를 생성 후 핀 초기화 후 DMA2D/FMC/I2C3/LTDC/RCC/SYS/USART1 부분만 설정하였습니다.

프로젝트를 생성 후 DMA2D/I2C3/RCC/SYS/USART1만 configuration을 설정하고 나머지는 설정하지 않았습니다

DMA2D는 Memory to Memory, ARGB8888로 세팅하면 됩니다.

앞의 SDRAM 테스트와 마찬가지로 여기서 설정하는 FMC/LTDC 파라미터들은 사용되지 않으며 대신 BSP의 stm32746g_discovery_sdram.c, stm32746g_discovery_lcd.c에 있는 초기화 함수가 사용됩니다.

위의 파일을 추가하면 관련된 파일들이 추가가 필요한데 아래 프로젝트 트리를 참고하여 펌웨어 소스에서 프로젝트로 복사한 후에 빌드시 에러가 발생되지 않도록 관련 패스를 프로젝트 속성에 추가 설정해 줍니다.

테스트에 사용될 이미지를 헤더 파일로 변환하기 위해 아래 프로그램을 사용하여 ARGB8888 코드로 변환합니다.
(다운로드는 https://lcd-image-converter.riuson.com/en/about/ 여기서 받으시면 됩니다.)

ARGB8888로 변환된 헤더 파일을 프로젝트에 추가 후 아래 코드를 main 함수에 붙여 넣습니다.

/* USER CODE BEGIN 2 */
//SDRAM 초기화 및 LCD 타이밍 설정을 합니다.
BSP_LCD_Init();

//LCD layer 설정 (LTDC_PIXEL_FORMAT_ARGB8888 포맷으로 설정 및 FBStartAdress를 SDRAM으로 설정)
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);

//Active layer 설정
BSP_LCD_SelectLayer(0);

//ARGB888로 변경된 이미지를 SDRAM1의 주소에(0xC0000000) 씁니다. 
BSP_SDRAM_WriteData(LCD_FB_START_ADDRESS, (uint32_t*)logo, 130560);

//LCD_DISP_PIN/LCD_BL_CTRL_PIN을 enable하여 LCD를 켭니다.
BSP_LCD_DisplayOn();
/* USER CODE END 2 */


빌드 후 실행해 보면 변환된 이미지 코드가 LCD에 정상적으로 디스플레이됩니다.

반응형

댓글