杭州正规的网站建设公司,邢台移动端网站建设,找产品代理加盟,营销网站建设报价本节主要介绍以下内容
显示器简介
液晶控制原理
秉火3.2寸液晶屏简介
使用FSMC模拟8080时序
NOR FLASH时序结构体
FSMC初始化结构体
一、显示器简介 显示器属于计算机的I/O设备#xff0c;即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。…本节主要介绍以下内容
显示器简介
液晶控制原理
秉火3.2寸液晶屏简介
使用FSMC模拟8080时序
NOR FLASH时序结构体
FSMC初始化结构体
一、显示器简介 显示器属于计算机的I/O设备即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。
1.1 液晶显示器
液晶显示器简称LCD(Liquid Crystal Display)相对于上一代CRT显示器(阴极射线管显示器)LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼的优点因而它成为了现在的主流电子显示设备其中包括电视、电脑显示器、手机屏幕及各种嵌入式设备的显示器。
液晶电视与CRT电视的外观对比很明显液晶电视更薄“时尚”是液晶电视给人的第一印象而CRT 电视则感觉很“笨重”。 液晶是一种介于固体和液体之间的特殊物质它是一种有机化合物常态下呈液态但是它的分子排列却和固体晶体一样非常规则因此取名液晶。如果给液晶施加电场会改变它的分子排列从而改变光线的传播方向配合偏振光片它就具有控制光线透过率的作用再配合彩色滤光片改变加给液晶电压大小就能改变某一颜色透光量的多少。 利用液晶控制的原理做出可控红、绿、蓝光输出强度的显示结构把三种显示结构组成一个显示单位通过控制红绿蓝的强度可以使该单位混合输出不同的色彩这样的一个显示单位被称为像素。
注意液晶本身是不发光的所以需要有一个背光灯提供光源光线经过一系列处理过程才到输出所以输出的光线强度是要比光源的强度低很多的比较浪费能源(当然比CRT显示器还是节能多了)。而且这些处理过程会导致显示方向比较窄也就是它的视角较小从侧面看屏幕会看不清它的显示内容。另外输出的色彩变换时液晶分子转动也需要消耗一定的时间导致屏幕的响应速度低。
1.2 LED显示器 LED点阵彩色显示器的单个像素点内包含红绿蓝三色LED灯显示原理类似实验板上的LED彩灯通过控制红绿蓝颜色的强度进行混色实现全彩颜色输出多个像素点构成一个屏幕。由于每个像素点都是LED灯自发光的所以在户外白天也显示得非常清晰但由于LED灯体积较大导致屏幕的像素密度低所以它一般只适合用于广场上的巨型显示器。相对来说单色的LED点阵显示器应用得更广泛如公交车上的信息展示牌、店招等。 1.3 OLED显示器
新一代的OLED显示器与LED点阵彩色显示器的原理类似但由于它采用的像素单元是“有机发光二极管”(Organic Light Emitting Diode)所以像素密度比普通LED点阵显示器高得多。 OLED显示器不需要背光源、对比度高、轻薄、视角广及响应速度快等优点。待到生产工艺更加成熟时必将取代现在液晶显示器的地位。 对于不同种类的显示器其控制程序原理是类似的都是以操作像素点为基础。
1.3 显示器的基本参数
不管是哪一种显示器都有一定的参数用于描述它们的特性各个参数介绍如下
• 像素 像素是组成图像的最基本单元要素显示器的像素指它成像最小的点即前面讲解液晶原理中提到的一个显示单元。 • 分辨率 一些嵌入式设备的显示器常常以“行像素值x列像素值”表示屏幕的分辨率。如分辨率800x480表示该显示器的每一行有800个像素点每一列有480个像素点也可理解为有800列480行。 • 色彩深度 色彩深度指显示器的每个像素点能表示多少种颜色一般用“位”(bit)来表示。如单色屏的每个像素点能表示亮或灭两种状态(即实际上能显示2种颜色)用1个数据位就可以表示像素点的所有状态所以它的色彩深度为1bit其它常见的显示屏色深为16bit、24bit。 • 显示器尺寸 显示器的大小一般以英寸表示如5英寸、21英寸、24英寸等这个长度是指屏幕对角线的长度 通过显示器的对角线长度及长宽比可确定显示器的实际长宽尺寸。 • 点距 点距指两个相邻像素点之间的距离它会影响画质的细腻度及观看距离相同尺寸的屏幕若分辨率越高则点距越小画质越细腻。如现在有些手机的屏幕分辨率比电脑显示器的还大这是手机屏幕点距小的原因LED点阵显示屏的点距一般都比较大所以适合远距离观看。
二、 液晶控制原理
下图两种适合于STM32芯片使用的显示屏我们以它为例讲解控制液晶屏的原理 完整的显示屏由液晶显示面板、电容触摸面板以及PCB底板构成。
图中的触摸面板带有触摸控制芯片该芯片处理触摸信号并通过引出的信号线与外部器件通讯面板中间是透明的它贴在液晶面板上面一起构成屏幕的主体触摸面板与液晶面板引出的排线连接到PCB底板上。 根据实际需要PCB底板上可能会带有“液晶控制器芯片”。因为控制液晶面板需要比较多的资源所以大部分低级微控制器都不能直接控制液晶面板需要额外配套一个专用液晶控制器来处理显示过程外部微控制器只要把它希望显示的数据直接交给液晶控制器即可。而不带液晶控制器的PCB底板 只有小部分的电源管理电路液晶面板的信号线与外部微控制器相连直接控制。STM32F429系列的芯片不需要额外的液晶控制器也就是说它把专用液晶控制器的功能集成到STM32F429芯片内部了节约了额外的控制器成本。STM32F1系列的芯片控制液晶时液晶屏需带有液晶控制器。
2.1 液晶面板的控制信号
液晶面板的控制信号线(不带液晶控制器) 信号名称 说明 R[7:0] 红色数据 G[7:0] 绿色数据 B[7:0] 蓝色数据 CLK 像素同步时钟信号 HSYNC 水平同步信号 VSYNC 垂直同步信号 DE 数据使能信号
• RGB 信号线 RGB信号线各有8根分别用于表示液晶屏一个像素点的红、绿、蓝颜色分量。使用红绿蓝颜色分量来表示颜色是一种通用的做法打开Windows系统自带的画板调色工具可看到颜色的红绿蓝分量值常见的颜色表示会在“RGB”后面附带各个颜色分量值的数据位数如RGB565表示红绿蓝的数据线数分别为5、6、5根一共为16个数据位可表示2^16种颜色而这个液晶屏的种颜色分量的数据线都有8根所以它支持RGB888格式一共24位数据线可表示的颜色为2^24种。 • 同步时钟信号 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信号线表示的数据有效。
2.2 液晶数据传输时序
向液晶屏传输一帧图像数据的时序 液晶屏显示的图像可看作一个矩形液晶屏有一个显示指针它指向将要显示的像素。显示指针的扫描方向方向从左到右、从上到下一个像素点一个像素点地描绘图形。这些像素点的数据通过RGB数据线传输至液晶屏它们在同步时钟CLK的驱动下一个一个地传输到液晶屏中交给显示指针传输完成一行时水平同步信号HSYNC电平跳变一次而传输完一帧时VSYNC电平跳变一次。 液晶显示指针在行与行之间帧与帧之间切换时需要延时而且HSYNC及VSYNC信号本身也有宽度这些时间参数说明见下表 时间参数 参数说明 VBP (vertical back porch) 表示在一帧图像开始时垂直同步信号以后的无效的行数 VFP (vertical front porch) 表示在一帧图像结束后垂直同步信号以前的无效的行数 HBP (horizontal back porch) 表示从水平同步信号开始到一行的有效数据开始之间的CLK的个数 HFP (horizontal front porth) 表示一行的有效数据结束到下一个水平同步信号开始之间的CLK的个数 VSW (vertical sync width) 表示垂直同步信号的宽度单位为行 HSW (horizontal sync width) 表示水平同步信号的宽度单位为同步时钟CLK的个数
在这些时间参数控制的区域数据使能信号线“DE”都为低电平RGB数据线的信号无效当“DE”为高电平时表示的数据有效传输的数据会直接影响液晶屏的显示区域。
2.3 显存
液晶屏中的每个像素点都是数据在实际应用中需要把每个像素点的数据缓存起来再传输给液晶屏这种存储显示数据的存储器被称为显存。显存一般至少要能存储液晶屏的一帧显示数据如分辨率为800x480的液晶屏使用RGB888格式显示它的一帧显示数据大小为3x800x4801152000字节3个83个字节若使用RGB565格式显示一帧显示数据大小为2x800x480768000字节565 162个字节。
三、秉火3.2寸液晶屏简介
前面介绍的屏幕其液晶控制器与液晶屏是完全分离的且具有带控制器和不带控制器的版本易于理解下面来分析实验板标配的分辨率为320*240的3.2寸电阻触摸液晶屏。
3.1、3.2寸电阻触摸屏实物 图中的标号③部分是液晶屏幕的整体通过引出的排针接入到实验板上可对它进行控制它分为标号①的液晶触摸面板和标号②的PCB底板两部分。 标号①处的液晶触摸面板由液晶屏和触摸屏组成屏幕表面的灰色线框即为电阻触摸屏的信号线触摸屏的下方即为液晶面板在它的内部包含了一个型号为ILI9341的液晶控制器芯片(由于集成度高所以图中无法看见)该液晶控制器使用8080接口与单片机通讯图中液晶面板引出的FPC信号线即8080接口(RGB接口已在内部直接与ILI9341相连)且控制器中包含有显存单片机把要显示的数据通过引出的8080接口发送到液晶控制器这些数据会被存储到它内部的显存中然后液晶控制器不断把显存的内容刷新到液晶面板显示内容。
标号②处的是PCB底板它主要包含了一个电阻触摸屏的控制器XPT2046电阻触摸屏控制器实质上是一个ADC芯片通过检测电压值来计算触摸坐标。PCB底板与液晶触摸面板通过FPC排线座连接然后引出到排针方便与实验板的排母连接。
3.2 ILI9341液晶控制器简介
本液晶屏内部包含有一个液晶控制芯片ILI9341它的内部结构如下图 该芯片最主核心部分是位于中间的GRAM(Graphics RAM)它就是显存。GRAM中每个存储单元都对应着液晶面板的一个像素点。它右侧的各种模块共同作用把GRAM存储单元的数据转化成液晶面板的控制信号使像素点呈现特定的颜色而像素点组合起来则成为一幅完整的图像。框 图的左上角为ILI9341的主要控制信号线和配置引脚根据其不同状态设置可以使芯片工作在不同的模式如每个像素点的位数是6、16还是18位可配置使用SPI接口、8080接口还是RGB接口与MCU进行通讯。MCU通过SPI、8080接口或RGB接口与ILI9341进行通讯从而访问它的控制寄存器(CR)、地址计数器(AC)、及GRAM。 在GRAM的左侧还有一个LED控制器(LED Controller)。LCD为非发光性的显示装置它需要借助背光源才能达到显示功能LED控制器就是用来控制液晶屏中的LED背光源。
与STM32通信主要使用标黄的引脚。
3.3 液晶屏的信号线及8080时序
ILI9341控制器根据自身的IM[3:0]信号线电平决定它与MCU的通讯方式它本身支持SPI及8080通讯方式本示例中液晶屏的ILI9341控制器在出厂前就已经按固定配置好(内部已连接硬件电路)它被配置为通过8080接口通讯使用16根数据线的RGB565格式。内部硬件电路连接完剩下的其它信号线被引出到FPC排线最后该排线由PCB底板引出到排针排针再与实验板上的STM32芯片连接引出的排针信号线如下图 图中红色为数据线蓝色为控制线
这些引出的信号线即8080通讯接口带X的表示低电平有效STM32通过该接口与ILI9341芯片进行通讯实现对液晶屏的控制。通讯的内容主要包括命令和显存数据显存数据即各个像素点的RGB565内容命令是指对ILI9341的控制指令MCU可通过8080接口发送命令编码控制ILI9341的工作方式例如复位指令、设置光标指令、睡眠模式指令等等具体的指令在《ILI9341.pdf》数据手册均有详细说明。 信号线 ILI9341对应的信号线 说明 LCD_DB[15:0] D[15:0] 数据信号 LCD_RD RDX 读数据信号低电平有效 LCD_RS D/CX 数据/命令信号高电平时D[15:0]表示的是数据(RGB像素数据或命令数据)低电平时D[15:0]表示控制命令 LCD_RESET RESX 复位信号低电平有效 LCD_WR WRX 写数据信号低电平有效 LCD_CS CSX 片选信号低电平有效 LCD_BK - 背光信号低电平点亮 GPIO[5:1] - 触摸屏的控制信号线下一章再介绍
向ILI9341写命令的时序图 8080时序 写命令时序由片选信号CSX拉低开始对数据/命令选择信号线D/CX也置低电平表示写入的是命令地址(可理解为命令编码如软件复位命令0x01)以写信号WRX为低读信号RDX为高表示数据传输方向为写入同时在数据线D[17:0](或D[15:0])输出命令地址在第二个传输阶段传送的是命令的参数所以D/CX要置高电平表示写入的是命令数据命令数据是某些指令带有的参数如复位指令编码为0x01它后面可以带一个参数该参数表示多少秒后复位(实际的复位命令不含参数此处只是为了讲解指令编码与参数的区别)。 当需要把像素数据写入GRAM时过程很类似把片选信号CSX拉低后再把数据/命令选择信号线D/CX置为高电平这时由D[17:0]传输的数据则会被ILI9341保存至它的GRAM中。
四、使用STM32的FSMC模拟8080接口时序
STM32没有8080接口ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟但这样效率太低STM32提供了一种特别的控制方法——使用FSMC接口实现8080时序。
在前面的《FSMC—扩展外部SRAM》章节中了解到STM32的FSMC外设可以用于控制扩展的外部存储器而MCU对液晶屏的操作实际上就是把显示数据写入到显存中与控制存储器非常类似且8080接口的通讯时序完全可以使用FSMC外设产生因而非常适合使用FSMC控制液晶屏。
4.1 FSMC简介 控制LCD时适合使用FSMC的NOR\PSRAM模式它与前面使用FSMC控制SRAM的稍有不同控制SRAM时使用的是模式A而控制LCD时使用的是与NOR FLASH一样的模式B所以我们重点分析框图中NOR FLASH控制信号线部分。 FSMC信号名称 信号方向 功能 CLK 输出 时钟(同步突发模式使用) A[25:0] 输出 地址总线 D[15:0] 输入/输出 双向数据总线 NE[x] 输出 片选x 1...4 NOE 输出 输出使能 NWE 输出 写使能 NWAIT 输入 NOR闪存要求FSMC等待的信号 NADV 输出 地址、数据线复用时作锁存信号 在控制LCD时使用的是类似异步、地址与数据线独立的NOR FLASH控制方式所以实际上CLK、NWAIT、NADV引脚并没有使用到。
FSMC NOR/PSRAM中的模式B的写时序如下图 根据STM32对寻址空间的地址映射地址0x6000 0000 ~0x9FFF FFFF是映射到外部存储器的而其中的0x6000 0000 ~0x6FFF FFFF则是分配给NOR FLASH、PSRAM这类可直接寻址的器件。
当FSMC外设被配置成正常模式并且外部连接了NOR FLASH时若向0x60000000地址写入数据0xABCD,FSMC会自动在各信号线上产生相应的电平信号写入数据。FSMC会控制片选信号信号NE1选择相应的NOR 芯片然后使能地址线A[25:0]输出0x60000000NWE写使能信号线上发出低电平的写使能信号而要写入的数据信号0xABCD则从数据线D[15:0]输出然后数据就被保存到NOR FLASH中了。
4.2 用FSMC模拟8080时序 对比FSMC NOR/PSRAM中的模式B时序与ILI9341液晶控制器芯片使用的8080时序可发现这两个时序是十分相似的(除了FSMC的地址线A和8080的D/CX线可以说是完全一样) FSMC-NOR信号线 功能 8080信号线 功能 NEx 片选信号 CSX 片选信号 NWR 写使能 WRX 写使能 NOE 读使能 RDX 读使能 D[15:0] 数据信号 D[15:0] 数据信号 A[25:0] 地址信号 D/CX 数据/命令选择
对于FSMC和8080接口前四种信号线都是完全一样的仅仅是FSMC的地址信号线A[25:0]与8080的数据/命令选择线D/CX有区别。而对于D/CX线它为高电平的时候表示数值为低电平的时候表示命令如果能使用FSMC的A地址线根据不同的情况产生对应的电平那么就完全可以使用FSMC来产生8080接口需要的时序了。
为了模拟出8080时序我们可以把FSMC的A0地址线(也可以使用其它A1/A2等地址线)与ILI9341芯片8080接口的D/CX信号线连接那么当A0为高电平时(即D/CX为高电平)数据线D[15:0]的信号会被ILI9341理解为数值若A0为低电平时(即D/CX为低电平)传输的信号则会被理解为命令。
由于FSMC会自动产生地址信号当使用FSMC向0x6xxx xxx1、0x6xxx xxx3、0x6xxx xxx5…这些奇数地址写入数据时地址最低位的值均为1所以它会控制地址线A0(D/CX)输出高电平那么这时通过数据线传输的信号会被理解为数值若向0x6xxx xxx0 、0x6xxx xxx2、0x6xxx xxx4…这些偶数地址写入数据时地址最低位的值均为0所以它会控制地址线A0(D/CX)输出低电平因此这时通过数据线传输的信号会被理解为命令如下表 地址 地址的二进制值(仅列出低四位) A0(D/CX)的电平 控制ILI9341时的意义 0x6xxx xxx1 0001 1 高电平 D数值 0x6xxx xxx3 0011 1高电平 D数值 0x6xxx xxx5 0101 1高电平 D数值 0x6xxx xxx0 0000 0低电平 C命令 0x6xxx xxx2 0010 0低电平 C命令 0x6xxx xxx4 0100 0低电平 C命令
有了这个基础只要配置好FSMC外设然后在代码中利用指针变量向不同的地址单元写入数据就能够由FSMC模拟出的8080接口向ILI9341写入控制命令或GRAM的数据了。 注意在实际控制时以上地址计算方式还不完整还需要注意HADDR内部地址与FSMC地址信号线的转换关于这部分内容在代码讲解时再详细举例说明
五、NOR FLASH时序结构体
与控制SRAM时一样控制FSMC使用NOR FLASH存储器时主要是配置时序寄存器以及控制寄存器利用ST标准库的时序结构体以及初始化结构体可以很方便地写入参数。 • FSMC_AddressSetupTime 本成员设置地址建立时间它可以被设置为0-0xF个HCLK周期数按STM32标准库的默认配置HCLK的时钟频率为72MHz即一个HCLK周期为1/72微秒。 • FSMC_AddressHoldTime 本成员设置地址保持时间它可以被设置为0-0xF个HCLK周期数。
• FSMC_DataSetupTime 本成员设置数据建立时间它可以被设置为0-0xF个HCLK周期数。 • FSMC_BusTurnAroundDuration 本成员设置总线转换周期在NOR FLASH存储器中地址线与数据线可以分时复用总线转换周期就是指总线在这两种状态间切换需要的延时防止冲突。控制其它存储器时这个参数无效配置为0即可。
• FSMC_CLKDivision 本成员用于设置时钟分频它以HCLK时钟作为输入经过FSMC_CLKDivision分频后输出到FSMC_CLK引脚作为通讯使用的同步时钟。控制其它异步通讯的存储器时这个参数无效配置为0即可。 • FSMC_DataLatency 本成员设置数据保持时间它表示在读取第一个数据之前要等待的周期数该周期指同步时钟的周期本参数仅用于同步NOR FLASH类型的存储器控制其它类型的存储器时本参数无效。 • FSMC_AccessMode 本成员设置存储器访问模式不同的模式下FSMC访问存储器地址时引脚输出的时序不一样可选FSMC_AccessMode_A/B/C/D模式。一般来说控制异步NOR FLASH时使用B模式。
这个FSMC_NORSRAMTimingInitTypeDef 时序结构体配置的延时参数将作为下一节的FSMC SRAM初始化结构体的一个成员。
FSMC的NOR FLASH初始化结构体
FSMC初始化结构体除最后两个成员是上一小节讲解的时序配置外其它结构体成员的配置都对应到FSMC_BCR中的寄存器位。 • FSMC_Bank 本成员用于选择FSMC映射的存储区域。 • FSMC_DataAddressMux 本成员用于设置地址总线与数据总线是否复用(FSMC_DataAddressMux_Enable /Disable)在控制NOR FLASH时可以地址总线与数据总线可以分时复用以减少使用STM32信号线的数量。
• FSMC_MemoryType 本成员用于设置要控制的存储器类型它支持控制的存储器类型为SRAM、PSRAM以及NOR FLASH(FSMC_MemoryType_SRAM/PSRAM/NOR)。 • FSMC_MemoryDataWidth 本成员用于设置要控制的存储器的数据宽度可选择设置成8或16位(FSMC_MemoryDataWidth_8b /16b)。 • FSMC_BurstAccessMode 本成员用于设置是否使用突发访问模式(FSMC_BurstAccessMode_Enable/Disable)突发访问模式是指发送一个地址后连续访问多个数据非突发模式下每访问一个数据都需要输入一个地址仅在控制同步类型的存储器时才能使用突发模式。 • FSMC_AsynchronousWait 本成员用于设置是否使能在同步传输时使用的等待信号(FSMC_AsynchronousWait_Enable/Disable)在控制同步类型的NOR或PSRAM时存储器可以使用FSMC_NWAIT引脚通知STM32需要等待。 • FSMC_WaitSignalPolarity 本成员用于设置等待信号的有效极性即要求等待时使用高电平还是低电平(FSMC_WaitSignalPolarity_High/Low)。 • FSMC_WrapMode 本成员用于设置是否支持把非对齐的AHB突发操作分割成2次线性操作(FSMC_WrapMode_Enable/Disable)该配置仅在突发模式下有效。 • FSMC_WaitSignalActive 本成员用于配置在突发传输模式时决定存储器是在等待状态之前的一个数据周期有效还是在等待状态期间有效(FSMC_WaitSignalActive_BeforeWaitState/DuringWaitState)。 • FSMC_WriteOperation 这个成员用于设置是否写使能(FSMC_WriteOperation_ Enable /Disable)禁止写使能的话FSMC只能从存储器中读取数据不能写入。 • FSMC_WaitSignal 本成员用于设置当存储器牌突发传输模式时是否允许通过NWAIT信号插入等待状态(FSMC_WaitSignal_Enable/Disable)。 • FSMC_ExtendedMode 本成员用于设置是否使用扩展模式(FSMC_ExtendedMode_Enable/Disable)在非扩展模式下对存储器读写的时序都只使用FSMC_BCR寄存器中的配置即下面的FSMC_ReadWriteTimingStruct结构体成员在扩展模式下对存储器的读写时序可以分开配置读时序使用FSMC_BCR寄存器写时序使用FSMC_BWTR寄存器的配置即下面的FSMC_WriteTimingStruct结构体。 • FSMC_ReadWriteTimingStruct 本成员是一个指针赋值时使用上一小节中讲解的时序结构体FSMC_NORSRAMInitTypeDef设置当不使用扩展模式时读写时序都使用本成员的参数配置。 • FSMC_WriteTimingStruct 同样地本成员也是一个时序结构体的指针只有当使用扩展模式时本配置才有效它是写操作使用的时序。
别的明天更