STM32学习笔记---TFT-LCD

一、常见显示器介绍

1、显示器分类

        ~~~~~~~        显示器属于计算机的 I/O 设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具

常见显示器有三类:

  • CRT显示器
  • LCD液晶显示器
  • LED点阵显示器
1.1、CRT显示器

        ~~~~~~~        CRT显示器:CRT显示器是靠电子束激发屏幕内表面的荧光粉来显示图像的,由于荧光粉被点亮后很快会熄灭,所以电子枪必须循环地不断激发这些点。
STM32学习笔记---TFT-LCD_第1张图片

1.2、LCD液晶显示器

        ~~~~~~~        LCD显示器:液晶显示器,简称 LCD(Liquid Crystal Display),相对于上一代 CRT显示器,LCD 显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点,因而它成为了现在的主流电子显示设备,其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。
STM32学习笔记---TFT-LCD_第2张图片
液晶显示器的显示结构:
        ~~~~~~~        液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分子排列却和固体晶体一样非常规则,因此取名液晶。如果给液晶施加电场,会改变它的分子排列,从而改变光线的传播方向,配合偏振光片,它就具有控制光线透过率的作用,再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少
        ~~~~~~~        利用这种原理,做出可控红、绿、蓝光输出强度的显示结构,把三种显示结构组成一个显示单位,通过控制红绿蓝的强度,可以使该单位混合输出不同的色彩,这样的一个显示单位被称为像素。
STM32学习笔记---TFT-LCD_第3张图片
注意: 液晶本身是不发光的,所以需要有一个背光灯提供光源

1.3、LED点阵显示器

        ~~~~~~~        LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯,通过控制红绿蓝颜色的强度进行混色,实现全彩颜色输出,多个像素点构成一个屏幕。由于每个像素点都是LED灯自发光的,所以在户外白天也显示得非常清晰,但由于LED灯体积较大,导致屏幕的像素密度低,所以它一般只适合用于广场上的巨型显示器。相对来说,单色的LED点阵显示器应用得更广泛,如公交车上的信息展示牌、店广告牌等。
STM32学习笔记---TFT-LCD_第4张图片

1.4、OLED显示器:

        ~~~~~~~        新一代的OLED显示器与LED点阵彩色显示器的原理类似,但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode),所以像素密度比普通LED点阵显示器高得多
OLED显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。待到生产工艺更加成熟时,必将取代现在液晶显示器的地位。
STM32学习笔记---TFT-LCD_第5张图片

2、显示器的基本参数

  • 像素
    像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即前面讲解液晶原理中提到的一个显示单元。

  • 分辨率
    一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点,每一列有480个像素点,也可理解为有800列,480行。

  • 色彩深度
    色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bit)来表示。如单色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2种颜色),用1个数据位就可以表示像素点的所有状态,所以它的色彩深度为1bit,其它常见的显示屏色深为16bit、24bit。
    STM32学习笔记---TFT-LCD_第6张图片

  • 显示器尺寸
    显示器的大小一般以英寸表示,如5英寸、21英寸、24英寸等,这个长度是指屏幕对角线的长度, 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸

  • 显存
    液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液晶屏,一般会使用 SRAM 或 SDRAM 性质的存储器,而这些专门用于存储显示数据的存储器,则被称为显存。显存一般至少要能存储液晶屏的一帧显示数据

    如分辨率为 800x480 的 液 晶 屏 使 用 RGB888 格 式 显 示 , 它 的 一 帧 显 示 数 据 大 小 为 :3x800x480=1152000 字 节 ;若 使 用 RGB565 格 式 显 示 , 一 帧 显 示 数 据 大 小 为 :2x800x480=768000 字节。

    一般来说,外置的液晶控制器会自带显存,而像 STM32F429等集成液晶控制器的芯片可使用内部 SRAM或外扩 SDRAM用于显存空间

3、TFT-LCD控制框图

        ~~~~~~~        STM32F429 系列的芯片不需要额外的液晶控制器,也就是说它把专用液晶控制器的功能集成到STM32F429 芯片内部了,可以理解为电脑的 CPU集成显卡。而 STM32F407 系列的芯片由于没有集成液晶控制器到芯片内部,所以它只能驱动自带控制器的屏幕,可以理解为电脑的外置显卡。
STM32学习笔记---TFT-LCD_第7张图片

二、TFT-LCD控制原理

