OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3895|回复: 1

关于FSMC地址线的问题

[复制链接]

17

主题

231

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2085
金钱
2085
注册时间
2016-8-8
在线时间
362 小时
发表于 2016-11-29 14:04:49 | 显示全部楼层 |阅读模式
这是论坛里的一个精华帖,有几处标红的字没弄明白,求大神帮忙解答


首先说一个前提:STM32 单片机的一个地址(如:0x20000000)是一个字节 (?)
也就是说如果定义一个16位数组 u16 temp[5]  如果temp对应的地址是0x00000000 那么temp+1对应的地址是0x00000002 (地址是加2)

假设此时我们有一个 64K*8bit 的sram
那很简单 stm32的A0~A15 与存储器A0~A15连接 大家很容易理解

若此时是 64K*16bit 的sram
也就是此时sram的一个地址对应两个字节 但是stm32是一个地址一个字节 这就出现了对准的问题
如果我们的地址线依然是stm32A0~A15 和 存储器的A0~A15 连接
如果stm32要从sram中读取前面提到数组中的temp[1]
stm32会给出0x0002(二进制地址
0000000000000010b) 可是对于我们这个sram来说 读到却是temp[2](这个为什么?),因为sram一个地址就是一个16位数据
为了解决这个问题 我们只需要在给sram送地址时 右移一位 再送地址 即可(sram的一个地址对应stm32两个地址的数据)
比如读取0x0002 右移一位(即除2)为0x0001(0000000000000010b) 此时对应的就是temp[1]
黑夜给了我黑色的眼睛,我却用它来寻找白花花的银子,黄灿灿的金子,以及红彤彤的毛爷爷
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2016-12-20
在线时间
40 小时
发表于 2017-2-9 11:54:56 | 显示全部楼层
请教下,这个给SRAM送地址,在具体的程序编写是怎么来操作的呢?就是地址右移一位吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 22:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表