OpenEdv-开源电子网

 找回密码
 立即注册
查看: 3643|回复: 3

移植LittleVGL跑例程花屏了

[复制链接]

5

主题

15

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-12-23
在线时间
8 小时
发表于 2020-9-26 18:20:22 | 显示全部楼层 |阅读模式
5金钱
有大佬帮忙看是问题出现在哪里嘛?情况是这个样子,我用cubemx生成的代码,然后移植完LCD驱动和触摸屏驱动代码后,可以正常刷屏和画画,LCD和触摸屏的驱动代码是微雪写的。原子的代码我嫌太多了。
屏幕是RGB4.3 800*480的
照个PDF移植完例程代码就出现了这样的情况,可以看到输入键盘的竖杠是正常闪烁的。我点击屏幕,也有界面刷新,但是还是花屏
[图片]
问题应该是出在显示这一部分
有一部分移植的代码有一部分不太一样
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
        uint16_t color =0;
        color = (color_p->ch.red<<11)|(color_p->ch.green<<5)|(color_p->ch.blue);
       
                Paint_ClearWindows(area->x1,area->y1,area->x2,area->y2,color);
    /* IMPORTANT!!!
     * Inform the graphics library that you are ready with the flushing*/
    lv_disp_flush_ready(disp_drv);
}

5988bc0e261bad4bc0d2fcd6c401512.jpg

最佳答案

查看完整内容[请看2#楼]

调试成功了,是我移植微雪的代码中没有那个DMA2D刷屏的代码 后来自己复制了正点原子的这个代码以后就可以了。 void LTDC_Color_Fill(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, uint16_t* Color) { uint16_t offline = 0; uint32_t addr = 0; uint32_t timeout=0; uint32_t psx,psy,pex,pey; //以LCD面板为基准的坐标系,不随横竖屏变化而变化 psx=Xstart;psy=Ystart; pex=Xend;pey=Yend; offl ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

15

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-12-23
在线时间
8 小时
 楼主| 发表于 2020-9-26 18:20:23 | 显示全部楼层
F涛T 发表于 2020-10-6 16:50
我不知道你是什么情况,我的也出现过花屏,解决方法是只使用第一层(BACKGROUND_LAYER)
第二层失能!   我是 ...

调试成功了,是我移植微雪的代码中没有那个DMA2D刷屏的代码 后来自己复制了正点原子的这个代码以后就可以了。
void LTDC_Color_Fill(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, uint16_t* Color)
{

        uint16_t offline = 0;
        uint32_t addr = 0;
        uint32_t timeout=0;
        uint32_t psx,psy,pex,pey;        //以LCD面板为基准的坐标系,不随横竖屏变化而变化

        psx=Xstart;psy=Ystart;
        pex=Xend;pey=Yend;
       
        offline=LCD_WIDTH-(pex-psx+1);//
        addr=((uint32_t)0xC0000000+2*(LCD_WIDTH*psy+psx));
        __HAL_RCC_DMA2D_CLK_ENABLE();        //使能DM2D时钟
        DMA2D->CR&=~(DMA2D_CR_START);        //先停止DMA2D
        DMA2D->CR=DMA2D_M2M;                        //存储器到存储器模式
        DMA2D->FGPFCCR=0x02;        //设置颜色格式
        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;                                //清除传输完成标志         
}
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-9-12
在线时间
4 小时
发表于 2020-10-6 16:50:03 | 显示全部楼层
我不知道你是什么情况,我的也出现过花屏,解决方法是只使用第一层(BACKGROUND_LAYER)
第二层失能!   我是用野火的F429标准库+LittleVGL
回复

使用道具 举报

5

主题

15

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-12-23
在线时间
8 小时
 楼主| 发表于 2020-10-11 17:24:49 | 显示全部楼层
这个代码实现以后 ,再static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
这个函数中调用就可以了。
回复

使用道具 举报

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

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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