
以前我们用 51 单片机控制 TFTLCD(TFT 液晶屏)时,使用的是 IO 口模拟80 接口时序。这次我们来学习如何使用 STM32F1 的 FSMC(灵活的静态存储控制器)接口控制 TFTLCD 显示。TFTLCD 可以显示 16 位色真彩图片。本章要实现的功能是:在 TFTLCD 上显示 ASCII 字符和汉字,同时 D1 指示灯闪烁,提示系统正常运行。学习本章可以参考《STM32F10x 中文参考手册》-19 灵活的静态存储控制器(FSMC)章节,特别是寄存器介绍部分。 ' y) ~0 Y0 J- Q H n0 z0 T TFTLCD 简介 TFT-LCD 是薄膜晶体管液晶显示器英文 thin film transistor-liquid crystal display字头的缩写。TFT液晶为每个像素都设有一个薄膜晶体管 (TFT) ,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以 TFT液晶的色彩更真,因此 TFT-LCD 也被叫做真彩液晶显示器。 常用的 TFT 液晶屏接口有很多种,8 位、 9 位、 16 位、 18 位都有,这 里的位数表示的是彩屏数据线的数量。常用的通信模式主要有 6800 模式和 8080模式,对于 TFT 彩屏通常都使用 8080 并口(简称 80 并口)模式。 如果大家接触过 LCD1602 或者 LCD12864 等,那么就会发现 8080 模式的读写时序其实跟 LCD1602 或者 LCD12864 的读写时序是差不多的。8080 接口有 5 条基本的控制线和多条数据线,数据线的数量主要看液晶屏使用的是几位模式,有 8 根、 9 根、 16 根、18 根四种类型。它们的功能如下: 6 I( }! [: P5 l" p8 n W3 W; c, ] ![]() 接下来我们来看一下 8080 接口模式的时序,如下图: ![]() 从上图我们就可以很清晰的看得出液晶屏的读写时序: ①:在 WR 跳变为低电平之后,液晶屏开始读取总线上面的数据。如果使用 IO 口模拟写入的时候,可以先在总线上面写入数据,然后在跳变 WR,以保证当读取的时候,总线上面的数据是稳定的。 ②:在 RD 跳变为低电平之后,液晶屏放置数据到总线上面。 像以前我们使用 51单片机就是通过单片机的 IO 口模拟 8080时序进行TFT彩屏控制,但是对于我们 STM32F1 就不需要这样模拟了,我们 STM32F1 自带了FSMC接口,这个后面我们会介绍到。 下面我们来介绍下 TFTLCD模块,我们公司推出的 TFTLCD 模块有很多种,按照屏幕大小的不同可分为 2.0、2.4、2.8、3.0、3.2、3.5、3.6、4.3、4.5、7寸等,不同尺寸的彩屏对应的分辨率可能不同,比如说 3.5 寸的彩屏分辨率为320*480(长*高),4.5 寸的为 480*854,当然这个具体要看对应彩屏的数据手册,彩屏数据手册在光盘的 “彩屏数据手册” 。按照 TFT 彩屏驱动芯片的不同可分为海信HX83xx、ILI93xx、R615xx、LG45xx、NT355 等等,你手上的彩屏驱动芯片具体是哪一种,需要看下彩屏板表面左上角型号,通常我们都会将彩屏的驱动芯片型号放在TFTLCD模块的左上角。我们的 TFTLCD 模块都自带触摸功能, 可用来做输入控制。 本文我们就以 3.0 寸的 TFTLCD 模块为例来介绍(其他尺寸的彩屏和驱动芯片使用方法类似),该模块驱动芯片型号是 R61509V3,分辨率为 240*400,接口为 16位的 80 并口,自带触摸功能。该模块的外观图如下图所示: ![]() 该模块原理图如下图所示: ![]() ![]() TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接,从图 38.1.2 可以看出,此 TFTLCD 模块采用 16 位的并口方式与外部连接,之所以不采用 8 位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用 8 位数据线,就会比 16 位方式慢一倍以上,我们当然希望速度越快越好,所以选择 16 位的接口,当然不同 TFTLCD 数据位数不一样,如果彩屏是 8 位的同样也是接在 16位的对应高 8 位或者低 8位上,接口使用 16 位是方便兼容其他彩屏。上图还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,在后面的章节会有详细的介绍。该模块的 80 并口有如下一些信号线: CS:TFTLCD 片选信号。 WR:向 TFTLCD 写入数据控制。 RD:从 TFTLCD 读取数据控制。 RS:命令/数据选择( 0,读写命令;1,读写数据)。 DB[15:0]:16 位双向数据线。 RST:TFTLCD 复位。 80并口的通信时序前面已经介绍,这里需要说明的是,TFTLCD模块的 RST信号线是直接接到 STM32F1 的复位脚上,并不由软件控制,这样可以节省一个IO 口。所以要控制 TFTLCD 模块显示,总共需要 20 个 IO 口(除触摸功能管脚)。 知道了模块的管脚功能及通信时序,接下来我们就来介绍下如何让液晶模块显示。通常按照以下几步即可实现 TFT 液晶显示: (1)设置 STM32F1 与 TFTLCD 模块相连接的 IO要让 TFTLCD 模块显示,首先得初始化 TFTLCD 模块与 STM32F1 相连的 IO口, 以便控制TFTLCD。这里我们用使用的是 STM32F1的FSMC,FSMC 将在下面向大家详细介绍。 (2)初始化 TFTLCD 模块(写入一系列设置值) 初始化 IO 口,接着就是对 TFTLCD 进行配置,首先就是要复位下LCD,由于模块的复位引脚是接在 STM32F1复位上的,所以直接按下开发板复位键即可,然后就是初始化序列,即向LCD控制器写入一系列的设置值(比如RGB格式、LCD显示方向、伽马校准等),这部分代码一般 LCD 厂商会提供,我们直接使用这些初始化序列即可,无需深入研究。关于这些设置值可以在你所使用的彩屏模块驱动芯片数据手册内查找到,只不过这些数据手册全是英文的,其实也不是很难,我们用到的只是几个设置值而已,不认识的可以百度翻译下。初始化完成之后,LCD 就可以正常使用了。 (3)将要显示的内容写到 TFTLCD 模块内 这一步需要按照:设置坐标→写 GRAM 指令→写 GRAM 来实现,但是这个步骤,只是一个点的处理,如果我们想要显示字符或数字,就必须要多次使用这个步骤,从而达到显示字符或数字的目的,一般我们会设计一个函数来封装这些过程(实现字符或数字的显示),之后只需调用该函数,就可以实现字符或数字的显示了。 这一部分内容等到我们后面编写程序的时候大家就可以看到, 其实还是比较简单的。接下来我们就来揭开 STM32F1 的 FSMC 的神秘面纱。 + E3 n1 Y: a9 @5 n; O! V) y |
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南
适用于STM32微控制器的ΣΔ数字接口入门