FSMC-LCD驱动学习

目录

液晶控制原理

 液晶面板的信号线-RGB接口

液晶数据传输时序

液晶通讯中的时间参数

野火 4.3 寸液晶屏简介

液晶屏的信号线及 8080 时序  

写命令时序​编辑

使用 STM32 的 FSMC 模拟 8080 接口时序

   FSMC 模式 B 时序与 8080 时序对比(写过程) ​编辑        


液晶控制原理

STM32F429 系列的芯片不需要额外的液晶控制器,也就是说它把专用液晶控制器的功能集成到 STM32F429 芯片内部了,可以理解为电脑的 CPU 集成显卡,它节约了额外的控制器成本。而 STM32F407 系列的芯片由于没有集成液晶控制器到芯片内部,所以它只能驱动自带控制器的屏幕,可以理解为电脑的外置显卡。

 液晶面板的信号线-RGB接口

信号名称说明
R[7:0]红色数据
G[7:0]绿色数据
B[7:0]蓝色数据
CLK像素同步时钟信号
HSYNC水平同步信号
VSYNC垂直同步信号
DE数据使能信号

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

(2) 同步时钟信号 CLK
液晶屏与外部使用同步通讯方式,以 CLK 信号作为同步时钟,在同步时钟的驱动下,
每个时钟传输一个像素点数据。
(3) 水平同步信号 HSYNC
水平同步信号 HSYNC(Horizontal Sync) 用于表示液晶屏一行像素数据的传输结束,
传输完成液晶屏的一行像素数据时, HSYNC 会发生电平跳变
,如分辨率为 800x480
的显示屏 (800 列, 480 行),传输一帧的图像 HSYNC 的电平会跳变 480 次。
(4) 垂直同步信号 VSYNC
垂直同步信号 VSYNC(Vertical Sync) 用于表示液晶屏一帧像素数据的传输结束,每传
输完成一帧像素数据时, VSYNC 会发生电平跳变。
其中“帧”是图像的单位,一幅
图像称为一帧,在液晶屏中,一帧指一个完整屏液晶像素点。人们常常用“帧/秒”来
表示液晶屏的刷新特性,即液晶屏每秒可以显示多少帧图像,如液晶屏以 60 帧/秒的
速率运行时, VSYNC 每秒钟电平会跳变 60 次。
(5) 数据使能信号 DE
数据使能信号 DE(Data Enable) 用于表示数据的有效性,当 DE 信号线为高电平时,
RGB 信号线表示的数据有效。

 

液晶数据传输时序

液晶通讯中的时间参数

 在这些时间参数控制的区域,数据使能信号线“DE”都为低电平, RGB 数据线的信号无效,当
“DE”为高电平时,表示的数据有效,传输的数据会直接影响液晶屏的显示区域。

26.2.3 显存
液晶屏中的每个像素点都是数据,在实际应用中需要把每个像素点的数据缓存起来,再传输给液
晶屏,一般会使用 SRAM 或 SDRAM 性质的存储器,而这些专门用于存储显示数据的存储器,则
被称为显存。显存一般至少要能存储液晶屏的一帧显示数据,如分辨率为 800x480 的液晶屏,使
用 RGB888 格式显示,它的一帧显示数据大小为: 3x800x480=1152000 字节;若使用 RGB565 格
式显示,一帧显示数据大小为: 2x800x480=768000 字节。
一般来说,外置的液晶控制器会自带显存,而像 STM32F429 等集成液晶控制器的芯片可使用内
部 SRAM 或外扩 SDRAM 用于显存空间。
 

野火 4.3 寸液晶屏简介

液晶面板,在它的内部包含了一个型号为 NT35510 的液晶控制器芯片 (由于集成度高,所以图中无法看见),该液晶控制器使用 8080 接口与单片机通讯,图中液晶面板引出的 FPC 信号线即 8080 接口 (RGB 接口已在内部直接与 NT35510 相连),且控制器中包含有显存,单片机把要显示的数据通过引出的 8080 接口发送到液晶控制器,这些数据会被存储到它内部的显存中,然后液晶控制器不断把显存的内容刷新到液晶面板,显示内容。

液晶屏的信号线及 8080 时序  

