LCD和FSMC的那点事
来源:互联网 发布:大数据数据收集论文 编辑:程序博客网 时间:2024/05/09 10:01
A.先说一下几种LCD interface,包括但不限于以下三种:
1.SPI
2.FSMC,就是常说的8080(或者称80并口,都是一个意思)
3.LTDC,就是RGB的接口
概念:
FM指帧缓存,即:GRAM
true colo ,就是RGB888
B.由于我使用的LCD接口是16位的80并口(16位代表有16条数据线),现在说一下80并口的标准信号,要驱动一个80并口的LCD包括以下7项信号(其中第8项位触摸屏接口的信号,可先不理会):
1.LCD_CS:LCD片选信号
2.LCD_WR:LCD写信号
3.LCD_RD:LCD读信号
4.DB[17:1]:16位双向数据线
5.LCD_RST:硬复位LCD信号
6.LCD_RS:命令/数据标志(0:命令,1:数据)
7.BL_CTR:背光控制信号
8.T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号
还有一个题外话,就是LCD的驱动初始化代码是由厂家提供的(初始化代码将LCD调到最佳显示效果),LCD必须硬复位后才能初始化。
C.再说一下为何FSMC可以用来驱动LCD,原因是FSMC的读写时序和LCD的读写时序很相似,于是把LCD当成一个外部存储器来用。利用FSMC在相应的地址读或写相关数值时,STM32的FSMC会在硬件上自动完成时序上的控制。所以我们只要设置好读写相关时序的寄存器后,FSMC就可以帮我们完成时序上的控制了。对于FSMC驱动LCD有一个比较难理解的地方就是当你的LCD使用16位宽度的数据传输(也就是有16条数据线,就像我上面说的我使用的是16位的80并口)的时候,HADDR和FSMC_A这个地址块的对应问题(使用8位数据则不用考虑此问题)。先开STM32中文参考手册_V10.pdf第327页,看到下图的红色下划线的文字,这个问题就是体现在这几句话上。
为什么FSMC外接16位宽度存储器(前面说了我们把LCD当成外部存储器来用)的时候和外接8位宽度存储器的时候,HADD和FSMC_A对应的地址不一样呢?下面我来说一下。
第一,我们先要明白FSMC_A是STM32的硬件的外部接口,是我们看得见摸得着的。然后HADDR是需要转换到外部存储器的内部AHB地址线(如上图所述),这个我们是看不见摸不着的,但是,我们可以用代码来控制它(理解这点很重要),我们代码直接操作着HADDR,而会间接操作到FSMC_A。所以当我们的LCD的16位(16位与8位是可选择,一般是是通过LCD的FPC上的电阻进行选择的,这点不详细讲)的80并口和STM32的FSMC接口连接好之后,要操作的就是HADDR,因为HADDR会间接操作到FSMC_A。
第二,外部存储器不都是按字节访问的(如上图所述),也就是说当你找到某个地址之后,你可以读出一个字节的数据(8位宽度)或者两个字节的数据(16位宽度)或者更多字节的数据(其他宽度),而这,就是依靠你外部存储器的数据宽度是多少。而所谓16位数据宽度就是说一个地址对应两个字节,当然了8位的数据宽度就是一个地址对应一个字节。
第三,从上图中,我们知道当你是8位数据宽度的时候是26根数据线HADDR[25:0],而16位数据宽度的时候是25根数据线[25:1]。前者可能大家都比较好理解,算下来就是有64M的地址空间(我们把LCD当成SRAM来用,把LCD接在了bank1上,bank1就是外接NOR/PSRAM用的,接到bank1后,再随便接到bank1的四个分区中的一个,每个bank大小512M,每个bank中的每个区64M),每个地址对一个字节空间大小,存储器储存空间大小为64M。后者算下来就是有32M的地址空间,他前面8位数据宽度时不同的是16位数据宽度每个地址对应两个字节的空间大小,这样算的话,它也是有32M*2=64M的存储空间大小(注意这里和前面的多少多少M指的是地址的数目,而不是实际对应的存储器存数空间的大小,就是说要注意区分地址空间大小和存储空间大小,因为前面说了一个地址可能对应一个字节大小的空间,也可能对应两个字节大小的空间)。
到了这里,大家应该都知道为什么16位数据宽度时HADDR的地址线需要减少一根了,因为16位数据宽度时需要的地址的数量只是8位数据宽度时的一半。
第四,现在假设我们的LCD的LCD_RS(命令/数据标志线)是接在STM32的外部接口FSMC_A[10]上的。由于STM32规定当使用16位数据宽度的时候HADDR[25:1]与FSMC_A[24:0]对应相连,HADDR[0]未接(如上图所述)。也就是说当使用16位数据宽度时有如下HADDR和FSMC_A有如下对应关系:
很明显,当使用16位数据宽度的时候,HADDR[0]这个地址是没用的。而因为我们的LCD的LCD_RS(命令/数据标志线)是接在STM32的外部接口FSMC_A[10]上的,所以实际上我们要操作的事HADDR[11]这根地址线。其实这就是所谓的当使用16位数据宽度的时候,HADDR自动右移一位对其的原理。
D.我的LCD的控制IC是ILI9314,讲一下我使用时遇到的一些问题。
- LCD和FSMC的那点事
- STM32F407VG的DCMI-OV7670和FSMC-LCD
- STM32 FSMC的用法--LCD
- FSMC+LCD
- STM32 FSMC学习笔记+补充(LCD的FSMC配置)
- STM32 FSMC学习笔记+补充(LCD的FSMC配置)
- 【转】STM32 FSMC的用法--LCD
- Lib和Dll的那点事
- UIView 和 CALayer的那点事
- UIView 和 CALayer的那点事
- UIView 和 CALayer的那点事
- UIView 和 CALayer的那点事
- UIView 和 CALayer的那点事
- IEnumerable和IQueryable的那点事
- Lib和Dll的那点事
- UIView 和 CALayer的那点事
- UIView和CALayer的那点事
- Lib和Dll的那点事
- java.util.concurrent.atomic原子操作类包
- thrift学习
- OSI七层模型与TCP/IP四层模型
- CSS样式大全
- 讯飞语音语音合成辅助类
- LCD和FSMC的那点事
- ASP.NET使用AspNetPager控件实现真分页
- COCI CONTEST #3 29.11.2014 STROJOPIS
- Java Atomic
- const char* p,char const * p,char * const p 的区别
- hdoj2108Shape of HDU【凹凸多边形的判定】
- 【leetCode】H-Index
- Android学习——Android入门
- 第476天 开始学习伽马的《设计模式》