OpenEdv-开源电子网

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

STM32F4的外部SRAM实验

[复制链接]

21

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2015-12-4
在线时间
10 小时
发表于 2015-12-25 16:33:44 | 显示全部楼层 |阅读模式
5金钱
在SRAM中,我的函数是可以把原来的数据写进去,然后再读回来,但是,
我的SRAM是1M的,在基地址0x68000000的基础上偏移超过1M之后,数据依然可以读回来,这是怎么回事?
部分代码如下:
sram.c
[mw_shl_code=c,true]#include "sys.h" #include "stm32f4xx.h" /* 作用:往某一个地址写一个字节的数据 */ void Sram_Write(u32 address,u8 c){ u32 *p ; p = ((u32 *)(address + 0x68000000)); (*p) = c; } /* 作用:从某一个地址读一个字节的数据 */ u8 Sram_Read(u32 address){ u32 *p; p = ((u32 *)(address + 0x68000000)); return (*p); }[/mw_shl_code]


test.c
[mw_shl_code=c,true]#include "sys.h" #include "delay.h" #include "led.h" #include "usart.h" #include "lcd.h" #include "beep.h" #include "sram.h" /* 本实验的目的是: 从外部的SRAM的某一个地址中写入一个字节的数据, 然后从这个地址中再把这个数据读取出来显示在串口上, 根据写和读的数据是否一致来判断我们的SRAM是否驱动成功了; */ int main(void){ Stm32_Clock_Init(336,8,2,7);//设置时钟,168MHZ delay_init(168); //初始化延时函数 LED_Init(); uart_init(84-1,115200); lcd_init(); Sram_Init(); while(1){ u8 i; /* 1MB = 1024*1024 = 0X100 000; 当访问0x100 000地址时,这地址已经不再SRAM上了,但是还可以访问得到,这是为什么? */ Sram_Write(0x100000,30); i = Sram_Read(0x100000); printf("i=%d\r\n",i); delay_ms(1000); } } [/mw_shl_code]
注:其输出结果为30,说明写和读正确;但是超出其地址访问,为何还能访问呢?

最佳答案

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

高位地址丢弃,低位有效。所以,当然可以读写。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-25 16:33:45 | 显示全部楼层
高位地址丢弃,低位有效。所以,当然可以读写。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-1-8
在线时间
1 小时
发表于 2016-1-8 09:50:37 | 显示全部楼层
请问探索版里,原理图里的LCD和SRAM为什么可以共用FSMC_A6地址线呢。不会有冲突吗,还可以用其他口FSMC_20之类的吗。不是很理解,麻烦大家了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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