准备条件:
硬件环境:STM32F429I-DISCOVERY
软件环境:Keil MDK v5.26
嵌入式RTOS:Keil RTX5
说明:假设已经写好了裸机的LCD驱动程序且能正常显示信息。
预备知识——LCD知识补充
LCD常见的接口
LCD的接口有多种,分类很细。主要看LCD的驱动方式和控制方式,目前手机上的彩色LCD的连接方式一般有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式,DSI模式。MCU模式(也写成MPU模式的)。只有TFT模块才有RGB接口。
1. MCU模式:数据可以先存到IC内部GRAM后再往屏上写,所以这种模式LCD可以直接接在MEMORY的总线上。
2. RGB模式:没有内部GRAM。HSYNC,VSYNC,ENABLE,CS,RESET,RS可以直接接在MEMORY的GPIO口上,用GPIO口来模拟波形。
MCU屏引脚: /RES , /CS , RS , /WR , /RD , 数据线:DB0 ~ DB17 (18bit)
RGB屏引脚: CLK , HSYNC,VSYNC,ENABLE,CS,RESET,有的也需要RS, 数据线:R0~R5 , G0~G5 , B0~B5 (18bit)
MCU接口
M6800模式
M6800模式支持可选择的总线宽度8/9/16/18-bit(默认为8位),其实际设计思想是与I80的思想是一样的,主要区别就是该模式的总线控制读写信号组合在一个引脚上(/WR),而增加了一个锁存信号(E)数据位传输有8位,9位,16位和18位。
I8080模式
I80模式连线分为:CS/,RS(寄存器选择),RD/,WR/,再就是数据线了。优点是:控制简单方便,无需时钟和同步信号。缺点是:要耗费GRAM,所以难以做到大屏(QVGA以上)。
MCU接口标准名称是I80,管脚的控制脚有5个:
- CS 片选信号
- RS (置1为写数据,置0为写命令)
- /WR (为0表示写数据) 数据命令区分信号
- /RD (为0表示读数据)
- RESET 复位LCD( 用固定命令系列 0 1 0来复位)
RGB接口
(1)接口定义
RGB颜色是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所 能感知的所有颜色,是目前运用最广的颜色系统之一。
(2)接口类型
a. Parallel RGB
b. Serial RGB
(3)接口特点
a. 接口一般为3.3V电平
b. 需要同步信号
c. 需时刻刷新图像数据
d. 需配置适当的timing
Parallel RGB Interface
Serial RGB Interface
(4)最大分辨率和时钟频率
a. Parallel RGB
分辨率:1920 * 1080
时钟频率:1920*1080*60*1.2 = 149MHZ
b. Serial RGB
分辨率:800 * 480
时钟频率:800*3*480*60*1.2 = 83MHZ
LCD接口框架
从下面这个"RGB-接口框架"图可以看出对于RGB接口来说,CPU中的内存是通过映射的形式直接与LCD控制器相连的。所以这个是直接连接方式
直接相连
从下面“MCU框架”图可以看出对于RGB接口来说,CPU是通过MCU接口与LCD控制器相连的没有将CPU内存映射。所以这个是间接连接方式
间接相连
提出问题
1. LCD屏接口类型确认?
答:确认是RGB模式接口还是MCU(MPU)模式接口。RGB模式:属于MCU与LCD控制器直接连接;MCU(MPU)模式:属于MCU与LCD控制器间接连接;
通过了解LCD屏接口类型,可以确定LCD屏的接线。比如:CLK , HSYNC,VSYNC,ENABLE,CS,RESET以及RGB数据引脚。这些引脚接线在硬件设计时是需要的确认好的。RGB数据线应该接多少根,这个也是由LCD驱动芯片决定的。比如:这里就显示可以是8/16/9/18bit的RGB数据
2. emWin驱动类型确认?
答:确认好MCU与LCD控制器之间的连接关系(间接、直接)后,再结合LCD控制器IC型号来确认具体可以使用的emWin已经写好的驱动。
硬件部分——原理图阅读
1. 在开发板的原理图中找到LCD显示屏部分电路图,得出LCD屏型号:SF-TC240T-9370-T
下载LCD屏幕datasheet
使用bing搜索引擎来搜索SF-TC240T-9370-T的数据手册,建议使用bing来搜索百度中广告太多。
链接:https://pan.baidu.com/s/1nWO80Qv0JjkVbqhTdJhIow
提取码:djpn
阅读LCD屏datasheet
1. 获取LCD屏所使用的LCD驱动芯片
直接在datasheet中搜索driver关键字,找到LCD驱动芯片。
2. 获取LCD屏所使用的接口类型
1. 先找到LCD屏的引脚描述,通过引脚描述来确认当前LCD屏选择的MCU接口模式是什么
通过开发板的电路图,可以发现IM[0-3]是怎么接的再查找LCD屏的datasheet从而确认。
IM[0:3]为0110:表示4-wire 8bit data serial interface即RGB的serial interface接口模式。而根据RGB接口模式的特点:直接由MCU的内存作为“显存”即RGB数据是直接传输给MCU的内存,然后再传输给LCD直接显示出来。所以RGB的serial interface接口是直接连接方式。确认好LCD屏幕的接口方式后,再次通过原理图的接线来验证我们确认的LCD屏幕接口方式是否正确。
确定display驱动
1. 通过上面的一系列LCD信息查找与确认,我们最终得出LCD屏的控制器与STM32F4芯片是直接相连。在emWin用户手册中的display driver章节的Detailed display driver descriptions找到GUIDRV_Lin,这个驱动可以用于所有的直接连接方式的LCD屏幕的控制。
2. 继查看GUIDRV_Lin这部分,了解它的用法。同时手册中也有它的使用例程,我们可以参考例程来使用这个驱动
注:emWin中的驱动,有些是只能用于直接相连的情况。而有些驱动即可以用于直接相连也可以用于间接相连。具体要看驱动的描述。如:GUIDRV_FlexColor就可以使用在任意情况,只要满足它支持的芯片型号就行。
所需内存的大小的确定
RGB分别占用6bit,所以一个像素点的占用的字节数:3个。因为18bit = R(6bit)+G(6bit)+B(6bit),最少需要3字节。
内存最小占用大小为1帧数据=3*240(屏幕宽度像素)*320(屏幕长度像素)=225Kb
查看STM32F429芯片datasheetd查看RAM
STM32F429芯片内部RAM大小=64+16+112=192Kb < 225Kb,所以我们需要使用SDRAM并将emWin相关申请的内存全部放置到这个SDRAM中。因此我们代码中还需要添加SDRAM的初始化代码。
说明:屏幕的大小(像素)信息可以从LCD屏的手册中获取,每一个像素点占用的位数可以从LCD屏电路接线图得
这个STM32F429I-DICOVERY开发板中RGB分别为6位(R2-R7)、6位(G2-G7)、6位(B2-B7)。总共占用18位,但是算字节的时候得取整为3字节(24位)
RGB格式说明
RGB格式有RGB888、RGB565、RGB666等。比如:RGB565表示R占5位、G占6位、B占5位。总共就是16位也就是2个字节。
LCD驱动芯片ILI9341的手册下载
链接:https://pan.baidu.com/s/1LMxVtx5jw8Nr5-IRWxppUQ
提取码:glxw
如果链接失效可以发邮件给到我QQ:275424510@qq.com
参考资料:
https://blog.csdn.net/yazhouren/article/details/88057225
https://blog.csdn.net/u012719256/article/details/55102836
https://blog.csdn.net/specialwave/article/details/70859522