STM32单片机用FSMC接口控制SRAM
扫描二维码
随时随地手机看文章
环境:
主机:WIN7
开发环境:MDK4.72
MCU:STM32F103ZE
说明:
sram型号:IS62WV51216BLL
连接方式:FSMC
大小:1M字节.512K * 16
源代码:
inf_sram.h
/*********************************************************************
*sram接口层头文件
*(c)copyright2013,jdh
*AllRightReserved
*文件名:inf_sram.h
*程序员:jdh
*修改日期:2013/10/10
*2013/10/11
**********************************************************************/
/*********************************************************************
*说明
*sram型号:IS62WV51216BLL
*连接方式:FSMC
*大小:1M字节.512K*16
**********************************************************************/
#ifndef_INF_SRAM_H_
#define_INF_SRAM_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"stm32f10x.h"
#include"stm32f10x_fsmc.h"
/*********************************************************************
*宏定义
**********************************************************************/
/*********************************************************************
*SRAM2的BANK1起始地址
**********************************************************************/
#defineBank1_SRAM2_ADDR((uint32_t)0x64000000)
/*********************************************************************
*函数
**********************************************************************/
/*********************************************************************
*初始化sram
**********************************************************************/
voidinf_init_sram(void);
/*********************************************************************
*写入数据包
*输入:pBuffer:数据指针
*WriteAddr:写入数据地址
*NumHalfwordToWrite:数据长度
*返回:无
**********************************************************************/
voidFSMC_SRAM_WriteBuffer(uint16_t*pBuffer,uint32_tWriteAddr,uint32_tNumHalfwordToWrite);
/*********************************************************************
*读取数据包
*输入:pBuffer:存放数据的指针
*ReadAddr:读取数据地址
*NumHalfwordToRead:读取数据长度,单位半字,即2字节
*返回:无
**********************************************************************/
voidFSMC_SRAM_ReadBuffer(uint16_t*pBuffer,uint32_tReadAddr,uint32_tNumHalfwordToRead);
/*********************************************************************
*写入半字数据
*输入:WriteAddr:写入数据地址
*data:数据
*返回:无
**********************************************************************/
voidFSMC_SRAM_WriteHalfWord(uint32_tWriteAddr,uint16_tdata);
/*********************************************************************
*读取半字数据
*输入:ReadAddr:读取数据地址
*返回:读取的数据
**********************************************************************/
uint16_tFSMC_SRAM_ReadHalfWord(uint32_tReadAddr);
#endif
inf_sram.c
/*********************************************************************
*sram接口层头文件
*(c)copyright2013,jdh
*AllRightReserved
*文件名:inf_sram.c
*程序员:jdh
*修改日期:2013/10/10
*2013/10/11
**********************************************************************/
/*********************************************************************
*说明
*sram型号:IS62WV51216BLL
*连接方式:FSMC
*大小:1M字节.512K*16
**********************************************************************/
/*********************************************************************
*头文件
**********************************************************************/
#include"inf_sram.h"
/*********************************************************************
*函数
**********************************************************************/
/*********************************************************************
*初始化sram
**********************************************************************/
voidinf_init_sram(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
FSMC_NORSRAMTimingInitTypeDefp;
FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;
//开启FSMC时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC|RCC_AHBPeriph_SRAM,ENABLE);
//开启FSMC相关的IO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|
RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|
RCC_APB2Periph_AFIO,ENABLE);
//FSMC相关的IO配置