1、TFT-LCD结构

完整的显示屏由液晶显示面板、电容触摸面板以及 PCB底板构成

  • 液晶显示面板
    用于显示图像,文字的彩色显示设备
  • 触摸面板
    触摸面板带有触摸控制芯片,该芯片处理触摸信号并通过引出的信号线与外部器件通讯,触摸面板中间是透明的,它贴在液晶面板上面,一起构成屏幕的主体
  • PCB底板
    PCB 底板上可能会带有“液晶控制器芯片”因为控制液晶面板需要比较多的资源,所以大部分低级微控制器都不能直接控制液晶面板,需要额外配套一个专用液晶控制器来处理显示过程,外部微控制器只要把它希望显示的数据直接交给液晶控制器即可。而不带液晶控制器的 PCB底板 ,只有小部分的电源管理电路,液晶面板的信号线与外部微控制器相连,直接控制。
    STM32学习笔记---TFT-LCD_第8张图片

2、两种常见的TFT-LCD屏

STM32学习笔记---TFT-LCD_第9张图片

3、TFT-LCD控制框图

        ~~~~~~~        STM32F429 系列的芯片不需要额外的液晶控制器,也就是说它把专用液晶控制器的功能集成到 STM32F429 芯片内部了,可以理解为电脑的 CPU集成显卡。而 STM32F407 系列的芯片由于没有集成液晶控制器到芯片内部,所以它只能驱动自带控制器的屏幕,可以理解为电脑的外置显卡。
STM32学习笔记---TFT-LCD_第10张图片

4、RGB-LCD控制原理

液晶面板的控制信号线(不带液晶控制器):
STM32学习笔记---TFT-LCD_第11张图片
STM32学习笔记---TFT-LCD_第12张图片

5、RGB-LCD控制原理

  • RGB信号线
            ~~~~~~~        RGB信号线各有8根,分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。使用红绿蓝颜色分量来表示颜色是一种通用的做法,打开Windows系统自带的画板调色工具,可看到颜色的红绿蓝分量值,常见的颜色表示会在“RGB”后面附带各个颜色分量值的数据位数
            ~~~~~~~        如RGB565表示红绿蓝的数据线数分别为5、6、5根,一共为16个数据位,可表示216种颜色;
            ~~~~~~~        如果液晶屏的种颜色分量的数据线有8根,那它表示RGB888格式,一共24位数据线,可表示的颜色为224种。

    STM32学习笔记---TFT-LCD_第13张图片
  • 同步时钟信号CLK
    液晶屏与外部使用同步通讯方式,以CLK信号作为同步时钟,在同步时钟的驱动下,每个时钟传输一个像素点数据。
  • 水平同步信号HSYNC
    水平同步信号HSYNC(Horizontal Sync)用于表示液晶屏一行像素数据的传输结束,每传输完成液晶屏的一行像素数据时,HSYNC会发生电平跳变,如分辨率为800x480的显示屏(800列,480行),传输一帧的图像HSYNC的电平会跳变480次。
  • 垂直同步信号VSYNC
    垂直同步信号VSYNC(Vertical Sync)用于表示液晶屏一帧像素数据的传输结束,每传输完成一帧像素数据时,VSYNC会发生电平跳变。其中“帧”是图像的单位,一幅图像称为一帧,在液晶屏中,一帧指一个完整屏液晶像素点。人们常常用“帧/秒”来表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像,如液晶屏以60帧/秒的速率运行时,VSYNC每秒钟电平会跳变60次。
  • 数据使能信号DE
    数据使能信号DE(Data Enable)用于表示数据的有效性,当DE信号线为高电平时,RGB信号线表示的数据有效。
  • LCD数据传输时序
    STM32学习笔记---TFT-LCD_第14张图片
  • LCD数据传输时序
    STM32学习笔记---TFT-LCD_第15张图片
    注:液晶屏显示的图像可看作一个矩形,液晶屏有一个显示指针,它指向将要显示的像素。显示指针的扫描方向方向从左到右、从上到下,一个像素点一个像素点地描绘图形。这些像素点的数据通过RGB数据线传输至液晶屏,它们在同步时钟CLK的驱动下一个一个地传输到液晶屏中,交给显示指针,传输完成一行时,水平同步信号HSYNC电平跳变一次,而传输完一帧时VSYNC电平跳变一次。
  • LCD数据传输时序参数
    液晶显示指针在行与行之间,帧与帧之间切换时需要延时,而且HSYNC及VSYNC信号本身也有宽度,这些时间参数说明见下表:
    STM32学习笔记---TFT-LCD_第16张图片

