硬汉嵌入式论坛

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

[LTDC] LVGL_LTDC_RGB显示问题

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 5 天前 | 显示全部楼层 |阅读模式
求助大佬,求助,求助
我移植LVGL9.3,但是显示不正常,有些显示混乱,附件Bug视频的

看了cache配置,也不行,即使关闭cache配置为strong order 而且void ltdc_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t *color)
{
    uint32_t psx, psy, pex, pey;   /* 以LCD面板为基准的坐标系,不随横竖屏变化而变化 */
    uint32_t timeout = 0;
    uint16_t offline;
    uint32_t addr;
  
    /* 坐标系转换 */
    if (lcdltdc.dir)               /* 横屏 */
    {
        psx = sx;
        psy = sy;
        pex = ex;
        pey = ey;
    }
    else                          /* 竖屏 */
    {
        psx = sy;
        psy = lcdltdc.pheight - ex - 1;
        pex = ey;
        pey = lcdltdc.pheight - sx - 1;
    }
        SCB_CleanInvalidateDCache();

    offline = lcdltdc.pwidth - (pex - psx + 1);
    addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx));

    __HAL_RCC_DMA2D_CLK_ENABLE();                             /* 使能DM2D时钟 */

    DMA2D->CR &= ~(DMA2D_CR_START);                           /* 先停止DMA2D */
    DMA2D->CR = DMA2D_M2M;                                    /* 存储器到存储器模式 */
    DMA2D->FGPFCCR = LTDC_PIXFORMAT;                          /* 设置颜色格式 */
    DMA2D->FGOR = 0;                                          /* 前景层行偏移为0 */
    DMA2D->OOR = offline;                                     /* 设置行偏移 */

    DMA2D->FGMAR = (uint32_t)color;                           /* 源地址 */
    DMA2D->OMAR = addr;                                       /* 输出存储器地址 */
    DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16);   /* 设定行数寄存器 */
    DMA2D->CR |= DMA2D_CR_START;                              /* 启动DMA2D */

    while((DMA2D->ISR & (DMA2D_FLAG_TC)) == 0)                /* 等待传输完成 */
    {
        timeout++;
        if (timeout > 0X1FFFFF)break;                         /* 超时退出 */
    }
    DMA2D->IFCR |= DMA2D_FLAG_TC;                             /* 清除传输完成标志 */
        SCB_CleanInvalidateDCache();
        //SCB_InvalidateDCache();
}    还是有问题   困了好久了,实在不知道为啥了

lvgl_Bug.zip

4.14 MB, 下载次数: 0

回复

使用道具 举报

4

主题

146

回帖

158

积分

初级会员

积分
158
发表于 4 天前 | 显示全部楼层
直接上lvgl 9.4吧,使用ltdc双缓冲(SDRAM配置为透写即可),不要用DMA2D(DMA2D有问题)。直接可用。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 4 天前 | 显示全部楼层
turnip 发表于 2025-11-18 09:33
直接上lvgl 9.4吧,使用ltdc双缓冲(SDRAM配置为透写即可),不要用DMA2D(DMA2D有问题)。直接可用。

就是lvgl显示的双缓冲数组 直接使用ltdc的针缓存吗?但是lvgl刷新绘图那个函数怎么改呢,直接注释不需要了?大佬,有工程参考参考吗
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 4 天前 | 显示全部楼层
AnFuLai#stm32 发表于 2025-11-18 12:36
就是lvgl显示的双缓冲数组 直接使用ltdc的针缓存吗?但是lvgl刷新绘图那个函数怎么改呢,直接注释不需要 ...

我在lvgl官网找到了一个这个直接模式例子,我试试
回复

使用道具 举报

4

主题

146

回帖

158

积分

初级会员

积分
158
发表于 4 天前 | 显示全部楼层
AnFuLai#stm32 发表于 2025-11-18 15:47
我在lvgl官网找到了一个这个直接模式例子,我试试

就直接按照例子就可以用,啥都不用配置。我这边测试DMA2D有问题,提交bug了。
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 3 天前 | 显示全部楼层
turnip 发表于 2025-11-18 17:49
就直接按照例子就可以用,啥都不用配置。我这边测试DMA2D有问题,提交bug了。

   发现一个简单方法,不使用外部SRDRAM作为lvgl缓存,直接用内部SRAM
   网上说什么这个16位SDRAM带宽不够(之前看过硬汉哥一个帖子说 LTDC时钟和SDRAM竞争带宽,理不清这些之间的联系,我就以为只影响速度呢,就一直更改mp lltd,lvgl重新移植,没想到这个会导致花屏幕),不太理解怎末推导的,但是用内部的SRAM加上DMA2D就不花瓶了

       后面,尝试一下您说的 直接使用双缓冲LTDC 不用DMA2d方法
       还有,那个,您说的DMA2DBug是什么,是画面撕裂吗?他官方的有一个Demo https://github.com/lvgl/lv_port_riverdi_70-stm32h7  这个里说就是SDRAM 不够快(8MB external (32 bit access),32带宽也不够?),他用的DMA2D 加内部RAM  说没有做垂直同步,有时候会有撕裂

回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 3 天前 | 显示全部楼层
turnip 发表于 2025-11-18 17:49
就直接按照例子就可以用,啥都不用配置。我这边测试DMA2D有问题,提交bug了。

直接使用LTDC的针缓存,参考历程  if (lv_display_flush_is_last(disp_drv))
  {
    SCB_CleanInvalidateDCache();
    // wait for VSYNC to avoid tearing
    while (!(LTDC->CDSR & LTDC_CDSR_VSYNCS));
    // swap framebuffers (NOTE: LVGL will swap the buffers in the background, so here we can set the LCD framebuffer to the current LVGL buffer, which has been just completed)
    HAL_LTDC_SetAddress(&hltdc, (uint32_t)(lv_display_get_buf_active(disp_drv)->data), 0);
  }
  lv_display_flush_ready(disp_drv);这样切换的,有没有画面撕裂好像看不太出来



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 03:42 , Processed in 0.042877 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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