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

TFT LCD 刷屏闪现白条(ILI9341)

[复制链接]
wujique 提问时间: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个回答
GKoSon 回答时间:2018-6-2 21:24:53
我最近也在搞 就是这个芯片 3.5的 没有遇到这个问题 我用正点原子的函数跑的
用字模软件取出数组,送过去,没有体会到RGB

评分

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

查看全部评分

KEY1 回答时间: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

查看全部评分

七哥 回答时间: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

查看全部评分

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

为了验证这个问题,今天找一个焊一个新屏对比测试。
wujique 回答时间: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

查看全部评分

wujique 回答时间:2018-6-28 16:49:28
结论:
厂家给的初始化代码配置电源不正确,更换初始化代码后正常了。
WISH-2004783 回答时间:2019-5-9 09:34:57
兄弟,我用3.2寸TFT屏时,如果把FSMC速度设置太快也会出现你说的问题,你是怎么解决的呀,能否提供点初始化的代码,不胜感激。
wujique 回答时间:2019-5-14 22:39:51
我的回帖有说明问题原因,每个控制器的初始化代码是不一样的。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版