NT35510 控制器根据自身的 IM[3:0] 信号线电平决定它与 MCU 的通讯方式,它本身支持 SPI 及
8080 通讯方式
,本示例中液晶屏的 NT35510 控制器在出厂前就已经按固定配置好 (内部已连接
硬件电路),它被配置为通过 8080 接口通讯,使用 16 根数据线的 RGB565 格式,且背光 LED 引
脚不与 NT35510 相连
,而是直接引出到排针供外部控制器控制。内部硬件电路连接完,剩下的其
它信号线被引出到 FPC 排线,最后该排线由 PCB 底板引出到排针,排针再与实验板上的 STM32
芯片连接,引出的排针信号线见图 26_13。

 液晶屏引出的信号线说明

信号线NT35510 对应的信号线说明
LCD_DB[15:0]D[15:0]数据信号
LCD_RDRDX读数据信号,低电平有效
LCD_RSD/CX数据/命令信号,高电平时,
D[15:0] 表示的是数据 (RGB
像素数据或命令数据),低电平
时 D[15:0] 表示控制命令
LCD_RESETRESX复位信号,低电平有效
LCD_WRWRX写数据信号,低电平有效
LCD_CSCSX片选信号,低电平有效
LCD_BK背光信号,低电平点亮
GPIO23空引脚,不需要连接
RST与触摸 IC 相连触摸 IC 的复位引脚
INT与触摸 IC 相连触摸 IC 的中断信号引脚
SCL与触摸 IC 相连触摸 IC 的 IIC 总线的时钟信
SDA与触摸 IC 相连触摸 IC 的 IIC 总线的数据信

这些信号线即 8080 通讯接口,带 X 的表示低电平有效, STM32 通过该接口与 NT35510 芯片
进行通讯,实现对液晶屏的控制。通讯的内容主要包括命令和显存数据,显存数据即各个像素
点的 RGB565 内容;命令是指对 NT35510 的控制指令, MCU 可通过 8080 接口发送命令编码
控制 NT35510 的工作方式,例如复位指令、设置光标指令、睡眠模式指令等等,具体的指令在
《NT35510-Data Sheet.pdf》
数据手册均有详细说明。写命令时序图见图 26_14。

写命令时序

 1、写命令

                1)CSX ↓写命令时序由片选信号 CSX 拉低开始

                2)D/CX↓对数据/命令选择信号线 D/CX 也置低电平表示写入的是命令地址、

                3)以写信号 WRX 为低,读信号 RDX 为高表示数据传输方向为写入

                4)在数据线 D[23:0](或 D[15:0]) 输出命令地址
2.传命令参数

                1)D/CX 要置高电平,表示写入的是命令数据

                2)在数据线 D[23:0](或 D[15:0]) 输出数据

使用 STM32 的 FSMC 模拟 8080 接口时序
 

NT35510 的 8080 通讯接口时序可以由 STM32 使用普通 I/O 接口进行模拟,但这样效率太低,
STM32 提供了一种特别的控制方法——使用 FSMC 接口实现 8080 时序。
 

   FSMC 模式 B 时序与 8080 时序对比(写过程)
         

 对比 FSMC NOR/PSRAM 中的模式 B 时序与 NT35510 液晶控制器芯片使用的 8080 时
序可发现,这两个时序是十分相似的 (除了 FSMC 的地址线 A 和 8080 的 D/CX 线,可以说是完
全一样),它们的信号线对比见表 27‑5。

 FSMC 的 NOR 与 8080 信号线对比

FSMC-NOR 信号线功能8080 信号线功能
NEx片选信号CSX片选信号
NWR写使能WRX写使能
NOE读使能RDX读使能
D[15:0]数据信号D[15:0]数据信号
A[25:0]地址信号D/CX数据/命令选择

加粗信号时序一样

对于 D/CX 线,它为高电平的时候表示数值,为低电平的时候表示命令,如果能使用 FSMC 的 A 地址线根据不同的情况产生对应的电平,那么就完全可以使用 FSMC 来产生 8080 接口需要的时序了。
 

野火开发板使用FSMC_A0连接D/CX

