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

TFT LCD 刷屏闪现白条(ILI9341)

[复制链接]
huangxuejia-292 提问时间:2018-6-2 17:36 /
背景:
使用2.8寸LCD做图片功能,驱动是9341。
在做速度优化时,发现一个怪异问题:
如果每次计算一个像素后,就发送到屏幕,没有问题。
代码如下,这个是发送一行数据的代码,外部还有一个for循环控制多少行:
  1. for(i=0; i < xlen; i++)
  2.                     {
  3.                             /*3个字节1个像素,要进行对U16的转换
  4.                                                 rgb565
  5.                                                 #define BLUE                  0x001F  
  6.                                                 #define GREEN                  0x07E0
  7.                                                 #define RED                    0xF800
  8.                                         */
  9.                                         b = pdata[k++];
  10.                                         g = pdata[k++];
  11.                                         r = pdata[k++];
  12.                                        
  13.                                         r = ((r<<8)&0xf800);
  14.                                         g = ((g<<3)&0x07e0);
  15.                                         b = ((b>>3)&0x001f);
  16.                                         *(pcc+i) = r+g+b;

  17.                                         /*得到一个像素就发送到LCD*/
  18.                                         *LcdData = *(pcc+i);
  19.                     }
复制代码


如果改为整理好一行数据后再一次发送,LCD就闪现白条,只是刷新过程出现,一屏刷新完成后,图片是正常的。
刷屏是一行一行刷,白条就出现在列方向上,出现位置随机,可能出现多条。
代码如下:
  1. for(i=0; i < xlen; i++)
  2.                     {
  3.                             /*3个字节1个像素,要进行对U16的转换
  4.                                                 rgb565
  5.                                                 #define BLUE                  0x001F  
  6.                                                 #define GREEN                  0x07E0
  7.                                                 #define RED                    0xF800
  8.                                         */
  9.                                         b = pdata[k++];
  10.                                         g = pdata[k++];
  11.                                         r = pdata[k++];
  12.                                        
  13.                                         r = ((r<<8)&0xf800);
  14.                                         g = ((g<<3)&0x07e0);
  15.                                         b = ((b>>3)&0x001f);
  16.                                         *(pcc+i) = r+g+b;

  17.                                        
  18.                     }
  19.                                 /*得到一行后像素就发送到LCD*/
  20.                                 for(i=0; i<xlen; i++)
  21.                                 {
  22.                                         *LcdData = *(pcc+i);       
  23.                                 }
复制代码
但是这个程序在9325的屏幕上就没闪现白条。

不知道各位大侠是否有这方面的经验。
1 屏幕硬件有问题?
2 9341初始化配置不对?
3 兼容性?

百思不得其姐

收藏 评论11 发布时间:2018-6-2 17:36

举报

11个回答
与龙共舞 回答时间:2018-6-2 21:24:53
我最近也在搞 就是这个芯片 3.5的 没有遇到这个问题 我用正点原子的函数跑的
用字模软件取出数组,送过去,没有体会到RGB

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

50031185 回答时间:2018-6-2 22:02:32
   for(i=0; i<xlen; i++)
   {
          *LcdData = *(pcc+i);      
   }

你的这个发送 估计是太快了,
你原来的发送每发一行 跳出去后会有一些别的命令执行,起到了延时的作用,
另外你看看, 发送协议里 有没有发送后的总线状态复位,或者是 检测标志

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-6-2 23:41:42
看看是不是连接问题

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

toofree 回答时间:2018-6-2 23:55:35
分析结果,如楼上板凳楼层。

单像素发没有问题,一组发有问题,那基本就是发的太快了。
你的*LcdData在哪定义的?是一个地址指针,还是函数指针?
建议好好看TFT的时序,并且与你的作对比。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

五哥1 回答时间:2018-6-3 01:46:54
9341  2.4没有问题,有条件换个屏吗测试下,排除硬件

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

huangxuejia-292 回答时间:2018-6-3 09:28:23
感谢大家的意见。
一开始我也以为是速度太快了,但是,白条只是闪现啊,最终的图片显示是对的,并没有白条。那么说明数据是对的,那是不是说明时序也是对的?那么速度并没有太快。仅仅是快速的刷屏影响了硬件。

为了验证这个问题,今天找一个焊一个新屏对比测试。
huangxuejia-292 回答时间:2018-6-3 15:05:22
一开始我也觉得可能是发太快的问题,但是,
白条只是闪现,最后刷完屏幕,图片是正常的,
那就说明数据发送没有问题啊,进一步说,时序应该也没有问题吧?
屏幕是FSMC接口的,就是一个外部地址操作,没有设么状态查询。

找一个新屏幕对比一下先。
zhjb1 回答时间:2018-6-4 09:15:13
huangxuejia-292 发表于 2018-6-3 15:05
一开始我也觉得可能是发太快的问题,但是,
白条只是闪现,最后刷完屏幕,图片是正常的,
那就说明数据发送 ...

也常完各种屏。如果是自己设计的LCDPCB,是否设计上存在干扰,这种干扰分全屏刷时可能出现麻点,刷完后正常,也有出现行或列的。别人的PCB自己焊接的,问题不好说,如果压紧LCD和PCB问题消失,有虚焊的可能。软件上的问题少有出现这类现象。总觉得还是硬件问题。多种方法试试吧。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

huangxuejia-292 回答时间:2018-6-28 16:49:28
结论:
厂家给的初始化代码配置电源不正确,更换初始化代码后正常了。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版