硬汉嵌入式论坛

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

[ThreadX全家桶] GUIX不能正常显示的问题请教

[复制链接]

13

主题

40

回帖

79

积分

初级会员

积分
79
发表于 2022-5-26 16:28:43 | 显示全部楼层 |阅读模式
在初始化LTDC完成后,通过向显存地址写数据可以正常刷新界面颜色,但是调用GUIx之后,就花屏了,请老师们指点一下,谢谢,部分代码如下:
void MX_LTDC_Init(void)
{
  LTDC_LayerCfgTypeDef pLayerCfg = {0};
  LTDC_LayerCfgTypeDef pLayerCfg1 = {0};

  hltdc.Instance = LTDC;
  hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL;
  hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL;
  hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL;
  hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
  hltdc.Init.HorizontalSync = 3;
  hltdc.Init.VerticalSync = 0;
  hltdc.Init.AccumulatedHBP = 161;
  hltdc.Init.AccumulatedVBP = 17;
  hltdc.Init.AccumulatedActiveW = 1185;
  hltdc.Init.AccumulatedActiveH = 617;
  hltdc.Init.TotalWidth = 1343;
  hltdc.Init.TotalHeigh = 634;
  hltdc.Init.Backcolor.Blue = 0;
  hltdc.Init.Backcolor.Green = 255;
  hltdc.Init.Backcolor.Red = 255;
  if (HAL_LTDC_Init(&hltdc) != HAL_OK)
  {
    Error_Handler();
  }
  pLayerCfg.WindowX0 = 0;
  pLayerCfg.WindowX1 = 1024;
  pLayerCfg.WindowY0 = 0;
  pLayerCfg.WindowY1 = 600;
  pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
  pLayerCfg.Alpha = 255;
  pLayerCfg.Alpha0 = 255;
  pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  pLayerCfg.FBStartAdress = 0xD0000000;
  pLayerCfg.ImageWidth = 1024;
  pLayerCfg.ImageHeight = 600;
  pLayerCfg.Backcolor.Blue = 0;
  pLayerCfg.Backcolor.Green = 255;
  pLayerCfg.Backcolor.Red = 0;
  if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, 0) != HAL_OK)
  {
    Error_Handler();
  }
  pLayerCfg1.WindowX0 = 0;
  pLayerCfg1.WindowX1 = 0;
  pLayerCfg1.WindowY0 = 0;
  pLayerCfg1.WindowY1 = 0;
  pLayerCfg1.Alpha = 0;
  pLayerCfg1.Alpha0 = 0;
  pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA;
  pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA;
  pLayerCfg1.FBStartAdress = 0;
  pLayerCfg1.ImageWidth = 0;
  pLayerCfg1.ImageHeight = 0;
  pLayerCfg1.Backcolor.Blue = 0;
  pLayerCfg1.Backcolor.Green = 0;
  pLayerCfg1.Backcolor.Red = 0;
  if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK)
  {
    Error_Handler();
  }

}


void MainTask(void)
{       
        /*
       触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
           此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
        */
       
        /*初始化配置 */
        gx_initconfig();

        /* 配置显示屏 */
    gx_studio_display_configure(DISPLAY_1, stm32f4_graphics_driver_setup_565rgb,
        LANGUAGE_CHINESE, DISPLAY_1_THEME_1, &root);
       
    /* 创建窗口 */
    gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

        /* 显示根窗口 */
    gx_widget_show(root);

    /* 启动GUIX */
    gx_system_start();
       
        tx_thread_sleep(100);
       
        while(1)
        {
                tx_thread_sleep(20);
        }
}


#include "MainTask.h"
typedef unsigned char uint8_t;


/*
*********************************************************************************************************
*                                                动态内存分配
*********************************************************************************************************
*/
#define           GUI_NUMBYTES     1024*1024*8                         /* 设置动态内存大小 */
#define           Canvas_Memory    0xD0400000                          /* 设置Canvas地址   */
TX_BYTE_POOL  memory_pool;
uint8_t       *MemoryBlock = (uint8_t *)(0xD0000000 + 1024*1024*8); /* 动态内存地址    */


/*
*********************************************************************************************************
*                                                  变量
*********************************************************************************************************
*/
extern GX_STUDIO_DISPLAY_INFO gui_test_display_table[1];


/*
*********************************************************************************************************
*                                               动态内存函数
*********************************************************************************************************
*/
VOID *memory_allocate(ULONG size)
{
    VOID *memptr;

    if (tx_byte_allocate(&memory_pool, &memptr, size, TX_NO_WAIT) == TX_SUCCESS)
    {
        return memptr;
    }
    return NULL;
}

