OpenEdv-开源电子网

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

stm32f4 fmsc的地址只能是32位的吗?为什么从地址4开始写,总线上地址实际为2?

[复制链接]

4

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-26
在线时间
53 小时
发表于 2016-9-11 15:45:46 | 显示全部楼层 |阅读模式
1金钱
求高手门帮忙解答下
1、stm32f4 fmsc的地址只能是32位的吗?2、如果是32位的,是不是说在地址1上写一个数据,地址线会处理两次吗?
3、FSMC_SRAM_WriteBuffer(temp,4,20); 我在地址4上开始写数据,实际上是从地址2上开始写的,为什么呢?


最佳答案

查看完整内容[请看2#楼]

2,16位地址外扩的sram,如果是32位数据访问,最长可能引起三次数据读写。最短是2次。 当地址是偶数的时候,那就是2次访问。当地址是奇数的时候,那就是3次访问,才可以完成一个32位数据的读写操作。 你在地址4,写入一个32位数据,那么就是2次访问,第一次在地址4写入16位数据。第二次在地址5写入16位数据。 3,取决于你的FSMC_SRAM_WriteBuffer实现方式。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-9-11 15:45:47 | 显示全部楼层
wy212235 发表于 2016-9-11 23:33
谢谢指导
第二个问题是这样 ,地址是32位的,我的地址线接的是16位的,比如说我要写地址1,实际上在地址 ...

2,16位地址外扩的sram,如果是32位数据访问,最长可能引起三次数据读写。最短是2次。
当地址是偶数的时候,那就是2次访问。当地址是奇数的时候,那就是3次访问,才可以完成一个32位数据的读写操作。
你在地址4,写入一个32位数据,那么就是2次访问,第一次在地址4写入16位数据。第二次在地址5写入16位数据。
3,取决于你的FSMC_SRAM_WriteBuffer实现方式。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-9-11 16:01:58 | 显示全部楼层
本帖最后由 xuande 于 2016-9-11 16:03 编辑


1、默认就是32位,如果不足会自动在高位补0。
2、听不懂,两次指什么?
3、可能你的数据宽度有问题。
     貌似是这样:
     数据宽度是32位,那么你发送A0=1,实际也会A0=1;
     但如果宽度是16位,那么A1线会出现A0的数据,A0线会被抛弃。
     具体我也没搞清,供参考;反正有错位。内部有个切换电路,好像是为了兼容几种数据宽度。


回复

使用道具 举报

4

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-26
在线时间
53 小时
 楼主| 发表于 2016-9-11 23:33:43 | 显示全部楼层
本帖最后由 wy212235 于 2016-9-11 23:36 编辑
xuande 发表于 2016-9-11 16:01
1、默认就是32位,如果不足会自动在高位补0。
2、听不懂,两次指什么?
3、可能你的数据宽度有问题。

谢谢指导
第二个问题是这样 ,地址是32位的,我的地址线接的是16位的,比如说我要写地址1,实际上在地址线上表现出来的,是不是,第一次16根地址线都是0,第二次地址线最低位为1,这样组成32位的地址1?不知道是不是这样?
不知道我这样表示清楚了没

第三个问题 我在地址4上写数据,实际上,数据是写在地址2上的,不知道为什么。但是直接把数组定义在外部sram上,好像没有这个问题,不知道为什么?
回复

使用道具 举报

4

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2016-5-26
在线时间
53 小时
 楼主| 发表于 2016-9-14 08:37:32 | 显示全部楼层
正点原子 发表于 2016-9-11 15:45
2,16位地址外扩的sram,如果是32位数据访问,最长可能引起三次数据读写。最短是2次。
当地址是偶数的时 ...

我用的是
void FMC_SRAM_WriteBuffer_Word2(u16* pBuffer,u32 WriteAddr,u32 n)
{
        for(;n!=0;n--)  
        {                                                                                    
                *(vu16*)(Bank1_SRAM2_ADDR+WriteAddr)=*pBuffer;          
                WriteAddr+=2;
                pBuffer++;
        }   
}
在地址4上写16位的数据
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6252
金钱
6252
注册时间
2018-6-27
在线时间
534 小时
发表于 2021-9-14 08:14:20 | 显示全部楼层
学习学习,学习学习。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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