hpdell 发表于 2017-3-9 09:34:07

请教下,我的rgb屏,怎么不能够同时开启2层 ??

请教下,我的rgb屏,怎么不能够同时开启2层 ??

如果同时开启2层的话,显示就会出现闪动的麻点或者条纹(当然,显示时是设置某一层显示), 只要同时开启2层,显示就完全乱了,

如果2层显示其中的任意一层(必须把另外一层关闭才行),则完全没有任何问题,

这是怎么个情况啊 ???

zhjb1 发表于 2017-3-9 11:06:30

昨天刚听了STM的GUI的课程,多层需要硬件支持。如果你的图像点数太大了,芯片本身的存储器不够的,需要外扩。记不住了,好像高分辨的1个图就将存储空间塞满了,第二层无处存放的。想想看是这个问题吗?

maiweiqi 发表于 2017-3-9 11:58:59

屏幕闪动厉害的话,可能内存带宽不够,只能开一个来用了

hpdell 发表于 2017-3-9 17:16:18

本帖最后由 hpdell 于 2017-3-9 17:18 编辑

zhjb1 发表于 2017-3-9 11:06
昨天刚听了STM的GUI的课程,多层需要硬件支持。如果你的图像点数太大了,芯片本身的存储器不够的,需要外扩 ...
我是使用外部的sdram 作为显存的,

每个层都分配了4MBYte的存储空间,

lcd的分辨率是 800*1280的,如果同时开启2层的显示就会乱的话,

根据你的分析来判断的话,那估计应该是我外扩的sdram的显存速度不够

或者降低屏幕分辨率 不知道可否解决这个问题呀 ??

我的单片机使用的是 f7xx系列的

hpdell 发表于 2017-3-9 17:20:29

本帖最后由 hpdell 于 2017-3-9 19:48 编辑

maiweiqi 发表于 2017-3-9 11:58
屏幕闪动厉害的话,可能内存带宽不够,只能开一个来用了
同时开2层的话,根本无法正常工作,显示完全乱了,

单独开某一层显示,完全没有任何问题

,单独开一层的话,那透明功能是不是就不能够使用了啊 ???
开启2层的显示效果:



任意单层显示效果如下:












层切换函数:
/*
函数名称:
函数功能:设置使用层
参数说明:_SetLayerUser   0表示使用第一层,1表示使用第二层
*/
void LTDC_LayerSetUser(uint8_t _SetLayerUser)
{
if(_SetLayerUser == 0)
{
    BSP_LCD_SelectLayer(1);
    BSP_LCD_SetLayerVisible(1, DISABLE);

    BSP_LCD_SelectLayer(0);
    BSP_LCD_SetLayerVisible(0, ENABLE);
}
else
{
    BSP_LCD_SelectLayer(0);
    BSP_LCD_SetLayerVisible(0, DISABLE);

    BSP_LCD_SelectLayer(1);
    BSP_LCD_SetLayerVisible(1, ENABLE);
}
}




如果不能够同时显示2层的话,那么设置2层也没有什么意义,到时还是把它设置为一次好了





















zhjb1 发表于 2017-3-9 21:09:15

您的存储单元少了吧。800X1280=1.024MB,如果是24位色,再X3=3MB了,第二层就开不了了。可以减少颜色深度,或减少分辨率。如果将颜色深度减到565=16位色,4MB正好够2层的。试试看

hpdell 发表于 2017-3-9 23:24:05

zhjb1 发表于 2017-3-9 21:09
您的存储单元少了吧。800X1280=1.024MB,如果是24位色,再X3=3MB了,第二层就开不了了。可以减少颜色深度, ...

你好,我的内存分配

第一层分配了4MByte的,800*1280*4= 4096000BYte < 4096MByte
第二层分配了4MByte的,800*1280*4= 4096000BYte < 4096MByte

我总共给 LTDC 分配了 8MByte的存储空间啊,按照上面的存储空间来看的话,应该是足够的啊,
那怎么还是不能够同时显示2层啊 ???

zhjb1 发表于 2017-3-10 06:57:40

hpdell 发表于 2017-3-9 23:24
你好,我的内存分配

第一层分配了4MByte的,800*1280*4= 4096000BYte < 4096MByte


您可以先试试看减少颜色深度,这是最简单的测试方法。不要太较真,想想是吗?测试如果成功了再做下一步讨论处理

hpdell 发表于 2017-3-10 20:19:44

zhjb1 发表于 2017-3-10 06:57
您可以先试试看减少颜色深度,这是最简单的测试方法。不要太较真,想想是吗?测试如果成功了再做下一步讨 ...

你好,请问 设置为 565格式,外部sdram 每层分配 了16MByte,结果还是不行,

开启2层后,选择第一层,那么清贫函数没有反应,

选择第二层,那么清贫函数也还是没有反应,

zhjb1 发表于 2017-3-11 06:27:55

我没有你那样的开发板,针对具体的开发板无法提出更多的建议。我只是听了STM在北京开的GUI课程,和以前玩各种TFT LCD的经验提出的意见。清屏无果,就是清除显存地址区域不对;有些显屏驱动带有一条指令清除屏幕的,好像这款也带,您可以试试这条指令;还有,769i支持一层多个显存区域对应,如果你能正确切换区域,那么切换后或切换前该清除那里就清楚了。很多东西,光靠听是不行的。控制LCD除了初始化之外,最最中国要的就是向显存里面填充东西和控制LCD要显示那块区域,如果这个弄明白了,如何一款LCD都可以玩转了。可以按照上述说的试试吧。
页: [1]
查看完整版本: 请教下,我的rgb屏,怎么不能够同时开启2层 ??