LCD和FSMC的那点事 和STM32F4 FSMC 34PIN 16位数据并口 TFTLCD,点亮屏幕步骤

LCD和FSMC的那点事

A.先说一下几种LCD interface,包括但不限于以下三种:

1.SPI

2.FSMC,就是常说的8080(或者称80并口,都是一个意思),参考:STM32——FSMC模拟8080时序 点亮 液晶屏

点亮显示屏的几个重要步骤_液晶屏点亮的条件 

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的一个扫描方式,如下图展示了其中的三种扫描方式:

扫描方式确定好了,其实也就是确定好横屏或者竖屏了。同时该方向上的虚拟原点坐标(其实LCD的原点只有一个,就是物理的原点坐标)也确定好了,像上图中的B就是当确定好了扫描方式后的对应的虚拟原点(0,0)坐标所在的位置。

当LCD处于不是默认扫描方式时(也就是虚拟坐标和物理坐标不是一样的时候),需要做虚拟坐标到实际坐标的转换公式如下:

下面我举个例子说明一下,他们之间的转换关系:

上图中黑色的都是物理上的坐标,而红色的是改变扫描方式后的视角,红色的(10,20)是相对于横屏状态下虚拟原点坐标(0,0)来说的。当我们在横屏状态时想在(10,20)打红色的点,就必须做坐标转换,不然的话就会打到黑色的点那里去了。其实从虚拟坐标到物理坐标的转换控制IC已经帮我们做好了,我们其实不用理会。上图中的蓝色箭头指向的其实就是转换公司,它和上上图中B5,B6,B7为110时的公式是一样的。其实就是(239-y,x),其中这里的x和y都是在横屏状态下你想打的点。

第二,我总结一下横竖屏切换(扫描方式改变)时需要注意的地方。

1,x坐标的开始和结束地址,y坐标的开始和结束地址要重新设置,因为横竖屏间的切换时x,y相应也会变化,所以需要重新设置(调换即可)。

2,所谓的设置当前坐标,其实就是设置x,y的开始地址。和上面的设置方法一样,这时可以省略不设置x,y的结束地址。

3,最后说一下,所谓的显示字符是怎么回事。以及1206,1608字符是什么意思,画了个图,大家都明白。

如果有哪里我理解错了,请指正我。

STM32F4 FSMC TFTLCD

STM32F4 FSMC TFTLCD_oshan2012的博客-CSDN博客

MCU:STM32F407ZGT6

4.3寸TFTLCD

LCD驱动芯片:NT35510

34个引脚说明:

序号名称说明连接MCU引脚
1CSLCD片选信号(低电平有效)FSMC_NE4 PG12    127脚
2RS命令/数据控制信号(0:命令 1:数据)FSMC_A6  PF12    50
3WR写使能信号(低电平有效)FSMC N WE PD5    119
4RD读使能信号(低电平有效)FSMC_NOE  PD4    118
5RST复位信号(低电平有效)NRST             25
6D0双向数据总线FSMC_D0   PD14   85
7D1双向数据总线FSMC_D1   PD15   86
8D2双向数据总线FSMC_D2   PD0    114
9D3双向数据总线FSMC_D3   PD1    115
10D4双向数据总线FSMC_D4   PE7    58
11D5双向数据总线FSMC_D5   PE8    59
12D6双向数据总线FSMC_D6   PE9    60
13D7双向数据总线FSMC_D7   PE10   63
14D8双向数据总线FSMC_D8   PE11   64
15D9双向数据总线FSMC_D9   PE12   65
16D10双向数据总线FSMC_D10  PE13   66
17D11双向数据总线FSMC_D11  PE14   67
18D12双向数据总线FSMC_D12  PE15   68
19D13双向数据总线FSMC_D13  PD8    77
20D14双向数据总线FSMC_D14  PD9    78
21D15双向数据总线FSMC_D15  PD10   79
22,26,27GND地线
23BL_CTR背光控制引脚(高电平点亮,低电平关闭)PB15             76
24,25VCC3.3主电源供电 3.3V
28VCC5背光供电 5V
29MISO电容触摸屏没用到
30MOSI电容触摸屏 IIC_SDA信号,(CT_SDA)PF11             39
31PEN电容触摸屏中断信号 (CT_INT)PB1              47
32BUSY电容触摸屏 没用到
33CS电容触摸屏复位信号(CT_RST)PC13             7
34CLK电容触摸屏 IIC_SCL信号 (CT_SCL)PB0              46

 

 

 

 

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值