STM32 外部 SRAM
IS62WV51216简介
IS62WV51216是ISSI(IntegratedSiliconSolution,Inc)公司生产的一颗16位宽512K(512*16,即1M字节)容量的CMOS静态内存芯片。该芯片具有如下几个特点:
l高速。具有45ns/55ns访问速度。
l低功耗。
lTTL电平兼容。
l全静态操作。不需要刷新和时钟电路。
l三态输出。
l字节控制功能。支持高/低字节控制。
看看实现IS62WV51216的访问,需要对FSMC进行哪些配置。这里就做一个概括性的讲解。步骤如下:
1)使能FSMC时钟,并配置FSMC相关的IO及其时钟使能。
要使用FSMC,当然首先得开启其时钟。然后需要把FSMC_D0~15,FSMCA0~18等相关IO口,全部配置为复用输出,并使能各IO组的时钟。
使能FSMC时钟的方法:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
对于其他IO口设置的方法前面讲解很详细,这里不做过多的讲解。
2)设置FSMCBANK1区域3。
此部分包括设置区域3的存储器的工作模式、位宽和读写时序等。我们使用模式A、16位宽,读写共用一个时序寄存器。使用的函数是:
voidFSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef*FSMC_NORSRAMInitStruct)
3)使能BANK1区域3。
使能BANK的方法跟前面LCD实验也是一样的,这里也不做详细讲解,函数是:
voidFSMC_NORSRAMCmd(uint32_tFSMC_Bank,FunctionalStateNewState);
通过以上几个步骤,我们就完成了FSMC的配置,可以访问IS62WV51216了,这里还需要注意,因为我们使用的是BANK1的区域3,所以HADDR[27:26]=10,故外部内存的首地址为0X68000000。
- //使用NOR/SRAM的 Bank1.sector3,地址位HADDR[27,26]=10
- //对IS61LV25616/IS62WV25616,地址线范围为A0~A17
- //对IS61LV51216/IS62WV51216,地址线范围为A0~A18
- #defineBank1_SRAM3_ADDR((u32)(0x68000000))
- //初始化外部SRAM
- voidFSMC_SRAM_Init(void)
- {
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef readWriteTiming;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG,ENABLE);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
- GPIO_InitStructure.GPIO_Pin=0xFF33; //PORTD复用推挽输出
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin=0xFF83; //PORTE复用推挽输出
- GPIO_Init(GPIOE,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin=0xF03F; //PORTD复用推挽输出
- GPIO_Init(GPIOF,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin=0x043F; //PORTD复用推挽输出
- GPIO_Init(GPIOG,&GPIO_InitStructure);
- readWriteTiming.FSMC_AddressSetupTime=0x00;//地址建立时间(ADDSET)为1个HCLK 1/36M=27ns
- readWriteTiming.FSMC_AddressHoldTime=0x00;//地址保持时间(ADDHLD)模式A未用到
- readWriteTiming.FSMC_DataSetupTime=0x03;//数据保持时间(DATAST)为3个HCLK 4/72M=55ns(对EM的SRAM芯片)
- readWriteTiming.FSMC_BusTurnAroundDuration=0x00;
- readWriteTiming.FSMC_CLKDivision=0x00;
- readWriteTiming.FSMC_DataLatency=0x00;
- readWriteTiming.FSMC_AccessMode=FSMC_AccessMode_A;//模式A
- 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_NORSRAMInitStruc
STM32外部SRA 相关文章:
- 让STM32的外部SRAM操作跟内部SRAM一样(11-28)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)