三、SSD1963液晶控制器

1、液晶控制器SSD1963

1.1、液晶控制器

        ~~~~~~~        液晶驱动芯片或LCD驱动器,其内部有着较大的缓存空间可以存储文字、图像等数据,并能够将这些信息送入液晶模块进行显示,由于专用的芯片,因此速度往往比较快。
        ~~~~~~~         LCD驱动芯片的主要功能就是对主机发送过来的数据/命令,进行变换,变成每个像素的RGB数据,使之在屏幕上显示出来。常见的液晶驱动芯片有ILI932、ILI9328、SSD1963、HX8347、ILI9341、NT5510等
STM32学习笔记---TFT-LCD_第17张图片

1.2、SSD1963特性

内部包含1215KB frame buffer
支持分辨率为864*480的显示屏
支持像素位深为24bpp的显示模式(RGB888)
STM32学习笔记---TFT-LCD_第18张图片
STM32学习笔记---TFT-LCD_第19张图片

1.3、SSD1963内部框图

STM32学习笔记---TFT-LCD_第20张图片
注:液晶屏内部包含SSD1963控制器,该控制器使用 8080 接口与单片机通讯

2、STM32与LCD的电气连接

STM32学习笔记---TFT-LCD_第21张图片

2.1、8080时序-写数据/命令

STM32学习笔记---TFT-LCD_第22张图片
注:STM32通过8080接口与SSD1963 芯片进行通讯,实现对液晶屏的控制。通讯的内容主要包括命令和显存数据,显存数据即各个像素点的 RGB565 内容;命令是指对 SSD1963的控制指令,MCU 可通过8080接口发送命令编码控制 SSD1963的工作方式,例如复位指令、设置光标指令、睡眠。

  • 用GPIO管脚模拟8080时序
void LCD_WR_Byte(uint8_t dat,  uint8_t cmd)
{
   LCD_Data_Out(dat);        //放入数据	
  if(cmd)			
    	 LCD_DC_Set();	      //传命令	    
  else			
   	  LCD_DC_Clr();            //传数据

  LCD_CS_Clr();	     //拉低片选
  LCD_WR_Clr();           //写使能
  LCD_WR_Set();    //WR产生上升沿,数据锁存		
  LCD_CS_Set();           //取消片选	
  LCD_DC_Set();          //复位DC信号线    
}
2.2、FMSC-模拟8080时序

STM32学习笔记---TFT-LCD_第23张图片
Tpwcsl = ADDSET + DATAST +1 > 30      ~~~~      建议适当取大一点点
TCS = ADDSET > 2 ns                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                               ADDSET = 1
TPWLW = DATAST +1 > 12ns                     ~~~~~~~~~~~~~~~~~~~                     DATAST = 3
STM32学习笔记---TFT-LCD_第24张图片
        ~~~~~~~        对于FSMC和8080接口,前四种信号线都是完全一样的,仅仅是FSMC的地址信号线A[25:0]与8080的数据/命令选择线D/C#有区别。
        ~~~~~~~        为了模拟出8080时序,我们可以把FSMC的A0地址线与SSD1963芯片8080接口的D/C#信号线连接,那么当A0为高电平时(即D/C#为高电平),数据线D[15:0]的信号会被SSD1963理解为数值,若A0为低电平时(即D/C#为低电平),传输的信号则会被理解为命令。

2.3、如何控制A0(即控制DC线)

STM32学习笔记---TFT-LCD_第25张图片
注:LCD控制器的片选连入到FSMC的NE4管脚。所以当发出0x6C00 0000-0x6FFF FFFF之间的地址时NE4输出低电平,选中LCD控制器

2.4、如何控制A0(即控制DC线)

        ~~~~~~~        在实际控制时,以上地址计算方式还不完整,根据《STM32 参考手册》对 FSMC 访问NOR FLASH 的说明STM32 内部访问地址时使用的是内部 HADDR 总线, HADDR[25:0] 包含外部存储器地址。由于 HADDR 为字节地址,而存储器按字寻址,所以根据存储器数据宽度不同,实际向存储器发送的地址也将有所不同,如下表所示。
