STM32F4的外部SRAM实验

2019-07-21 00:22发布

在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 ",i); delay_ms(1000); } } [/mw_shl_code] 注:其输出结果为30,说明写和读正确;但是超出其地址访问,为何还能访问呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-21 03:22
 精彩回答 2  元偷偷看……
qmj123
2楼-- · 2019-07-21 09:12
请问探索版里,原理图里的LCD和SRAM为什么可以共用FSMC_A6地址线呢。不会有冲突吗,还可以用其他口FSMC_20之类的吗。不是很理解,麻烦大家了

一周热门 更多>