硬汉嵌入式论坛

 找回密码
 立即注册
查看: 383|回复: 7
收起左侧

[ThreadX全家桶] 求助!V6_GUIX RGB565例程移植新屏幕颜色偏蓝

[复制链接]

3

主题

21

回帖

30

积分

新手上路

积分
30
发表于 2024-1-3 14:39:16 | 显示全部楼层 |阅读模式
本帖最后由 钱钱就是我 于 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__);
                }         
        }  

}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-1-3 15:09:41 | 显示全部楼层
这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-3 16:16:00 | 显示全部楼层
eric2013 发表于 2024-1-3 15:09
这个GPIO引脚配置和你的显示屏的一致不,V6的那个是硬件RGB888接口方式的。

引脚IO是一致的。我用的是V6RGB的模板
1704269698748.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-1-4 09:06:21 | 显示全部楼层
钱钱就是我 发表于 2024-1-3 16:16
引脚IO是一致的。我用的是V6RGB的模板

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

你的裸机显示是正常的吗
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 09:44:02 | 显示全部楼层
eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。

你的裸机显示是正常的吗

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

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-4 10:37:31 | 显示全部楼层
eric2013 发表于 2024-1-4 09:06
那这样的话,跟驱动的关系不大了。

你的裸机显示是正常的吗

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

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2024-1-5 13:07:30 | 显示全部楼层
问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2024-1-6 09:52:06 | 显示全部楼层
钱钱就是我 发表于 2024-1-5 13:07
问题找到了,RGB的四个IO复用功能选错了,从AF14改成AF9就好了。手册没看清楚

果然是GPIO错误
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 16:18 , Processed in 0.243326 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表