求助!V6_GUIX RGB565例程移植新屏幕颜色偏蓝
本帖最后由 钱钱就是我 于 2024-1-3 14:43 编辑我是直接用硬汉哥的V6_2550_GUIX Template(RG565) 例子上改的,触摸和占用打印什么的先注释了。然后打算先显示,显示了但是颜色偏蓝是为什么?(现象图下如图
https://www.armbbs.cn/forum.php?mod=image&aid=90871&size=300x300&key=0db59aaa7d4b6ea2&nocache=yes&type=fixnone
这是我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 110 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__);
}
}
}
这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。 eric2013 发表于 2024-1-3 15:09
这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。
引脚IO是一致的。我用的是V6RGB的模板 钱钱就是我 发表于 2024-1-3 16:16
引脚IO是一致的。我用的是V6RGB的模板
那这样的话,跟驱动的关系不大了。
你的裸机显示是正常的吗 eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。
你的裸机显示是正常的吗
裸机是正常的,但是之前的裸机用的是标准库 eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。
你的裸机显示是正常的吗
之前移植了emWin5.32到标准库的工程里,颜色是正常的,然后直接用emWin6.x和GUIX的模板(都是hal库)就都是偏蓝的,是库的关系么? 问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚:lol 钱钱就是我 发表于 2024-1-5 13:07
问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚
果然是GPIO错误
页:
[1]