본문 바로가기

[ST_MICRO]/STM32F43x

STM32F439 LCD EVM - TFT LCD Test

STM32F439 LCD EVM - TFT LCD Test





STM32F429, STM32F439의 가장 큰 장점으로 TFT-LCD 컨트롤러가 내장되어 있어 1024x768 해상도의 TFT-LCD를 별도의 제어기 없이 연결할 수 있다. 물론 큰 LCD를 연결하려면 메모리 때문에 SDRAM을 연결해야 하는 부담이 있다.
여기서 조금 아쉬운점이 있는데 LCD메모리도 포함 시켜서 만들면 훨신더 경쟁력이 있지 않았을까? (adStar의 경우 TFT-LCD 컨트롤러 및 SDRAM이 한칩에 있어 가격이나 사이즈면에서 상당히 편리하다.)

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)




STM32F4 LTDC 핀맵







STM32F439  TFT-LCD 초기화 코드

uint8_t BSP_LCD_Init(void)

    /* LTDC Configuration ----------------------------------------------------*/

    LtdcHandler.Instance = LTDC;

    

    /* Configure horizontal synchronization width */

    LtdcHandler.Init.HorizontalSync = HSYNC;

    /* Configure vertical synchronization height */

    LtdcHandler.Init.VerticalSync = VSYNC;

    /* Configure accumulated horizontal back porch */

    LtdcHandler.Init.AccumulatedHBP = HBP;

    /* Configure accumulated vertical back porch */

    LtdcHandler.Init.AccumulatedVBP = VBP;

    /* Configure accumulated active width */

    LtdcHandler.Init.AccumulatedActiveW = ACTIVE_W-2;

    /* Configure accumulated active height */

    LtdcHandler.Init.AccumulatedActiveH = ACTIVE_H;

    /* Configure total width */

    LtdcHandler.Init.TotalWidth = TOTAL_WIDTH;

    /* Configure total height */

    LtdcHandler.Init.TotalHeigh = TOTAL_HEIGHT;


    

    /* Configure R,G,B component values for LCD background color */

    LtdcHandler.Init.Backcolor.Red= 0;

    LtdcHandler.Init.Backcolor.Blue= 0;

    LtdcHandler.Init.Backcolor.Green= 0;

    

    /* LCD clock configuration */

    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;

    PeriphClkInitStruct.PLLSAI.PLLSAIN = _PLLSAIN_CLK;

    PeriphClkInitStruct.PLLSAI.PLLSAIR = PLLSAIR_DIV;

    PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;

    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); 

    

    /* Polarity */

    LtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL;

    LtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL;

    LtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL;

    LtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC;

    

    MspInit();

    HAL_LTDC_Init(&LtdcHandler); 

    


    /* Initialize the SDRAM */

    BSP_SDRAM_Init();


    /* Initialize the font */

    BSP_LCD_SetFont(&LCD_DEFAULT_FONT);


return LCD_OK;

}  






STM32F439 EVM TFT-LCD커넥터 핀맵






기존 7" TFT-LCD 모듈 커넥터 연결하여 다양한 LCD 테스트 가능하다.










STM32F439 TFT LCD 제어 예제

아래는 간단히 LCD 초기화 하고 LCD에 Text 표시하는 예제이다.


#if _USE_TFTLCD_
    LCD_BackLightInit();  
    
    //LCD초기화
    BSP_LCD_Init();

    /* Layer2 Init */
    BSP_LCD_LayerDefaultInit(1, LCD_FRAME_BUFFER_LAYER1);
    /* Set Foreground Layer */
    BSP_LCD_SelectLayer(1);
    /* Clear the LCD */
    BSP_LCD_Clear(LCD_COLOR_GREEN);  
    BSP_LCD_SetColorKeying(1, LCD_COLOR_RED);
    BSP_LCD_SetLayerVisible(1, DISABLE);

    /* Layer1 Init */
    BSP_LCD_LayerDefaultInit(0, LCD_FRAME_BUFFER_LAYER0);

    // Set Foreground Layer
    BSP_LCD_SelectLayer(0);

    // Enable The LCD 
    BSP_LCD_DisplayOn();

    // Clear the LCD 
    BSP_LCD_Clear(LCD_COLOR_BLUE);
    
    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);


    BSP_LCD_DrawRect(0,0, LCD_WIDTH-1, LCD_HEIGHT-1);
    BSP_LCD_DisplayStringAtLine(0, "STM32F429- EtherCat Test");
#endif


코드 다운로드 하고 테스트 해보면 아래와 같이 TFT-LCD에 출력 되는것을 확인 할수 있다. STM32F439에서 TFT-LCD출력을 위한 기본 셋팅은 구성되었으므로 앞으로 여러가지 테스트 예제를 작성해 가면서 테스트 해보자.





STM32F439 TFT LCD 제어 테스트 예제 동영상

SD Card에 있는 BMP파일을읽어 TFT LCD에 출력하는 동영상