为了模拟出 8080 时序,我们可以把 FSMC 的 A0 地址线 (也可以使用其它 A1/A2 等地址线) 与
NT35510 芯片 8080 接口的 *D/CX 信号线连接 *,那么当 A0 为高电平时 (即 D/CX 为高电平),数
据线 D[15:0] 的信号会被 NT35510 理解为数值,若 A0 为低电平时 (即 D/CX 为低电平),传输的
信号则会被理解为命令。

FSMC 向不同地址写入数据,即可控制A0(D/CX)的电平

使用 FSMC 输出地址示例

地址地址的二进制值 (仅列出低四位)A0(D/CX) 的电平控制 NT35510 时的意义
0x6xxx xxx1000 11 高电平D 数值
0x6xxx xxx3001 11 高电平D 数值
0x6xxx xxx5010 11 高电平D 数值
0x6xxx xxx0000 00 低电平C 命令
0x6xxx xxx2001 00 低电平C 命令
0x6xxx xxx4010 00 低电平C 命令

有了这个基础,只要配置好 FSMC 外设,然后在代码中利用指针变量,向不同的地址单元写入数
据,就能够由 FSMC 模拟出的 8080 接口向 NT35510 写入控制命令或 GRAM 的数据了。

注意:在实际控制时,以上地址计算方式还不完整,还需要注意 HADDR 内部地址与 FSMC 地址
信号线的转换,关于这部分内容在代码讲解时再详细举例说明
 

野火407 HAL  LCD液晶显示代码分析

FSMC+RESET+BK引脚配置

 修改了一下配置,未验证

配置FSMC的模式

 

 

 计算控制液晶屏时使用的地址

计算地址的过程如下:
(1) 本工程中使用的是 FSMC_NE3 作为 8080_CS 片选信号,所以首先可以确认地址范围,当访
0X6800 0000 ~ 0X6BFF FFFF 地址时, FSMC 均会对外产生片选有效的访问时序;
(2) 本工程中使用 FSMC_A0 地址线作为命令/数据选择线 RS 信号,所以在以上地址范围内,再
选择出使得 FSMC_A0 输出高电平的地址,即可控制表示数据,选择出使得 FSMC_A0 输出
低电平的地址,即可控制表示命令。
• 要使 FSMC_A0 地址线为高电平,实质是输出地址信号的第 0 位为 1 即可,使用 0X6800
0000~0X6BFF FFFF
内的任意地址,作如下运算:
设置地址的第 0 位为 1: 0X6800 0000 |= (1«0) = 0x6800 0001
• 要使 FSMC_A0 地址线为低电平,实质是输出地址信号的第 0 位为 0 即可,使用 0X6800
0000~0X6BFF FFFF 内的任意地址,作如下运算:
设置地址的第 0 位为 0: 0X6800 0000 &= ~ (1«0) = 0x6800 0000
(3)还需区分16位和8位数据宽度计算

当 STM32 访问内部的 0x6800 0002 地址时, FSMC 自动输出时序,且使得与液晶屏的数据/命令选择线 RS(即 D/CX) 相连的 FSMC_A0 输出高电平,使得液晶屏会把传输过程理解为数据传输;

#define FSMC_Addr_NT35510_CMD ( ( uint32_t ) 0x68000000 )
__inline void NT35510_Write_Cmd ( uint16_t usCmd )
{
* ( __IO uint16_t * ) ( FSMC_Addr_NT35510_CMD ) = usCmd;
}
 

当 STM32 访问内部的 0X6800 0000 地址时, FSMC 自动输出时序,且使得与液晶屏的数据/命令选择线 RS(即 D/CX) 相连的 FSMC_A0 输出低电平,使得液晶屏会把传输过程理解为命令传输。

#define FSMC_Addr_NT35510_DATA ( ( uint32_t ) 0x68000002 )
 

__inline void NT35510_Write_Data ( uint16_t usData )
{
* ( __IO uint16_t * ) ( FSMC_Addr_NT35510_DATA ) = usData;
}
 

向液晶屏写入初始化配置
 

初始化过程中发送的代码及参数主要是配置了液晶屏的上电过程、显示屏的伽玛参数、分辨
率、像素格式等内容,这些配置主要由液晶屏生产厂家提供
 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值