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:重启 ...
随机推荐
- Unity3d有关图形尺寸大小的注意事项
主要参考了官方文档,然后根据个人的理解撰写该文.Unity3D支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT(但根据本人的亲手测试,U ...
- Codeforces 56D Changing a String
http://codeforces.com/contest/56/problem/D 题目大意: 一个字符串变为目标字符串,可以执行插入,置换和删除3种操作,求最少操作数. 思路:dp[i][j]代表 ...
- Builder模式的几个要点
1.Builder模式主要用于“分步骤构建一个复杂的对象”.在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化.2.变化点在哪里,封装哪里——Builder模式主要在于应对“复杂对象各 ...
- logstash 发送慢页面到zabbix告警
input { file { type => "zj_frontend_access" path => ["/data01/applog_backup/zjz ...
- 转:Android 测试 Appium、Robotium、monkey等框架或者工具对比
原文地址:http://demo.netfoucs.com/u012565107/article/details/36419297# 1. Appium测试 (功能测试,用户接受度测试,黑盒测试) - ...
- web.xml配置DispatcherServlet
1. org.springframework.web.servlet.DispatcherServlet 所在jar包: <dependency> <groupId>org.s ...
- kvm 启动libvirtd市出现错误
kvm 启动libvirtd市出现错误: /etc/init.d/libvirtd start启动 libvirtd 守护进程:libvirtd: relocation error: libvirtd ...
- js图片放大镜特效代码
<script language="JavaScript"> <!-- var srcX = 1024; //原图长宽 var srcY = 768; var b ...
- Asp.Net Mvc5新特性
One ASP.NET:统一平台 BootStrap:免费Css响应式页面 路由标记属性:简单,控制器,操作,前缀,参数,URL ASP.NET WEB API 2:路由标记属性,Oauth2.0,O ...
- C#读取XML配置文件
DataSource.xml文件,要放在bin/debug/目录下: <?xml version="1.0" encoding="utf-8" ?> ...