前言
此篇文章將講述以 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.編譯,燒錄,驗証
沒有意外就能看到圖形被戴入
附上程式 F429I_LTDC_v00.7z