32F429IDISCOVERY - - LTDC [1]


前言

此篇文章將講述以 STM32CubeMX 產生的standard code來點亮32F429IDISCOVERY上的2.4" QVGA(240x320) TFT LCD

著重於實際操作上;不會闡述太多結構原理


操作環境

  • Board:32F429IDISCOVERY
  • LCD:2.4" QVGA(240x320) FRD240C48003-B
  • IDE:STM32CubeIDE
  • Code:STM32CubeMX
  • Software Packs:STM32Cube_FW_F4_V1.28.0
  • Picture:st_logo1.bmp


操作步驟

1.STM32CubeMX安裝Pack

32F429IDISCOVERY用的MCU是STM32F429ZI,所以要先下戴STM32CubeF4

方法1,點擊Software Packs > Manage Software Packs > 勾選STM32F4 Series > Install


方法2,先在ST的網站下戴,然後 點擊Software Packs > Manage Software Packs > 點擊左下角的 Install Software Pack from local folder

安裝後的Pack位於 C:\Users\user_name\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0


2.建立Project

STM32F429ZI-DISC1,Start Project,並同意將I/O功能以預設值設定


LCD控制的功能LCD-TFT Display Controller(LTDC)設定Display Type為 RGB565,LCD尺寸240x320


3.設定LTDC timing

根據LCD spec得知 DOTCLK最小必須為 100ns,即頻率須 等於或小於 10Mhz

在 Clock Configuration 看到最下方 LCD-TFT clock(MHz)值為 25Mhz,即 40ns ,遠小於DOTCLK的最小值

所以須要把值改為 10Mhz (或更小),然後就可以 Generate Code


4.添加檔案

LCD FRD240C48003-B在一開始須要透過SPI對其driver ili9341 的暫存器做設定,

STM32CubeF4提供了相對應的檔案,把下列檔案加入project裡

  • ..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\BSP\Components\ili9341\ili9341.c
  • ..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\BSP\Components\ili9341\ili9341.h
  • ..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\BSP\STM32F429I-Discovery\stm32f429i_discovery.c
  • ..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\BSP\STM32F429I-Discovery\stm32f429i_discovery.h
  • ..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Drivers\BSP\Components\Common\lcd.h

另外還需要一份240x320 RGB565的圖檔(使用st_logo1.bmp (最上面 紅綠藍白圖)),

STM32CubeF4裡也準備了執行檔可以把BMP轉成C陣列

..\STM32Cube\Repository\STM32Cube_FW_F4_V1.28.0\Middlewares\ST\STemWin\Software\BmpCvtST.exe

選擇 High color[565]

轉出檔案後把st_logo1.c改為header檔,array宣告改為 const uint16_t ST_LOGO_1[76800] =


5.程式修改

main.c

#include "ili9341.h"
#include "st_logo1.h"

int main(void)
{
  /* USER CODE BEGIN 2 */

  ili9341_Init();

  /* USER CODE END 2 */
}

static void MX_LTDC_Init(void)
{
  /* USER CODE BEGIN LTDC_Init 2 */
  pLayerCfg.FBStartAdress = (uint32_t)&ST_LOGO_1;//戴入圖檔
  if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE END LTDC_Init 2 */
}

6.編譯,燒錄,驗証

沒有意外就能看到圖形被戴入

留言