你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
hpdell 提问时间:2017-3-9 09:34 /
悬赏2ST金币未解决
请教下,我的rgb屏,怎么不能够同时开启2层 ??

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

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

这是怎么个情况啊 ???

收藏 1 评论9 发布时间:2017-3-9 09:34

举报

9个回答
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层的显示效果:
ltdc-22.png


任意单层显示效果如下:

1.png

2.png

3.png

4.png

5.png


层切换函数:
/*
函数名称:
函数功能:设置使用层
参数说明:_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都可以玩转了。可以按照上述说的试试吧。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版