打印
[STM32F4]

ICore3平台stm32F4 FSMC demo有疑问。

[复制链接]
1009|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
菜狗|  楼主 | 2017-8-23 16:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 菜狗 于 2017-8-23 16:27 编辑

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




沙发
菜狗|  楼主 | 2017-8-23 16:07 | 只看该作者
本帖最后由 菜狗 于 2017-8-23 16:30 编辑

读写代码为




使用特权

评论回复
板凳
菜狗|  楼主 | 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位数。

使用特权

评论回复
6
zhuotuzi| | 2017-8-24 16:25 | 只看该作者
没看懂啊。。

使用特权

评论回复
7
菜狗|  楼主 | 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位数,运行结果的竟然还是正确的,无法理解,不知道是我想错了额,还是他写错了。

使用特权

评论回复
8
戈卫东| | 2017-8-25 10:30 | 只看该作者
A16-24不是9条线么?可以给出512个地址

使用特权

评论回复
9
戈卫东| | 2017-8-25 10:32 | 只看该作者
放弃奇数地址。。。。。。。MCU或许放弃A0,但电路没有,A16是有效信号。

使用特权

评论回复
10
菜狗|  楼主 | 2017-8-25 11:09 | 只看该作者
本帖最后由 菜狗 于 2017-8-25 11:10 编辑
戈卫东 发表于 2017-8-25 10:32
放弃奇数地址。。。。。。。MCU或许放弃A0,但电路没有,A16是有效信号。

A16当然是有效地址,必须联的。放弃的是奇数地址,000000000是偶数地址的。按五楼的那个图,不管是8位还是16位对应的存储大小都是一样的对不。9根线对应的是512字节,我没理解错吧。

使用特权

评论回复
11
戈卫东| | 2017-8-25 12:02 | 只看该作者
菜狗 发表于 2017-8-25 11:09
A16当然是有效地址,必须联的。放弃的是奇数地址,000000000是偶数地址的。按五楼的那个图,不管是8位还是 ...

还要看宽度。
16BIT宽,可以是512X16BIT
32BIT宽,可以是512X32BIT

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:www.saltarea.com

5

主题

65

帖子

0

粉丝