所以不用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. HDU 5883 F - The Best Path 欧拉通路 & 欧拉回路

    给定一个图,要求选一个点作为起点,然后经过每条边一次,然后把访问过的点异或起来(访问一次就异或一次),然后求最大值. 首先为什么会有最大值这样的分类?就是因为你开始点选择不同,欧拉回路的结果不同,因为 ...

  2. Redis特性之持久化机制

    持久化机制 Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化. Redis支持两种持久化方式: 1.snapshotting(快照)也是默认方式 ...

  3. TestNG ABC

    TestNG ABC 资源 官网 :http://testng.org/doc/index.html Maven示例 <dependency>             <groupI ...

  4. java 与 c#的 中 字符串比较“==”与“equals”的差异

    .net中,其字符串特有的驻留机制,保证了在同一进程中,相同字符序列的字符串,只有一个实例,这样能避免相同内容的字符串重复实例化,以减少性能开销. 先来回顾一下c#中的代码: public stati ...

  5. datatables添加长按事件

    长按事件 $.fn.longPress = function (fn) { var timeout = undefined; var $this = this; for (var i = 0; i & ...

  6. Git在Xcode中的配置与使用常见问题总结

    书接上回提出的Git在Xcode中的配置与使用常见问题4个问题 问题1,如何在Xcode中创建代码库,并添加和提交代码到代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在 ...

  7. SqlServer中提示和报错信息的翻译

    有时候遇到SqlServer一些报错需要上网查找解决方法,一些比较生僻的问题汉语搜索往往得不到想要的,就要使用英文在外网搜索.之前都是自己尝试翻译,或者使用错误码,或者找个英文版的数据库重现问题.有时 ...

  8. Vue.js-this详解

    this this 指向并不是在函数定义的时候确定的,而是在调用的时候确定的.换句话说,函数的调用方式(直接调用.方法调用.new调用.bind.call.apply.箭头函数)决定了 this 指向 ...

  9. VR/AR软件—Mirra测试(截至2017/11/13),使AR/VR创作更加便捷

    Mirra(截至2017/11/13)https://www.mirra.co/ 1.主要特点: 目前仅支持VR,不支持AR 在浏览器(仅支持chrome,firefox)上进行创作,但目前不能直接在 ...

  10. JS中的作用域和作用域链

    本文原链接:https://cloud.tencent.com/developer/article/1403589 前言 作用域(Scope) 1. 什么是作用域 2. 全局作用域和函数作用域 3. ...