外扩RAM的问题

发布: 2009-7-03 20:36 | 作者: SwallowF | 来源: StmFans思蜕盟 OPELC 自由电子联盟

我玩的是EK-STM3210E
上外外扩了一个16位D RAM 我以字和半字访问都没问题
但是以字节方式访问就出问题了
16位的外部存储器不能以字节方式访问吗
guoyin (2009-7-04 19:06:47)
你是用FSMC方式外扩的吗,那应该是参数没有设置对吧!
guoyin (2009-7-04 19:08:01)
FSMC_NORSRAMTimingInitTypeDef  p;
    p.FSMC_AddressSetupTime = 1;            /*ADDSET  地址建立时间*/
    p.FSMC_AddressHoldTime = 1;             /*ADDHOLD 地址保持时间*/
    p.FSMC_DataSetupTime = 20;               /*DATAST 数据建立时间*/
    p.FSMC_BusTurnAroundDuration = 0;   /*BUSTURN 总线返转时间*/
    p.FSMC_CLKDivision = 0;                    /*CLKDIV 时钟分频*/
    p.FSMC_DataLatency = 1;                     /*DATLAT 数据保持时间*/
    p.FSMC_AccessMode = FSMC_AccessMode_A; /*ACCMOD FSMC 访问模式*/
   
    下面这段是对控制方式的设置----FSMC_DCR的设置

    FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    /*选择设置的BANK及片选信号*/
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;   
   
    /*设置是否数据地址总线分时复用*/
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    /*设置存储器类型*/
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
    /*设置数据宽度*/
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    /*设置是否使用迸发访问模式(应该就是连续读写模式吧),*/
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    /*设置WAIT信号的有效电平*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    /*设置是否使用环回模式*/
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    /*设置WAIT信号有效时机*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    /*设定是否使能写操作*/
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    /*设定是否使用WAIT信号*/
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    /*设定是否使用单独的写时序*/
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    /*设定是否使用异步等待信号*/
    FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
    /*设定是否使用迸发写模式*/
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
/*设定读写时序*/
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}