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.編譯,燒錄,驗証

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



附上程式 F429I_LTDC_v00.7z

留言

2024

11-27SPI Flash 操作 (Read/Write/Erase)
11-19Rotary Encoder Switch 旋轉編碼開關
11-14Command Line Interface - CLI via UART
11-14【STM32】USB HID - Volume Control
11-13【STM32】USB Custom HID
11-12【STM32】USB HID Keyboard + Mouse
11-12【STM32】USB HID Keyboard
11-12【STM32】USB HID Mouse
10-15SSD1306 128x64 OLED 【五】Wokwi Animator
09-2432F429IDISCOVERY - - LTDC [3] + FMC (SDRAM) + FatFS
09-2432F429IDISCOVERY - - LTDC [2] + FMC (SDRAM)
09-20STM32 + FatFs + SD card via SPI【三】FatFS指令操作II
09-19STM32 + FatFs + SD card via SPI【二】FatFS指令操作
09-18STM32 + FatFs + SD card via SPI【一】移植FatFS
09-0232F429IDISCOVERY - - LTDC [1]
04-17SSD1306 128x64 OLED 【四】Adafruit / GFX Library
04-17Arduino - Serial Plotter繪圖儀
04-16SSD1306 128x64 OLED 【三】
04-15SSD1306 128x64 OLED 【二】 Datasheet
04-12SSD1306 128x64 OLED 【一】I2C版本
03-20【freeRTOS】vTaskDelay 與 vTaskDelayUntil 的差異
03-19【freeRTOS】API功能列表
03-18【freeRTOS】Day1
03-08MBR和Blank project的差別
03-05刪除註冊檔registry的資料
02-27DFU over Bluetooth Low Energy
02-27nRF Util - 使用手冊
02-26nRF Command Line Tools
02-20建立BootLoader settings
02-19Secure DFU packet (ZIP) build 建立含袐鑰的Zip檔
02-19Secure DFU via BLE
02-19Secure DFU via UART
02-16nRF Util 安裝
01-16nRF52840 ic升級成nRF52840 Dongle的程式

2023

11-21[ SEGGER Embedded Studio ] 新增header files
11-21[ SEGGER Embedded Studio ] 編譯nRF52840時遇到的問題
11-07Arduino Nano ESP32 - Debugging除錯模式
11-03Git快速入手 - 使用Git GUI
10-30Git快速入手 - 使用Git Bash
10-12程式碼高亮顯示 -- google-code-prettify

2022

11-30[EZ-PD] CCG6DF CCG6SF的Host SDK遇到編譯錯誤(一)

2019

05-27[ Eagle PCB ] 合板成品
05-23#CASE_001_USB_TOOL_RL78_G12
05-22[ Eagle PCB ] 初次洗板
05-21[ Eagle PCB ] Panelize 併板
05-20[ Eagle PCB ] 建立自己的Library及元件
05-20[ Eagle PCB ] 添加library及元件
05-20[ Eagle PCB ] Introduce

2018

04-25[ TCP test Tool ] 好用的TCP Server/Client工具
01-16RZ/A1H -[0]- Renesas RZ/A1H YR0K77210S009BE BSP環境架設

2017

12-11EZ USB Suit使用JLink online debug FX3
10-20RL78 -[12]- CS+_CACX_Lab5_LowPower mode
10-16RL78 -[11]- CS+_CACX_Lab4_ADC_溫度感測
10-13RL78 -[10]- CS+_CACX_Lab4_ADC_內部參考電壓
10-13RL78 -[9]- CS+_Lab3_I2C + MPU6050
10-13RL78 -[8]- CS+_Lab2_Uart transmit
10-12RL78 -[7]- Renesas Flash Programmer 獨立燒錄軟體
10-12RL78 -[6]- CS+_雜記
10-12RL78 -[5]- CS+_tracking variables on debug mode
10-12RL78 -[4]- CS+_顯示ROM與RAM的使用size
10-12RL78 -[3]- CS+_Lab1_Led blinking
10-12RL78 -[2]- CS+專案建立
10-12RL78 -[1]- 開發環境介紹
10-06ESP-01 -[0]- 硬體設置
10-06LinkIt 7688 program Renesas RL78/G12 by 1-wire
10-06LinkIt Smart 7688 -[3]- Build the firmware from source codes
10-06LinkIt Smart 7688 -[2]- 使用UART進入bootloader / kernel console
10-06LinkIt Smart 7688 -[1]- 使用SSH連接kernel console
10-06LinkIt Smart 7688 -[0]- 初次使用
07-14LinkIt Smart 7688 -[9]- Using MRAA SPI in Python
07-13LinkIt Smart 7688 -[8]- Using MRAA UART in Python
07-12LinkIt Smart 7688 -[7]- Using MRAA I2C in Python
07-12LinkIt Smart 7688 -[6]- Using MRAA PWM in Python
07-12LinkIt Smart 7688 -[5]- Using MRAA GPIO in Python
07-10LinkIt Smart 7688 -[4]- 雜記
06-29輕乳酪蛋糕 Cotton Cheesecake
06-26VirtualBox 的 Ubuntu與Windows 共用資料夾

2015

04-29偵測USB PnP