OpenEdv-开源电子网

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

FSMC读写问题

[复制链接]

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
发表于 2014-2-8 09:28:11 | 显示全部楼层 |阅读模式
//在指定地址开始,连续写入n个字节.
//pBuffer:字节指针
//WriteAddr:要写入的地址
//n:要写入的字节数
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
    for(;n!=0;n--)  
    {                                            
        *(vu8*)(Bank1_SRAM4_ADDR+WriteAddr)=*pBuffer;      
        WriteAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1.
        pBuffer++;
    }   
}                                                                                
//在指定地址开始,连续读出n个字节.
//pBuffer:字节指针
//ReadAddr:要读出的起始地址
//n:要写入的字节数
void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n)
{
    for(;n!=0;n--)  
    {                                                
        *pBuffer++=*(vu8*)(Bank1_SRAM4_ADDR+ReadAddr);    
        ReadAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1.
    }  
}
////////////////////////////////////////////////////////////////////////////////////////
//测试函数
//在指定地址写入1个字节
//addr:地址
//data:要写入的数据
void fsmc_sram_test_write(u8 data,u32 addr)
{               
    FSMC_SRAM_WriteBuffer(&data,addr,1);//写入1个字节
}
//读取1个字节
//addr:要读取的地址
//返回值:读取到的数据
u8 fsmc_sram_test_read(u32 addr)
{
    u8 data;
    FSMC_SRAM_ReadBuffer(&data,addr,1);
    return data;
}    


原子哥 这段程序是怎么编写出来的?能帮忙解释一下吗?谢谢~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-8 10:10:19 | 显示全部楼层
回复【楼主位】yuanhe249:
---------------------------------
不解,仔细看FSMC介绍
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 11:09:49 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
就是因为看不懂才问的
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-8 11:10:17 | 显示全部楼层
回复【3楼】yuanhe249:
---------------------------------
哪里看不懂啦
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-8 11:12:24 | 显示全部楼层
这个说的比较明白了,仔细看看

STM32F2技术培训_灵活的静态存储控制器_FSMC.pdf

3.29 MB, 下载次数: 194

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 11:15:22 | 显示全部楼层
回复【5楼】Badu_Space:
---------------------------------
好的  谢谢!
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 15:44:01 | 显示全部楼层
回复【5楼】Badu_Space:
---------------------------------
大哥  我读出来的数据为什么是重复的呢??
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-2-8 15:56:58 | 显示全部楼层
回复【7楼】yuanhe249:
---------------------------------
怎么说
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 16:50:21 | 显示全部楼层
回复【楼主位】yuanhe249:
---------------------------------
这是库函数的代码.
       *pBuffer++=*(vu8*)(Bank1_SRAM4_ADDR+ReadAddr);    
        ReadAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1.
这里实际加1即可.

ReadAddr+=1; 
因为我们用的是8位数据宽度了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-2-8 19:50:15 | 显示全部楼层
回复【楼主位】yuanhe249:
---------------------------------
这里的代码有问题,加1就行了
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 20:59:17 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
8位的用ReadAddr+=2;16位的用ReadAddr+=1?我这么理解对吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 21:25:29 | 显示全部楼层
回复【11楼】yuanhe249:
---------------------------------
刚好反了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 21:56:03 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
我用的是16位的D0~D15     地址A0~A13  片选是NE4  那我用ReadAddr+=2;是对的啊
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-8 22:05:09 | 显示全部楼层

原子哥  你看看这个读出的数据都是重复的  我主要不知道这个为啥?这个能跟我硬件有关系吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-8 23:19:54 | 显示全部楼层
回复【14楼】yuanhe249:
---------------------------------
你这是在战舰板测试的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2011-9-6
在线时间
37 小时
 楼主| 发表于 2014-2-9 07:22:38 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
不是,是我自己做的板子
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 21:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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