标题:
STM32 外部 SRAM(2)
[打印本页]
作者:
yuyang911220
时间:
2014-12-30 22:31
标题:
STM32 外部 SRAM(2)
FSMC_NORSRAMInitStructure
.
FSMC_Bank
=
FSMC_Bank1_NORSRAM3
;
// 这里我们使用NE3 ,也就对应BTCR[4],[5]。
FSMC_NORSRAMInitStructure
.
FSMC_DataAddressMux
=
FSMC_DataAddressMux_Disable
;
FSMC_NORSRAMInitStructure
.
FSMC_MemoryType
=
FSMC_MemoryType_SRAM
;
// FSMC_MemoryType_SRAM; //SRAM
FSMC_NORSRAMInitStructure
.
FSMC_MemoryDataWidth
=
FSMC_MemoryDataWidth_16b
;
//存储器数据宽度为16bit
FSMC_NORSRAMInitStructure
.
FSMC_BurstAccessMode
=
FSMC_BurstAccessMode_Disable
;
// FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure
.
FSMC_WaitSignalPolarity
=
FSMC_WaitSignalPolarity_Low
;
FSMC_NORSRAMInitStructure
.
FSMC_AsynchronousWait
=
FSMC_AsynchronousWait_Disable
;
FSMC_NORSRAMInitStructure
.
FSMC_WrapMode
=
FSMC_WrapMode_Disable
;
FSMC_NORSRAMInitStructure
.
FSMC_WaitSignalActive
=
FSMC_WaitSignalActive_BeforeWaitState
;
FSMC_NORSRAMInitStructure
.
FSMC_WriteOperation
=
FSMC_WriteOperation_Enable
;
//存储器写使能
FSMC_NORSRAMInitStructure
.
FSMC_WaitSignal
=
FSMC_WaitSignal_Disable
;
FSMC_NORSRAMInitStructure
.
FSMC_ExtendedMode
=
FSMC_ExtendedMode_Disable
;
// 读写使用相同的时序
FSMC_NORSRAMInitStructure
.
FSMC_WriteBurst
=
FSMC_WriteBurst_Disable
;
FSMC_NORSRAMInitStructure
.
FSMC_ReadWriteTimingStruct
=
&
readWriteTiming
;
FSMC_NORSRAMInitStructure
.
FSMC_WriteTimingStruct
=
&
readWriteTiming
;
//读写同样时序
FSMC_NORSRAMInit
(
&
FSMC_NORSRAMInitStructure
)
;
//初始化FSMC配置
FSMC_NORSRAMCmd
(
FSMC_Bank1_NORSRAM3
,
ENABLE
)
;
// 使能BANK3
}
//在指定地址开始,连续写入n个字节.
//pBuffer:字节指针
//WriteAddr:要写入的地址
//n:要写入的字节数
void
FSMC_SRAM_WriteBuffer
(
u8
*
pBuffer
,
u32 WriteAddr
,
u32 n
)
{
for
(
;
n!=0
;
n
-
-
)
{
*
(
vu8
*
)
(
Bank1_SRAM3_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_SRAM3_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
;
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0