多语言展示
当前在线:615今日阅读:126今日分享:42

ILI9341控制的37pin-2.4寸TFTLCD液晶屏读不到ID

本文记录寡人天昏地暗调试液晶一天:为啥读不到9341ID?温故而知新,反思走了哪些弯路。
工具/原料

IAR

方法/步骤
1

之前从网上淘了个DSO138示波器,上面有个贼大的2.4寸液晶屏看着很是诱人,37针的,PFC排线上印着Z240IT002字样,如下图;网上一搜能搜到一些资料,说是ILI9341驱动,某些商家还给了引脚定义,可以说良心大大滴好。

2

早就想把我那1.8寸的弱鸡lcd换了。今天板子到了迫不及待的焊接完毕,开始debug。这是我的硬件连接,没想太多什么FSMC啥的,直接用STM32F103V8T6的PE0~PE15连LCD的DB0~DB15,另外选了几个GPIO作CS,RS啥的。

3

网上关于这种液晶屏的例程也蛮多的,五花八门,我随便找了个例程搞到我的程序里,改了半天终于编译通过。但是下载进单片机没有显示,太正常不过了。调试了一下,发送读ID指令0xD3收到的几个字节都是0,测了所有引脚的信号都正常。这就怪了,又仔细梳理了时序:复位引脚给个负脉冲然后保持高,其他控制线都按照8080的时序来,还不放心又和各大论坛给的程序对比了一下,除了发现有些程序先送并口数据,再给WR低->高电平之外(正常先给WR低电平->送数据->拉高WR),其他没什么差别。可是程序就是读不出9341.

方法/步骤2
1

我对我的焊接向来很有信心的啊,不会脱焊和短路啊,而且也测了,各大引脚该低的时候都低了,该高也高了啊!那肯定不是硬件问题,是软件问题!        会不会电平边沿之间没加延时呢?又开始改程序、编译、下载、debug。还是不行。        又上网找其他人的例程,抄进来,编译修改debug->编译修改debug...仍然不见起色。        又又上网脑补8080时序,STM32驱动TFT,ILI9341读不出ID,ILI9341的引脚连接,知道37pin的比40pin少了IM0~IM2 ,3个引脚,又从手册上查到,这3个引脚是用于设置通信模式的(SPI、8位并行、16位并行等等见下图);还查了FSMC怎么驱动的LCD云云...别个讲得是风生水起,头头是道,放在我的程序上就是脑壳晕肚皮痛,脚趾盖盖裂条缝。实在不知道为啥,心态逐渐发散。。。甚至开始怀疑LCD坏了。

2

突然想起经常检测元件好坏的法子,换到淘来的DSO138示波器上肯定能用撒,示波器测一下它的时序,这已经是终极办法了;就是干!又把LCD拆焊下来,装回原装产品。开机果然能显示。心态总算有点回收。

3

开着我的固伟一边把探头按在测试点,一边按复位开关,一边按触发,费劲是有点,总算把各大引脚的时序理出来了,和网上的和我的基本一致,关键是16位数据,细看下表,一排是DB15~DB0的信号电平,竖着是根据CS信号得到的数据的序号,就是说第二排的1100是第一个CS低区间单片机送到LCD的16位并行信号,第3排的是第二个CS低时送到LCD的信号,测了前面8个,奇怪的是低8位全是0,假如只看高8位,依次传送的是0xCF,0x00,0xC1,0x30,0xED,0x67,0x03,0x12。

方法/步骤3
1

回头再看例程中传送的数据如下图所示,正好是刚才测出来的!从此便是惊天地泣鬼神,我在哪儿我是谁。其他的不说,就按测出来的这种时序写程序一定能驱动起来。

2

现在来看,原来LCD只认DB15~DB8的数据。之前抄袭的程序都按照16位传送,送到低DB0~DB7去了。例如:按照我抄袭的程序0xCF送到LCD,其DB15~DB0是0x00CF,DB15~DB8=0了,难怪没反应呢。现在再改起程序来就得心应手了 ,找到问题了,只需要把要传送的数据左移8位即可,第一次可能正确的实验嘛,严格按照测得的时序来写:开始复位引脚拉低17ms(测出来的)后抬高,抬高163ms后开始读写操作。保证其他引脚时序正常,下载进去我久违的93终于出现了(下图)。cheers!

3

但这又回到以前的疑问,这块屏到底是16位还是8位?再翻这块屏的资料,前面已经查过了,IM0、IM1、IM2这些引脚是用来设置ILI9341通信方式的,现在手里这块屏是37pin的,就是下图中这块,没IM引脚。那咋知道8位还是16位?上网搜37pin的LCD也查不到。这就是最坑的地方,要是我早知道8位的就不用瞎改半天而徒劳无功了。

方法/步骤4

正在我高兴得把玩着我的LCD的时候,我隐约感觉:IM引脚可能在PFC上通过电阻设置好了,毕竟PFC上有几个0603和0402的贴片。见下图,大部分是电容,只有右上角有个0402电阻,旁边还有个0402空位没焊元件。巧合的是焊上的这个电阻名叫R8,没焊那个叫R16。嗯...只有两个电阻为啥不叫R1,R2呢?偏要叫8和16。难道没点意思?

推荐信息