码迷,mamicode.com
首页 > 其他好文 > 详细

stm32的FSMC

时间:2014-07-06 22:30:08      阅读:425      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   数据   os   

    之前用的stm32f103rbt6,它是100引脚以内的,不带FSMC。驱动液晶屏或者SRAM要自己写时序方面的程序,比较麻烦。后来换成stm32f103zet6,带有FSMC。不过在学习FSMC的时候遇到了一个问题。

bubuko.com,布布扣

最后两句一开始不理解,后来查阅了一些资料,终于搞明白了。

    首先说明一些常识:地址总线宽度只是代表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

stm32的FSMC,布布扣,bubuko.com

stm32的FSMC

标签:style   blog   http   color   数据   os   

原文地址:http://www.cnblogs.com/yibanshouxi/p/3824510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!