所以不用GPIO口直接驱动液晶,是因为这种方法速度太慢,而FSMC是用来外接各种存储芯片的,所以其数据通信速度是比普通GPIO口要快得多的。TFT-LCD 驱动芯片的读写时序和SRAM的差不多,所以就可以用FSMC四块中的SRAM块来驱动LCD。SRAM有数据线和地址线,所以FSMC跟它匹配同样也有数据线和地址线,而LCD数据线跟地址线共用,通信时用RS端来区分线上是数据还是指令,RS高是数据,RS低是指令。

其实这中间一开始最不理解就是与LCD的RS引脚相关的东西,那时候也不知道咋回事一直以为FSMC的地址线和数据线是共用的,导致我一直没明白怎么回事,昨天一看正点原子的探索者原理图才发现FSMC有数据线还有地址线,是分开的。驱动液晶的时候,数据线接液晶的并口,RS接到了FSMC的某个地址引脚。具体为什么这样接,也是我想着重记录的。

首先,FSMC是什么,FSMC我自己的理解就是,一个衔接CPU与外部存储的桥梁,它的功能呢就是你往相应的地址里写数据时候,你不需用软件来模拟外部存储芯片的读写时序,而只需配置好FSMC相关的时序寄存器,配置好相关寄存器之后,你只管往相应存储块中的地址里写数据就可以了。最直观的解释就看上边正点原子的一小段代码,代码中定义了一个结构体,然后强制性的把结构体的起始地址设在了0x6C000000 | 0x0000007E处。那么这个0x6C000000 | 0x0000007E地址是啥意思呢,其中0x6C000000是FSMC存储块1的区4起始地址,0x6C00007E为存储块1区4内的某个地址,你给LCD_REG赋值,就是往外部存储设备中的0x6C00007E地址处写数据,给LCD_RAM赋值,就是往0x6C00007F地址处写数据。这里是结构体,当然也可以是一个巨大的数组或其他数据类型。当然了,FSMC只是一个数据衔接部件,真正的存储芯片是需要通过引脚连接在FSMC的地址和数据引脚上的。存储芯片在指定地址写入数据的时候需要地址线来指定要写数据往哪个地址。也就是说上例中,往0x6C00007E中写数据的时候,地址线的低8位(0x7E)就是0111 1110。这就是FSMC的工作机制。

说完FSMC,下面说如何用FSMC的某跟地址线控制LCD的RS端。以RS连接到A6为例,TFT-LCD的数据是16位的,即读写一次数据为两个字节按字节编址的话就是所有的地址都是偶地址,LCD的显示RAM编址确实是按两个字节编址的。这样的话FSMC地址线上的0000 0001就代表AHB(FSMC是接到AHB总线上的)总线上的0000 0010,FSMC地址线上的0000 0010就代表AHB总线上的0000 0100,也就是说你在程序中写这个地址的时候总是要左移一位。造成这种现象的原因就是因为在配置FSMC传输数据位宽时设置成了16位。向LCD传输数据一次都是两个字节。所以对应上例,往地址0x6C00007E写数据,地址线的低8位并不是0111 1110,而是0011 1111。然后假如RS端连接在地址线A6端,那么也就是让A6端的高低来决定数据线上传输的是数据还是命令。上边说了,当往0x6C00007E地址(LCD_REG)写的时候,FSMC地址线低8位是0011 1111,A6(红色标出)为低电平,这时数据线上的是命令,所以写命令函数就是直接往LCD_REG写就行了,实际上就是为了让RS接低电平,当往0x6C00007F地址(LCD_RAM)中写时,FSMC地址线低8位是01000000,A6(红色标出)为高电平,这时数据线上是数据,所以写数据就直接往LCD_RAM中写,实际是为了让RS接高电平。

当然了,这里RS接的是A6,其他场合,RS可能接的是其他地址线,只需要根据上边的规律技巧来改变“0x6C000000 | 0x0000007E”中后者就可以了。这里这个RS的接法和用法很巧妙,摘自正点原子。

作者:z1512751703
来源:CSDN
原文:https://blog.csdn.net/z1512751703/article/details/78937117
版权声明:本文为博主原创文章,转载请附上博文链接!

FSMC原理通俗解释的更多相关文章

  1. Spring的IOC原理[通俗解释一下]

    Spring的IOC原理[通俗解释一下] 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图 ...

  2. [转]Spring的IOC原理[通俗解释一下]

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  3. Spring的IOC原理 通俗解释

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  4. 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...

  5. 小波变换(wavelet transform)的通俗解释(一)

    小波变换 小波,一个神奇的波,可长可短可胖可瘦(伸缩平移),当去学习小波的时候,第一个首先要做的就是回顾傅立叶变换(又回来了,唉),因为他们都是频率变换的方法,而傅立叶变换是最入门的,也是最先了解的, ...

  6. java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)

    一.Jdbc访问数据库步骤通俗解释(吃饭) 1)加载驱动 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServer”); 2) 与数据库建立连接 Co ...

  7. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用

    通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (2012-04-02 09:17:28) 转载▼   对于glLoadIdentity(), ...

  8. 图像处理中的数学原理具体解释21——PCA实例与图像编码

    欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...

  9. 图像处理中的数学原理具体解释20——主成分变换(PCA)

    欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...

随机推荐

  1. Net Core 分布式微服务框架

    Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...

  2. Spark Mllib里的Mllib基本数据类型(图文详解)

    不多说,直接上干货! Spark Mllib基本数据类型,根据不同的作用和应用场景,分为四种不同的类型 1.Local  vector : 本地向量集,主要向spark提供一组可进行操作的数据集合 2 ...

  3. spring的2种类型转换器

    spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...

  4. mysql查看各个表的大小

    information_schema 数据库,在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引 ...

  5. javascript 关于hashtable

    javascript 实现HashTable(哈希表) 一.javascript哈希表简介 javascript里面是没有哈希表的,一直在java,C#中有时候用到了这一种数据结构,javascrip ...

  6. 阿里云服务器Centos7安装FastDFS(一)

    安装步骤一 安装FastDFS需要安装:gcc.libevent.libfastcommon.FastDFS(包括tracker和storage) 安装gcc 判断是否安装了gcc gcc -V 如果 ...

  7. android pm命令

    把网络apk下载到盒子或者其他安卓设备上 1.adb push windows的原路径 android设备的路径 2.pm install android设备的路径 注意:这里pm命令是安卓设备才有的 ...

  8. markdown-Macdown

    #标题 [页面锚点](#name)   =>   <a name="name"></a>文字 **加粗**(Command-B) *斜体*(Comma ...

  9. 利用任务计划自动删除指定日期的SQLServer备份文件

    利用任务计划自动删除指定日期的SQLServer备份文件 命令FORFILES [/P pathname] [/M searchmask] [/S]         [/C command] [/D ...

  10. centos下无法直接删除乱码文件及文件夹解决方案

    不知道怎么回事今天在系统上发现有一个名字为“\”的文件,使用rm -f \ 无法删除,最后没办法只能使用文件的inode号进行删除,以下是相关步骤: [oracle@prod-db ~]$ ls -i ...