void memory_free(VOID *mem)
{
    tx_byte_release(mem);
}

/*
*********************************************************************************************************
*        函 数 名: gx_initconfig
*        功能说明: GUIX
*        形    参: 无          
*        返 回 值: 无
*********************************************************************************************************
*/
void gx_initconfig(void)
{
         /* 初始化内存池 */
    tx_byte_pool_create(&memory_pool, "MemoryBlock",  MemoryBlock,  GUI_NUMBYTES);
       
        /* 初始化GUIX */
    gx_system_initialize();

    /* 注册动态内存申请和释放函数 */
    gx_system_memory_allocator_set(memory_allocate, memory_free);
       

    gui_test_display_table[0].x_resolution = 600;
    gui_test_display_table[0].y_resolution = 1024;
               

        gui_test_display_table[0].canvas_memory = (GX_COLOR *)Canvas_Memory;
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2022-5-27 01:16:59 | 显示全部楼层
花屏是什么样的,类似Cache问题的花屏问题吗
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-27 08:31:23 | 显示全部楼层
这里面是显示的一张图片,花屏如附件视频所示,感觉是哪里没设置正确

VID_20220527_082223.mp4

13.83 MB, 下载次数: 16

回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-27 09:09:58 | 显示全部楼层
0.jpg 1.jpg 3.jpg 4.jpg 5.jpg 6.jpg gui_test_resources.c (963.48 KB, 下载次数: 0) gui_test_resources.h (2.52 KB, 下载次数: 1) gui_test_specifications.c (26.97 KB, 下载次数: 0) gui_test_specifications.h (5.46 KB, 下载次数: 1)
设置参数如截图所示,修改了部分设置也还是不行,求指点
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-27 09:22:32 | 显示全部楼层
image.png image.png image.png
这三个红框中的地址设置的是否有问题,所以才造成显示花屏?求指点
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-27 10:41:44 | 显示全部楼层
问题已解决,是因为LCD初始化了两次造成的。但是显示的文字有重影且断断续续的,如下图,第一张设GX 软件中的,第二张是实际屏幕显示出来的,求指点
image.png image.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2022-5-28 10:33:23 | 显示全部楼层
ygrong_2008 发表于 2022-5-27 10:41
问题已解决,是因为LCD初始化了两次造成的。但是显示的文字有重影且断断续续的,如下图,第一张设GX 软件中 ...

把你的工程分享到百度云我看下。
回复

使用道具 举报

4

主题

1459

回帖

1471

积分

至尊会员

积分
1471
发表于 2022-5-28 11:13:47 | 显示全部楼层
ygrong_2008 发表于 2022-5-27 10:41
问题已解决,是因为LCD初始化了两次造成的。但是显示的文字有重影且断断续续的,如下图,第一张设GX 软件中 ...

常温下吗?还是高温下?
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-28 20:23:30 | 显示全部楼层
morning_enr6U 发表于 2022-5-28 11:13
常温下吗?还是高温下?

常温
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2022-5-28 20:26:19 | 显示全部楼层
eric2013 发表于 2022-5-28 10:33
把你的工程分享到百度云我看下。

谢谢,问题已解决,是LCD的频率有点高了,把频率降低后就好了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2022-5-29 11:11:53 | 显示全部楼层
ygrong_2008 发表于 2022-5-28 20:26
谢谢,问题已解决,是LCD的频率有点高了,把频率降低后就好了

回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2024-10-24 00:13:23 | 显示全部楼层
eric2013 发表于 2022-5-28 10:33
把你的工程分享到百度云我看下。

请问硬汉哥可以帮我看一下这个仿真工程为什么显示不出来图片吗,在上位机软件中可以正常显示背景,但是在visual studio中仿真则显示不出来
本意是想测试一下写的窗口切换逻辑是否正确,让main_screen 和 second_screen来回切换

链接:https://pan.baidu.com/s/10XMMd-VNxeq6MVqiNDDD0w
提取码:yhw8

上位机中播放的UI

上位机中播放的UI

visual studio中加载出来的UI

visual studio中加载出来的UI
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-10-24 10:03:45 | 显示全部楼层
zorna 发表于 2024-10-24 00:13
请问硬汉哥可以帮我看一下这个仿真工程为什么显示不出来图片吗,在上位机软件中可以正常显示背景,但是在 ...

是不是版本问题,使用最新的GUIX软件包里面的VS模板,然后GUIX Studio也使用当前最新版,看看正常不,这个版本不匹配会有问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 18:48 , Processed in 0.053177 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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