STM32学习笔记---TFT-LCD_第26张图片
注:实际控制A0时:
把前面的地址<<1就可以了
0x6C000000 低电平表示命令
0x6C000002 高电平表示数据

四、LCD测试程序讲解

1、CubeMx配置

1.1、时钟配置

STM32学习笔记---TFT-LCD_第27张图片
STM32学习笔记---TFT-LCD_第28张图片

1.2、FSMC管脚配置

STM32学习笔记---TFT-LCD_第29张图片
STM32学习笔记---TFT-LCD_第30张图片

2、代码详解

2.1、LCD驱动文件

以地址区分数据还是指令
STM32学习笔记---TFT-LCD_第31张图片

2.2、初始化函数

STM32学习笔记---TFT-LCD_第32张图片
STM32学习笔记---TFT-LCD_第33张图片

2.3、清屏函数

STM32学习笔记---TFT-LCD_第34张图片

STM32学习笔记---TFT-LCD_第35张图片
STM32学习笔记---TFT-LCD_第36张图片

2.4、填充函数

STM32学习笔记---TFT-LCD_第37张图片
STM32学习笔记---TFT-LCD_第38张图片
其余画矩形画圆都可以查看LCD.c文件。

3、LCD显示图片和中英文字符

3.1、将图片转换成图片数据

使用软件Image2Lcd软件
STM32学习笔记---TFT-LCD_第39张图片
点击保存生成,注意图片c文件名称,后面要用
STM32学习笔记---TFT-LCD_第40张图片

将其放到项目文件inc
STM32学习笔记---TFT-LCD_第41张图片

3.2、调用图片显示函数

在main函数中包含testimage.h
STM32学习笔记---TFT-LCD_第42张图片
调用图片显示函数
STM32学习笔记---TFT-LCD_第43张图片
STM32学习笔记---TFT-LCD_第44张图片
下载到控制板查看效果

3.3、LCD显示中英文

        ~~~~~~~        与显示图片类似,我们只需要把显示字体的每个像素的颜色数据依次写入LCD的frame buffer中即可。因此我们首先可以获取字体字幕的像素数据

  • 字符编码:
    由于计算机只能识别0和1,文字也只能以0和1的形式在计算机里存储,所以我们需要对文字进行编码才能让计算机处理,编码的过程就是规定特定的01数字串来表示特定的文字,最简单的字符编码例子是ASCII码。
  • ASCII码:
    标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。
    STM32学习笔记---TFT-LCD_第45张图片
    STM32学习笔记---TFT-LCD_第46张图片
  • GB2312标准:
    我国首先定义的是GB2312标准。它把ASCII码表127号之后的扩展字符集直接取消掉,并规定小于127的编码按原来ASCII标准解释字符。当2个大于127的字符连在一起时,就表示1个汉字,第1个字节使用 (0xA1-0xFE) 编码,第2个字节使用(0xA1-0xFE)编码,这样的编码组合起来可以表示了7000多个符号,其中包含6763个汉字。

其他中文编码:

  • BIG5编码:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
  • GBK编码:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
  • GB18030编码:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。
  • Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。
3.4、字模

        ~~~~~~~        仅有字符编码,计算机还不知道该如何表达该字符,因为字符实际上是一个个独特的图形,计算机必须把字符编码转化成对应的字符图形人类才能正常识别,因此我们要给计算机提供字符的图形数据,这些数据就是字模。如下图所示(size = 16*16)
字模的数据表示
        ~~~~~~~        已知字模是图形数据,而图形在计算机中是由一个个像素点组成的,所以字模实质是一个个像素点数据。为方便处理,我们把字模定义成方块形的像素点阵,且每个像素点只有 0和 1这两种状态.。我们用1个数据位记录一个像素点的状态,把有笔迹的点以“1”表示,无笔迹像素点以“0”表示即可。这样一个汉字图形,使用 16x16/8=32 个字节来就可以记录下来。

  • 取字幕软件-PCtoLCD2002
    STM32学习笔记---TFT-LCD_第47张图片
    STM32学习笔记---TFT-LCD_第48张图片
3.5、显示字符函数

STM32学习笔记---TFT-LCD_第49张图片
STM32学习笔记---TFT-LCD_第50张图片
STM32学习笔记---TFT-LCD_第51张图片
STM32学习笔记---TFT-LCD_第52张图片

你可能感兴趣的:(stm32,arm,嵌入式硬件)