求助,STM32F429+STemWin,Hellow Word显示两个,不知道问题在哪

丶琪琪 2020-01-30 11:34:08
STM32F429+STemWin,Hellow Word显示两个,字体颜色也不对,帮忙看看。

部分代码如下,参考官方例程STM32Cube\Repository\STM32Cube_FW_F4_V1.23.0\Middlewares\ST\STemWin和原子哥的代码
void main
{
......
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_SetColor(GUI_YELLOW);
GUI_DispString("hellow word\r\n");
GUI_DispString("Hellow\r\n");
....
}

LCDConfig_Lin.c部分代码
#undef LCD_SWAP_XY
#undef LCD_MIRROR_Y

//#define LCD_SWAP_XY 1
//#define LCD_MIRROR_Y 1

#define XSIZE_PHYS 480
#define YSIZE_PHYS 272

#define NUM_BUFFERS 1 // Number of multiple buffers to be used
#define NUM_VSCREENS 1 // Number of virtual screens to be used

#define BK_COLOR GUI_DARKBLUE

#undef GUI_NUM_LAYERS
#define GUI_NUM_LAYERS 1

#define COLOR_CONVERSION_0 GUICC_M8888I
#define DISPLAY_DRIVER_0 GUIDRV_LIN_16


#if (GUI_NUM_LAYERS > 1)
#define COLOR_CONVERSION_1 GUICC_M8888I
#define DISPLAY_DRIVER_1 GUIDRV_LIN_16
#endif

#ifndef XSIZE_PHYS
#error Physical X size of display is not defined!
#endif
#ifndef YSIZE_PHYS
#error Physical Y size of display is not defined!
#endif
#ifndef NUM_VSCREENS
#define NUM_VSCREENS 1
#else
#if (NUM_VSCREENS <= 0)
#error At least one screeen needs to be defined!
#endif
#endif
#if (NUM_VSCREENS > 1) && (NUM_BUFFERS > 1)
#error Virtual screens and multiple buffers are not allowed!
#endif

#define LCD_LAYER0_FRAME_BUFFER 0xC0000000
#define LCD_LAYER1_FRAME_BUFFER 0xC007F800
/**
* @}
*/


/** @defgroup STEMWIN_LIBRARY_Private_Macros
* @{
*/
/* Redirect bulk conversion to DMA2D routines */
#define DEFINEDMA2D_COLORCONVERSION(PFIX, PIXELFORMAT) \
static void Color2IndexBulk_##PFIX##DMA2D(LCD_COLOR * pColor, void * pIndex, U32 NumItems, U8 SizeOfIndex) { \
DMA2D_Color2IndexBulk(pColor, pIndex, NumItems, SizeOfIndex, PIXELFORMAT); \
} \
static void Index2ColorBulk_##PFIX##DMA2D(void * pIndex, LCD_COLOR * pColor, U32 NumItems, U8 SizeOfIndex) { \
DMA2D_Index2ColorBulk(pIndex, pColor, NumItems, SizeOfIndex, PIXELFORMAT); \
}

/**
* @}
*/

static LCD_LayerPropTypedef layer_prop[GUI_NUM_LAYERS];
static LTDC_HandleTypeDef hltdc;

static const LCD_API_COLOR_CONV * apColorConvAPI[] =
{
COLOR_CONVERSION_0,
#if GUI_NUM_LAYERS > 1
COLOR_CONVERSION_1,
#endif
};

static U32 aBufferDMA2D [XSIZE_PHYS * sizeof(U32)];
static U32 aBuffer_FG [XSIZE_PHYS * sizeof(U32)];
static U32 aBuffer_BG [XSIZE_PHYS * sizeof(U32)];


uint32_t ltdc_layer0[XSIZE_PHYS][YSIZE_PHYS] __attribute__((at(LCD_LAYER0_FRAME_BUFFER)));
uint32_t ltdc_layer1[XSIZE_PHYS][YSIZE_PHYS] __attribute__((at(LCD_LAYER1_FRAME_BUFFER)));

/**
* @}
*/

........


static void LCD_LL_Init(void)
{
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 = 0;
hltdc.Init.VerticalSync = 0;
hltdc.Init.AccumulatedHBP = 40;
hltdc.Init.AccumulatedVBP = 8;
hltdc.Init.AccumulatedActiveW = 520;
hltdc.Init.AccumulatedActiveH = 280;
hltdc.Init.TotalWidth = 525;
hltdc.Init.TotalHeigh = 288;
hltdc.Init.Backcolor.Blue = 0;
hltdc.Init.Backcolor.Green = 0;
hltdc.Init.Backcolor.Red = 0;
HAL_LTDC_Init(&hltdc);

//LTDC中断
NVIC_SetPriority(LTDC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 1, 0));
NVIC_EnableIRQ(LTDC_IRQn);
HAL_LTDC_ProgramLineEvent(&hltdc, 0);//开启LTDC的行中断

LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA2D);

//NVIC_SetPriority(DMA2D_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 1, 0));
//NVIC_EnableIRQ(DMA2D_IRQn);

LL_DMA2D_SetMode(DMA2D, LL_DMA2D_MODE_M2M_BLEND);
LL_DMA2D_SetOutputColorMode(DMA2D, LL_DMA2D_OUTPUT_MODE_ARGB8888);
LL_DMA2D_SetLineOffset(DMA2D, 0);
LL_DMA2D_FGND_SetColorMode(DMA2D, LL_DMA2D_INPUT_MODE_ARGB8888);
LL_DMA2D_FGND_SetAlphaMode(DMA2D, LL_DMA2D_ALPHA_MODE_NO_MODIF);
LL_DMA2D_FGND_SetAlpha(DMA2D, 0);
LL_DMA2D_FGND_SetLineOffset(DMA2D, 0);
LL_DMA2D_BGND_SetColorMode(DMA2D, LL_DMA2D_INPUT_MODE_ARGB8888);
LL_DMA2D_BGND_SetAlphaMode(DMA2D, LL_DMA2D_ALPHA_MODE_NO_MODIF);
LL_DMA2D_BGND_SetAlpha(DMA2D, 0);
LL_DMA2D_BGND_SetLineOffset(DMA2D, 0);
}

void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
{
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_LTDC);

LTDC_GpioInt();
LCD_BL_GpioInit();
LCD_BL_ON();
}

static void LCD_LL_LayerInit(uint32_t LayerIndex)
{
LTDC_LayerCfgTypeDef pLayerCfg = { 0 };

pLayerCfg.WindowX0 = 0;
pLayerCfg.WindowX1 = layer_prop[LayerIndex].xSize;
pLayerCfg.WindowY0 = 0;
pLayerCfg.WindowY1 = layer_prop[LayerIndex].ySize;
pLayerCfg.PixelFormat = LCD_LL_GetPixelformat(LayerIndex);
pLayerCfg.Alpha = 255;
pLayerCfg.Alpha0 = 0;
pLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
pLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
pLayerCfg.FBStartAdress = layer_prop[LayerIndex].address;
pLayerCfg.ImageWidth = XSIZE_PHYS;
pLayerCfg.ImageHeight = YSIZE_PHYS;
pLayerCfg.Backcolor.Blue = 0;
pLayerCfg.Backcolor.Green = 0;
pLayerCfg.Backcolor.Red = 0;
HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg, LayerIndex);
if (LCD_GetBitsPerPixelEx(LayerIndex) <= 8)
{
HAL_LTDC_EnableCLUT(&hltdc, LayerIndex);
}
}

#ifdef __cplusplus
extern "C" {
#endif // __clpusplus
//LTDC中断服务函数
void LTDC_IRQHandler(void)
{
HAL_LTDC_IRQHandler(&hltdc);
}
#ifdef __cplusplus
}
#endif // __clpusplus

//LTDC行事件回调函数
//LTDC_Handler:LTDC句柄
void HAL_LTDC_LineEvenCallback(LTDC_HandleTypeDef* hltdc)
{
uint32_t Addr;
uint32_t layer = 0;

for (layer = 0; layer < GUI_NUM_LAYERS; layer++)
{
if (layer_prop[layer].pending_buffer >= 0)
{
Addr = layer_prop[layer].address + layer_prop[layer].xSize * layer_prop[layer].ySize * layer_prop[layer].pending_buffer * layer_prop[layer].BytesPerPixel;//计算显示的帧地址
HAL_LTDC_SetAddress(hltdc, Addr, layer);//设置地址
__HAL_LTDC_RELOAD_CONFIG(hltdc);
GUI_MULTIBUF_ConfirmEx(layer, layer_prop[layer].pending_buffer);
layer_prop[layer].pending_buffer = -1;
}
}
HAL_LTDC_ProgramLineEvent(hltdc, 0);
}

........
...全文
240 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
丶琪琪 2020-01-31
  • 打赏
  • 举报
回复
参考官方的例程STM32Cube\Repository\STM32Cube_FW_F4_V1.23.0\Projects\STM324x9I_EVAL\Applications\STemWin\STemWin_SampleDemo\STemWin
丶琪琪 2020-01-31
  • 打赏
  • 举报
回复
对比官方例程STM32Cube\Repository\STM32Cube_FW_F4_V1.23.0\Projects\STM324x9I_EVAL\Demonstrations\STemWin\MB1063\Gui\Target
添加如图所示代码解决。


平时多积累,以后还可以作参考

27,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