|
在初始化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;
}
|
|