基於 STM32F429 Discovery 開發板 (LCD: 240×320, ILI9341),圖解 LTDC (LCD-TFT 控制器) 核心配置參數,幫助快速掌握時鐘樹、信號時序、層疊加、窗口設置及幀緩衝區配置。
時鐘樹路徑: 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);
嚴格對應 LCD 數據手冊。關鍵參數:
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
三層疊加順序 (底→頂):Background → Layer1 → Layer2。Background 僅支持純色填充。
每層可啟用窗口:窗口內顯示幀緩衝區內容,窗口外填充默認顏色。
窗口坐標計算:
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 窗口區域:
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;