[STM32F4] ICore3平台stm32F4 FSMC demo有疑问。

[复制链接]
 楼主| 菜狗 发表于 2017-8-23 16:06 | 显示全部楼层 |阅读模式
本帖最后由 菜狗 于 2017-8-23 16:27 编辑

我需要使用FSMC功能,要修改程序,但是对demo不太理解。
开发板附带例程,使能 FSMC Bank1_SRAM1 Bank
地址线复用了A16-A24,没有复用A25(PG14)
QQ截图20170823162515.jpg



 楼主| 菜狗 发表于 2017-8-23 16:07 | 显示全部楼层
本帖最后由 菜狗 于 2017-8-23 16:30 编辑

读写代码为
QQ截图20170823162805.jpg
QQ截图20170823162352.jpg


 楼主| 菜狗 发表于 2017-8-23 16:09 | 显示全部楼层
本帖最后由 菜狗 于 2017-8-23 16:28 编辑



offset从0到512,偏移17位加基地址。
这样的话,使用的地址线不是17,18,19,20,21,22,23,24总共8位,这是怎么写够512(2^9)个数的?@王紫豪
 楼主| 菜狗 发表于 2017-8-23 16:23 | 显示全部楼层
本帖最后由 菜狗 于 2017-8-23 16:29 编辑

28_fsmc.zip (4.33 MB, 下载次数: 5)
 楼主| 菜狗 发表于 2017-8-24 14:49 | 显示全部楼层
没人吗?我换种说法,这个程序复用了FSMC 地址线16-24A 脚,对应的存储器空间应该只有512个Byte,但是main函数写进去了512个16位数。
QQ截图20170824144613.jpg
zhuotuzi 发表于 2017-8-24 16:25 | 显示全部楼层
没看懂啊。。
 楼主| 菜狗 发表于 2017-8-25 10:13 | 显示全部楼层

就是直接映射外部sram。有26根地址线,16或者8位数据线。如果配置好后,直接stm32的A0连接外部sram的A0,A1连A1,A2连A2......这样按顺序连,你可以直接使用指针访问外部sram,比如你想操作外部sram的0地址,就可以直接读写*(unsigned char *)0x6000 0000;这是8位数据模式,如果是16位数据模式,只使用偶数地址*(unsigned short int *)0x6000 0000,*(unsigned short int *)0x6000 0010,*(unsigned short int *)0x6000 0100.....;这个例子是用stm A16位连sram的A0,A17连sram A1.........,stm32的A24连A9,所以offset<<16,采用了16位数据为模式,在偏移1位,最终sram的地址offset映射到stm32地址位0x60000000+offset<<17,问题是A16-A24,放弃奇数地址,只有256个地址,程序缺写了512个16位数,运行结果的竟然还是正确的,无法理解,不知道是我想错了额,还是他写错了。
戈卫东 发表于 2017-8-25 10:30 | 显示全部楼层
A16-24不是9条线么?可以给出512个地址
戈卫东 发表于 2017-8-25 10:32 | 显示全部楼层
放弃奇数地址。。。。。。。MCU或许放弃A0,但电路没有,A16是有效信号。
 楼主| 菜狗 发表于 2017-8-25 11:09 | 显示全部楼层
本帖最后由 菜狗 于 2017-8-25 11:10 编辑
戈卫东 发表于 2017-8-25 10:32
放弃奇数地址。。。。。。。MCU或许放弃A0,但电路没有,A16是有效信号。

A16当然是有效地址,必须联的。放弃的是奇数地址,000000000是偶数地址的。按五楼的那个图,不管是8位还是16位对应的存储大小都是一样的对不。9根线对应的是512字节,我没理解错吧。
戈卫东 发表于 2017-8-25 12:02 | 显示全部楼层
菜狗 发表于 2017-8-25 11:09
A16当然是有效地址,必须联的。放弃的是奇数地址,000000000是偶数地址的。按五楼的那个图,不管是8位还是 ...

还要看宽度。
16BIT宽,可以是512X16BIT
32BIT宽,可以是512X32BIT
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:www.saltarea.com

5

主题

65

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:www.saltarea.com

5

主题

65

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部