stm32的FSMC
之前用的stm32f103rbt6,它是100引脚以内的,不带FSMC。驱动液晶屏或者SRAM要自己写时序方面的程序,比较麻烦。后来换成stm32f103zet6,带有FSMC。不过在学习FSMC的时候遇到了一个问题。
最后两句一开始不理解,后来查阅了一些资料,终于搞明白了。
首先说明一些常识:地址总线宽度只是代表CPU寻址范围大小,与CPU多少位无关,也就是说32位CPU地址线不一定是32根。
stm32的FSMC寻址以字节为单位,也就是说如果定义一个16位数组 u16 temp[5] 如果temp对应的地址是0x00000000 那么temp+1对应的地址是0x00000002 (地址是加2)
IS62WV51216是16位宽512K容量的SRAM,也就是它的一个地址对应两个字节,但STM32是一个地址一个字节,这就出现了对准问题。如果我们的地址线依然是stm32A0~A15 和 存储器的A0~A15 连接, 如果stm32要从sram中读取前面提到数组中的temp[1]。stm32会给出0x0002(二进制地址0000000000000010b) 可是对于我们这个sram来说 读到却是temp[2],因为sram一个地址就是一个16位数据 。为了解决这个问题, 我们只需要在给sram送地址时,右移一位,再送地址即可(sram的一个地址对应stm32两个地址的数据)。
而为了给用户提供方便 如果你选择的是16位宽度的sram FSMC会在你送地址的时候自动为你做右移一位的操作
此时会有另外一个问题 每次都右移一位 A0没用吗 也即只能读写偶地址的数据吗?
这也就是NBL0和NBL1的作用了 如果你要进行字节操作
如stm32发送地址0x0001读取一个字节 右移一位对应的是sram地址0x0000处的16位数据 FSMC会根据AO 来控制NBLO和NBL1为10 读取高字节数据
所以呢,偶字节读写时仅NBL0有效,奇字节读写时仅NBL1有效 字读写都有效(低电平有效)。
参考资料来源:http://www.openedv.com/posts/list/33759.htm
SRAM用了FSMC的UB/LB信号,控制字节高地位了。
因为SRAM是16位的,当你要读写8位数据的时候,UB/LB就发挥作用了,比如在SRAM的地址0写入1个8位的字节,那么LB会输出有效,而UB则保持不变(高电平),表示写入地址0的低8位,写法就是:
*(vu8*)(Bank1_SRAM3_ADDR+0)=0Xaa;//0XAA是你想写入的字节。
而如果要在SRAM地址0写入高8位,那么对于STM32来说,地址就相应加1即可,即:
*(vu8*)(Bank1_SRAM3_ADDR+1)=0XAA;
此时LB会输出高电平,UB会输出有效电平(低电平),表示写入地址0,的高字节。
这样,对STM32来说,地址就是连续的了,0,1,2,3,4,5,都是合法的了,自然就不需要你的地址右移对齐了,硬件通过UB/LB去控制了。
那这个地址+1或者+2要根据写入数据是8位还是16位来确定.
stm32的FSMC的更多相关文章
- STM32的FSMC总线驱动ili9341,掉电重启无法正常显示的问题
问题描述 通过STM32的FSMC总线驱动ili9341,程序调试和刚下载的时候,显示完全正常.可是就在我掉电关机,重新启动的时候就完全跑飞了.这令我非常疑惑.以下是我的FSMC总线配置程序, sta ...
- STM32接口FSMC/FMC难点详解
STM32接口FSMC/FMC难点详解 转载 http://blog.sina.com.cn/s/blog_808bca130102x94k.html STM32F767的FMC将外部存储器划分为 ...
- 【转】STM32的FSMC详解
STM32的FSMC真是一个万能的总线控制器,不仅可以控制SRAM,NOR FLASH,NAND FLASH,PC Card,还能控制LCD,TFT. 一般越是复杂的东西,理解起来就很困难,但是使用上 ...
- (十)stm32中FSMC的使用(用于LCD)
FSMC全称“静态存储器控制器”. 使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线. (1)当存储数据设为8位时, ...
- STM32的FSMC总线复用调试笔记
调试FSMC总线复用模式时主要遇到以下几点: 1.寄存器的配置,首先注意使能地址数据复用,其次要存储器类型选择FSMC_MemoryType_NOR,否则出现不了NADV信号. FSMC_NORSRA ...
- STM32之FSMC
FSMC全称“静态存储器控制器”. 使用FSMC控制器后,可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC提供的FSMC_D[15:0]作为数据总线. (1)当存储数据设为8位时, ...
- STM32通过FSMC驱动3.2寸液晶屏实现的音乐频谱
视频演示: http://player.youku.com/player.php/sid/XNDcyMDgwMTE2/v.swf 源码下载: lattice_ music _tft.rar(1.42 ...
- FSMC stm32
1.FSMC机制 FSMC(Flexihie Static Memory Controller,可变静态存储控制器)是STM32系列中内部集成256 KB以上FlaSh,后缀为xC.xD和xE的高存储 ...
- stm32 fsmc 功能讲解(转)
LCD有如下控制线:CS:Chip Select 片选,低电平有效RS:Register Select 寄存器选择WR:Write 写信号,低电平有效RD:Read 读信号,低电平有效RESET:重启 ...
随机推荐
- CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结
cmake -G"Visual Studio 9 2008 Win64" 以上命令得用cd命令切换到顶层CMakeLists.txt的当前目录,才能生效 以下是CMakeLists ...
- 【转】GitHub问题之恢复本地被删除的文件
原文网址:http://blog.csdn.net/iaiti/article/details/39557951 折腾了真久,GitHub commit之后,我手痒把本地的一个文件给删了,然后一直gi ...
- poj:2992 因子数量
题意: 求 组合数c(n,k)的因子数量 由算术基本定理很容易求得,不过第一次却T了,加了好多预处理,o1查询,才过 #include <iostream> #include <st ...
- 【剑指offer】面试题39扩展:平衡二叉树
题目: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 思路: 直观的思路是,判断根结点的左子树.右子树高度差是否小于1. 为避免多次访问同一结点,应该用后序遍历的方式访问. 注意:加号优先级高于条件 ...
- (转)iOS7界面设计规范(12) - UI基础 - 品牌
重要:这是针对于正在开发中的API或技术的预备文档(预发布版本).虽然该文档在技术精确度上经过了严格的审核,但并非最终版本,仅供苹果开发者计划的注册会员使用.苹果提供这份机要文档的目的,是帮助你按照文 ...
- PC-JS小技巧
# 事件源对象 event.srcElement.tagName event.srcElement.type # 捕获释放 event.srcElement.setCapture(); event.s ...
- Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
Android 系统版本号非常多,较新的 4.4 ,较老的 2.3 ,都有人用. Qt on Android 开发的 Android 应用.默认在 Android 设备上是非全屏的. 而有些应用的需求 ...
- SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第三天任务攻略
第三关也不是一般的难呐,那么继续写一下解题过程(第四关会是什么样呢?). 高速传送门:http://segmentfault.com/game/3 在用我想到的方法(booth算法.矩阵变换.各种CP ...
- OpenMp 基本
OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Di ...
- Linux gdb调试入门
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧! GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具. ...