钱钱就是我 发表于 2024-1-3 14:39:16

求助!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__);
                }         
      }

}

eric2013 发表于 2024-1-3 15:09:41

这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。

钱钱就是我 发表于 2024-1-3 16:16:00

eric2013 发表于 2024-1-3 15:09
这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。

引脚IO是一致的。我用的是V6RGB的模板

eric2013 发表于 2024-1-4 09:06:21

钱钱就是我 发表于 2024-1-3 16:16
引脚IO是一致的。我用的是V6RGB的模板

那这样的话,跟驱动的关系不大了。

你的裸机显示是正常的吗

钱钱就是我 发表于 2024-1-4 09:44:02

eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。

你的裸机显示是正常的吗

裸机是正常的,但是之前的裸机用的是标准库

钱钱就是我 发表于 2024-1-4 10:37:31

eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。

你的裸机显示是正常的吗

之前移植了emWin5.32到标准库的工程里,颜色是正常的,然后直接用emWin6.x和GUIX的模板(都是hal库)就都是偏蓝的,是库的关系么?

钱钱就是我 发表于 2024-1-5 13:07:30

问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚:lol

eric2013 发表于 2024-1-6 09:52:06

钱钱就是我 发表于 2024-1-5 13:07
问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚
果然是GPIO错误
页: [1]
查看完整版本: 求助!V6_GUIX RGB565例程移植新屏幕颜色偏蓝