首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

STM32F429 LTDC 驅動配置圖解:時鐘、時序、層與窗口設置

     編輯:關於C++

概述

基於 STM32F429 Discovery 開發板 (LCD: 240×320, ILI9341),圖解 LTDC (LCD-TFT 控制器) 核心配置參數,幫助快速掌握時鐘樹、信號時序、層疊加、窗口設置及幀緩衝區配置。

一、LTDC 時鐘配置

時鐘樹路徑: HSE → PLLSAI → PLLSAIDivR → LTDC_CLK

典型配置:HSE=8MHz, PLLSAI_N=192, PLLSAI_R=3 → PLLSAI_VCO=192MHz → PLLLCDCLK=64MHz → LTDC_CLK=8MHz (DivR=8)。

RCC_PLLSAIConfig(192, 7, 3); // N=192, Q=7, R=3
RCC_LTDCCLKDivConfig(RCC_PLLSAIDivR_Div8);
RCC_PLLSAICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLSAIRDY) == RESET);
RCC時鐘樹

二、LCD 信號時序參數

嚴格對應 LCD 數據手冊。關鍵參數:

  • HSYNC/VSYNC 極性:通常低電平有效 (AL)
  • DE (Data Enable) 極性:低電平有效 (AL)
  • Pixel Clock 極性:輸入像素時鐘 (IPC)
  • 時序寬度:HSW, VSW, HBP, VBP, ActiveW, ActiveH, TotalW, TotalH
LTDC_InitStruct.LTDC_HSPolarity = LTDC_HSPolarity_AL;
LTDC_InitStruct.LTDC_VSPolarity = LTDC_VSPolarity_AL;
LTDC_InitStruct.LTDC_DEPolarity = LTDC_DEPolarity_AL;
LTDC_InitStruct.LTDC_PCPolarity = LTDC_PCPolarity_IPC;

LTDC_InitStruct.LTDC_HorizontalSync = 9;       // HSW
LTDC_InitStruct.LTDC_VerticalSync = 1;         // VSW
LTDC_InitStruct.LTDC_AccumulatedHBP = 29;      // HSW+HBP
LTDC_InitStruct.LTDC_AccumulatedVBP = 3;       // VSW+VBP
LTDC_InitStruct.LTDC_AccumulatedActiveW = 269; // HSW+HBP+ActiveW
LTDC_InitStruct.LTDC_AccumulatedActiveH = 323; // VSW+VBP+ActiveH
LTDC_InitStruct.LTDC_TotalWidth = 279;         // TotalW
LTDC_InitStruct.LTDC_TotalHeigh = 327;         // TotalH
信號時序圖

三、層 (Layer) 架構與窗口設置

三層疊加順序 (底→頂):Background → Layer1 → Layer2。Background 僅支持純色填充。

每層可啟用窗口:窗口內顯示幀緩衝區內容,窗口外填充默認顏色。

窗口坐標計算:

  • HorizontalStart = HSW + HBP = 30
  • HorizontalStop = Start + Width - 1 = 30 + 240 - 1 = 269
  • VerticalStart = VSW + VBP = 4
  • VerticalStop = Start + Height - 1 = 4 + 320 - 1 = 323
LTDC_Layer_InitStruct.LTDC_HorizontalStart = 30;
LTDC_Layer_InitStruct.LTDC_HorizontalStop = 269;
LTDC_Layer_InitStruct.LTDC_VerticalStart = 4;
LTDC_Layer_InitStruct.LTDC_VerticalStop = 323;
層疊加順序 窗口概念 窗口坐標映射

四、幀緩衝區參數配置

針對 Layer 窗口區域:

  • CFBStartAdress: 幀緩衝區起始地址
  • CFBLineLength: 窗口寬度 × 每像素字節數 + 3 (如 RGB565: 240×2+3=483)
  • CFBPitch: 換行字節增量 = 圖像全寬 × 每像素字節數 (240×2=480)
  • CFBLineNumber: 窗口高度 (320)
LTDC_Layer_InitStruct.LTDC_CFBStartAdress = (u32)FrameBuffer;
LTDC_Layer_InitStruct.LTDC_CFBLineLength = (240 * 2) + 3;
LTDC_Layer_InitStruct.LTDC_CFBPitch = 240 * 2;
LTDC_Layer_InitStruct.LTDC_CFBLineNumber = 320;
幀緩衝區結構 窗口顯示區域 最終顯示效果

五、關鍵提醒

  1. 確保幀緩衝區圖像尺寸與窗口設置一致 (LineLength/LineNumber 對應 HStop-HStart, VStop-VStart)。
  2. 配置完所有層寄存器後,必須調用 `LTDC_ReloadConfig(LTDC_IMReload)` 或 `LTDC_ReloadConfig(LTDC_VBReload)` 使設置生效,單調用 `LTDC_LayerCmd` 不夠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved