闲来无事逛某一个宝,赫然发现同尺寸的TFT小屏竟然比单色点阵屏还便宜,顿时萌发了尝试一下的念头,以前需要用到彩屏的时候通常都是选用现成的串口屏,使用串口收发下数据就搞定用户界面了,但近年来芯片张价潮波及到了几乎所有电子行业,原来选型时一百多的屏现在要近四百了,当然材料成本没涨那么多,奸商跟风涨价罢了。根据现有手头项目产品要求选定了一款2.4''彩屏,驱动ILI9341分辨率320*240,典型的烂大街规格不愁断货,立刻下单!不过考虑到通常TFT驱动对MCU的需求还是比较高的,如果套用现成方案例程搞个STM32(现在是奢侈品了)做驱动到也四平八稳,但是成本就不忍直视了,补充一下F1系列只有100脚以上的带FSMC接口,所以价格肯定会很感人!再说本来就是为了省钱才干的这事,咱必须不忘初心对吧。    用高射炮打蚊子不算本事,用弹弓打飞机才是水平,立刻着手查资料算时序,我就不信51搞不定TFT(是指基本流畅播放全屏动画,而不是慢吞吞刷出几个字来),一算才发现这玩意要求还挺高,平时常用的中颖系列主频最多20冒头,这速度来刷屏怕是要看着图片一条线往下跑了,虽然有些STM32开发板例程也是这个水平但咱自己对觉悟还是有要求的!^_^
      搞到这里有点头痛,想着不行就换MCU吧,无意间忽然想到电机控制MCU不是对速度要求挺高的嘛,于是就发现了这头怪兽— SH79F3213。32KB的FLASH、1.5KB的RAM、关键是有16KB的程序RAM,只要把前16K的CODE拷贝到里面就能以84M的主频的跑程序,芯片其它外围也挺丰富但我暂时用不到就不去管它了,没有硬件支持下刷屏幕MIPS才是王道!
      芯片选定开始电路方案设计,彩色图片的数据量对51来说非常可观的,一幅全屏的RGB565数据就是153KB,与用单色屏习惯把字库和小图片防在CODE区不同,这种应用必须外扩存储器了。你没猜错,我又选了烂大街的W25Q系列,便宜才是王道嘛,手头有现成的W25Q16先顶上用吧。这里要吐槽一下MCU硬件SPI口,最快只能8分频,都什么年代了还这么慢,现在SPI口的FLASH都支持100M以上了。好在内核跑得快,我用软件模拟还不行嘛,最终软件模拟的SPI口做到20个指令周期取一字节并放到总线,同样时间你硬件SPI三位还没有传完,在此替中颖汗颜一下。
      言归正传,  选P0、P4口做16位数据总线,因为这俩口排列规整方便布线,P2口给W25Q用(实际只用了6个PIN,为啥这样用可以想想),留了一个串口做图象文件下载和显示控制,其他控制IO就随便就近分配了。正好某配有免费打样券,PCB图画好就去做了。

image.png
PCB
板子回来焊接器件没啥好说的,参照卖家的例程做个驱动初始化,自己写了画点和字库显示文字的程序,文字显示很快是预料中,因为前景、背景色是相对固定两色刷就完了,有些卖家例程以单色刷屏速度吹嘘就更是糊弄人民群众了,这个总线数据都不用变拼命刷WR线就行了。
image.png
显示屏
重点到了!其实搞过TFT的(用开发板移植一下例程在我看来不能算搞过)都知道,刷图象速度的瓶颈是在取数据而不在刷总线,即使你用STM32,用上了DMA、FSMC限制你速度的依然是SPI总线上的存储器,前面提到了我用20个指令周期取到一字节数据并把它放到总线上,这样16位总线就需要40周期,再加上8080口的控制和循环指令,整屏刷下来平均51-52周期/像素,换算成刷新率大约21FPS,这个速度基本可以满足一般的工业产品显示需要了。当然最终产品还会有些中断程序的干扰,但做到18FPS以上应该没有任何难度。

image.png

屏幕亮了就好办,字符显示一切正常,但显示图片又出问题了,屏幕是花的!首先就怀疑自己写的PC端图片处理程序和BIN文件合并、拆分程序的问题,可检查了半天没问题啊,用示波器一看FLASH芯片只有一个脚在出数据可我用的是4I/O模式,难道芯片QE=0?(JV版本的应该出厂QE=1),找来几片同次买的芯片上编程器读状态字节,果然有部分QE=0的,甚至还有几片被烧了加密位,看来是又遇见奸商了,说是全新原装但就算是用拆机货也要正规点吧,好歹恢复到出厂状态算是拆机货的良心和底线了吧!也怪自己贪便宜,省钱办大事才是硬道理!
修改过QE状态后4I/O数据可以源源不断地输出了,按即定思路修改程序,一切顺利达到了42FPS刷新率,接下来继续优化刷屏循环,一条条指令一个个周期的抠,最终达到了71FPS的水平,连我自己也有些意外,当然此时MCU除了刷屏基本干不了其它大事了,下面是实测FLASH的片选引脚波形

image.png
上图中一个低电平周期刷一帧图象时间大约是14mS,每秒10帧图象,也就是每幅图象后有八十多毫秒可以做其它任何事,当然快速的即时性中断任务也可以随时执行,包括在刷屏期间对刷屏也基本没影响。这也验证了速度就是王道,什么同步也不用,刷屏期间中断也没事,只要你够快对显示就没有肉眼可见的影响。这次的动态图视频就不发了,大家也不想看广告对吧^_^