|
本帖最后由 钱钱就是我 于 2024-1-3 14:43 编辑
我是直接用硬汉哥的V6_2550_GUIX Template(RG565) 例子上改的,触摸和占用打印什么的先注释了。然后打算先显示,显示了但是颜色偏蓝是为什么?(现象图下如图

这是我LTDC的配置,SDRAM用的Bank2,用Bank1只会白屏(虽然也是蓝色的)
uint16_t g_LcdHeight = 480; /* 显示屏分辨率-高度 */
uint16_t g_LcdWidth = 800; /* 显示屏分辨率-宽度 */
static void LCD_LL_Init(void)
{
/* 配置LCD相关的GPIO */
{
GPIO_InitTypeDef GPIO_Init_Structure = {0};
/*##-1- Enable peripherals and GPIO Clocks #################################*/
/* 使能LTDC和DMA2D时钟 */
__HAL_RCC_LTDC_CLK_ENABLE();
__HAL_RCC_DMA2D_CLK_ENABLE();
/* 使能GPIO时钟 */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
/* GPIOA 配置 4 11 12 6 3 */
GPIO_Init_Structure.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_11 | GPIO_PIN_12;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOA, &GPIO_Init_Structure);
/* GPIOB 配置 0 1 10 11 8 9*/
GPIO_Init_Structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOB, &GPIO_Init_Structure);
/* GPIOC 配置 6 7*/
GPIO_Init_Structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 ;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOC, &GPIO_Init_Structure);
/* GPIOD 配置 3*/
GPIO_Init_Structure.Pin = GPIO_PIN_3 ;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOD, &GPIO_Init_Structure);
/* GPIOF 配置 10*/
GPIO_Init_Structure.Pin = GPIO_PIN_10 ;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOF, &GPIO_Init_Structure);
/* GPIOG 配置 7 6 10 11 12*/
GPIO_Init_Structure.Pin = GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_NOPULL;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF14_LTDC;
HAL_GPIO_Init(GPIOG, &GPIO_Init_Structure);
/*##-2- LTDC初始化 #############################################################*/
LTDC_LayerCfgTypeDef pLayerCfg = {0};
uint16_t Width, Height, HSYNC_W, HBP, HFP, VSYNC_W, VBP, VFP;
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
Width = 800;
Height = 480;
HSYNC_W = 20;
HBP = 46;
HFP = 210;
VSYNC_W = 10;
VBP = 23;
VFP = 22;
/* LCD 时钟配置 */
/*
PLLSAI_VCO Input = HSE_VALUE / PLL_M = 8M / 8 = 1MHz
PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAI_N = 1 * 205 = 205MHz
PLLLCDCLK = PLLSAI_VCO Output / PLLSAI_R = 205 / 3 = 68.3MHz
LTDC 时钟 = PLLLCDCLK / RCC_PLLSAIDivR = 68.3 / 2 = 34.1MHz
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 205;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 3;
// PeriphClkInitStruct.PLLSAI.PLLSAIQ = 7;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
g_LcdHeight = Height;
g_LcdWidth = Width;
/* 配置信号极性 */
hLTDC.Init.HSPolarity = LTDC_HSPOLARITY_AL; /* HSYNC 低电平有效 */
hLTDC.Init.VSPolarity = LTDC_VSPOLARITY_AL; /* VSYNC 低电平有效 */
hLTDC.Init.DEPolarity = LTDC_DEPOLARITY_AL; /* DE 低电平有效 */
hLTDC.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
/* 时序配置 */
hLTDC.Init.HorizontalSync = (HSYNC_W - 1);
hLTDC.Init.VerticalSync = (VSYNC_W - 1);
hLTDC.Init.AccumulatedHBP = (HSYNC_W + HBP - 1);
hLTDC.Init.AccumulatedVBP = (VSYNC_W + VBP - 1);
hLTDC.Init.AccumulatedActiveH = (Height + VSYNC_W + VBP - 1);
hLTDC.Init.AccumulatedActiveW = (Width + HSYNC_W + HBP - 1);
hLTDC.Init.TotalHeigh = (Height + VSYNC_W + VBP + VFP - 1);
hLTDC.Init.TotalWidth = (Width + HSYNC_W + HBP + HFP - 1);
/* 配置背景层颜色 */
hLTDC.Init.Backcolor.Blue = 0;
hLTDC.Init.Backcolor.Green = 0;
hLTDC.Init.Backcolor.Red = 0;
hLTDC.Instance = LTDC;
/* 开始配置图层 ------------------------------------------------------*/
/* 窗口显示区设置 */
pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = g_LcdWidth;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = g_LcdHeight;
/* 配置颜色格式 */
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
/* 显存地址 */
pLayerCfg.FBStartAdress = FrameBufer;
/* Alpha常数 (255 表示完全不透明) */
pLayerCfg.Alpha = 255;
/* 无背景色 */
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
pLayerCfg.Alpha0 = 0; /* 完全透明 */
/* 配置图层混合因数 */
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
/* 配置行列大小 */
pLayerCfg.ImageWidth = Width;
pLayerCfg.ImageHeight = Height;
/* 配置LTDC */
if (HAL_LTDC_Init(&hLTDC) != HAL_OK)
{
/* 初始化错误 */
Error_Handler(__FILE__, __LINE__);
}
/* 配置图层1 */
if (HAL_LTDC_ConfigLayer(&hLTDC, &pLayerCfg, LTDC_LAYER_1) != HAL_OK)
{
/* 初始化错误 */
Error_Handler(__FILE__, __LINE__);
}
}
}
|
|