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

请教下,我的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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版