1、LCD液晶显示零死角玩转STM32淘宝:论坛: 扫描进入淘宝店铺主讲内容显示器简介液晶控制原理秉火3.2寸液晶屏简介使用FSMC模拟8080时序参考资料:零死角玩转STM32“LCD液晶显示”章节NOR FLASH时序结构体FSMC初始化结构体LCD液晶显示使用STM32的FSMC模拟8080接口时序ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率太低,STM32提供了一种特别的控制方法使用FSMC接口实现8080时序。在前面的FSMC扩展外部SRAM章节中了解到STM32的FSMC外设可以用于控制扩展的外部存储器,而MCU对液晶屏的操作实际上就是把显
2、示数据写入到显存中,与控制存储器非常类似,且8080接口的通讯时序完全可以使用FSMC外设产生,因而非常适合使用FSMC控制液晶屏。LCD液晶显示FSMC简介简介LCD液晶显示控制LCD时,适合使用FSMC的NORPSRAM模式,它与前面使用FSMC控制SRAM的稍有不同,控制SRAM时使用的是模式A,而控制LCD时使用的是与NOR FLASH一样的模式B,所以我们重点分析框图中NOR FLASH控制信号线部分。FSMC信号名称信号名称信号方向信号方向功能功能CLK输出时钟(同步突发模式使用)A25:0输出地址总线D15:0输入/输出双向数据总线NEx输出片选,x = 1.4NOE输出输出使能
3、NWE输出写使能NWAIT输入NOR闪存要求FSMC等待的信号NADV输出地址、数据线复用时作锁存信号在控制LCD时,使用的是类似异步、地址与数据线独立的NOR FLASH控制方式,所以实际上CLK、NWAIT、NADV引脚并没有使用到。LCD液晶显示FSMC NOR/PSRAM中的模式B的写时序如下图:根据STM32对寻址空间的地址映射,地址0 x6000 0000 0 x9FFF FFFF是映射到外部存储器的,而其中的0 x6000 0000 0 x6FFF FFFF则是分配给NOR FLASH、PSRAM这类可直接寻址的器件。LCD液晶显示当FSMC外设被配置成正常工作,并且外部接了NO
4、R FLASH时,若向0 x60000000地址写入数据如0 xABCD,FSMC会自动在各信号线上产生相应的电平信号,写入数据。FSMC会控制片选信号NE1选择相应的NOR 芯片,然后使用地址线A25:0输出0 x60000000,在NWE写使能信号线上发出低电平的写使能信号,而要写入的数据信号0 xABCD则从数据线D15:0输出,然后数据就被保存到NOR FLASH中了。LCD液晶显示用用FSMC模拟模拟8080时序时序对比FSMC NOR/PSRAM中的模式B时序与ILI9341液晶控制器芯片使用的8080时序可发现,这两个时序是十分相似的(除了FSMC的地址线A和8080的D/CX线
5、,可以说是完全一样)LCD液晶显示FSMC-NOR信号线信号线功能功能8080信号线信号线功能功能NEx片选信号CSX片选信号NWR写使能WRX写使能NOE读使能RDX读使能D15:0数据信号D15:0数据信号A25:0地址信号D/CX数据/命令选择LCD液晶显示对于FSMC和8080接口,前四种信号线都是完全一样的,仅仅是FSMC的地址信号线A25:0与8080的数据/命令选择线D/CX有区别。而对于D/CX线,它为高电平的时候表示数值,为低电平的时候表示命令,如果能使用FSMC的A地址线根据不同的情况产生对应的电平,那么就完全可以使用FSMC来产生8080接口需要的时序了。为了模拟出808
6、0时序,我们可以把FSMC的A0地址线(也可以使用其它A1/A2等地址线)与ILI9341芯片8080接口的D/CX信号线连接,那么当A0为高电平时(即D/CX为高电平),数据线D15:0的信号会被ILI9341理解为数值,若A0为低电平时(即D/CX为低电平),传输的信号则会被理解为命令。LCD液晶显示由于FSMC会自动产生地址信号,当使用FSMC向0 x6xxx xxx1、0 x6xxx xxx3、0 x6xxx xxx5这些奇数地址写入数据时,地址最低位的值均为1,所以它会控制地址线A0(D/CX)输出高电平,那么这时通过数据线传输的信号会被理解为数值;若向0 x6xxx xxx0 、0
7、 x6xxx xxx2、0 x6xxx xxx4这些偶数地址写入数据时,地址最低位的值均为0,所以它会控制地址线A0(D/CX)输出低电平,因此这时通过数据线传输的信号会被理解为命令,如下表:地址地址地址的二进制值地址的二进制值(仅列出仅列出低四位低四位)A0(D/CX)的电平的电平控制控制ILI9341时的意义时的意义0 x6xxx xxx100011 高电平D数值0 x6xxx xxx300111高电平D数值0 x6xxx xxx501011高电平D数值0 x6xxx xxx000000低电平C命令0 x6xxx xxx200100低电平C命令0 x6xxx xxx401000低电平C命令LCD液晶显示有了这个基础,只要配置好FSMC外设,然后在代码中利用指针变量,向不同的地址单元写入数据,就能够由FSMC模拟出的8080接口向ILI9341写入控制命令或GRAM的数据了。注意注意:在实际控制时,以上地址计算方式还不完整,还需要注意:在实际控制时,以上地址计算方式还不完整,还需要注意HADDR内部地址与内部地址与FSMC地址信号线的转换,关于这部分内容在代码讲解时再详细举例说地址信号线的转换,关于这部分内容在代码讲解时再详细举例说明明THANKS零死角玩转STM32论坛: 淘宝:扫描进入淘宝店铺