这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3l_18 [2020/11/11 10:52] zgf |
icore3l_18 [2020/11/11 11:18] (当前版本) zgf |
||
---|---|---|---|
行 86: | 行 86: | ||
* STM32F429IGHx使用FMC外设来管理扩展的存储器,FMC是Flexible Memory Controller的缩写,译为可变存储控制器。它可以用于驱动包括SRAM、SDRAM、PSRAM、NOR FLASH以及NAND FLSAH类型的存储器。 | * STM32F429IGHx使用FMC外设来管理扩展的存储器,FMC是Flexible Memory Controller的缩写,译为可变存储控制器。它可以用于驱动包括SRAM、SDRAM、PSRAM、NOR FLASH以及NAND FLSAH类型的存储器。 | ||
* FMC有6个存储区域,每个区域支持256MB的寻址空间。 | * FMC有6个存储区域,每个区域支持256MB的寻址空间。 | ||
- | - 存储区域 1 可连接多达 4 个 NOR Flash 或 PSRAM 设备。此存储区域被划分为如下 4 个NOR/PSRAM 子区域,带 4 个专用片选信号: | + | * (1)数字列表项目存储区域 1 可连接多达 4 个 NOR Flash 或 PSRAM 设备。此存储区域被划分为如下 4 个NOR/PSRAM 子区域,带 4 个专用片选信号: |
- | * 存储区域 1 NOR/PSRAM 1 | + | * 存储区域 1 NOR/PSRAM 1 |
- | * 存储区域 1 NOR/PSRAM 2 | + | * 存储区域 1 NOR/PSRAM 2 |
- | * 存储区域 1 NOR/PSRAM 3 | + | * 存储区域 1 NOR/PSRAM 3 |
- | * 存储区域 1 NOR/PSRAM 4 | + | * 存储区域 1 NOR/PSRAM 4 |
- | - 存储区域2用于SDRAM器件,具体是SDRAM存储区域1还是SDRAM存储区域2取决于BMAP位配置。 | + | * (2)存储区域2用于SDRAM器件,具体是SDRAM存储区域1还是SDRAM存储区域2取决于BMAP位配置。 |
- | - 存储区域3用于连接NAND Flash器件。此空间的MPU存储器特性必须通过软件重新配置到器件中。 | + | * (3)存储区域3用于连接NAND Flash器件。此空间的MPU存储器特性必须通过软件重新配置到器件中。 |
- | - 存储区域5和6用于连接SDRAM器件(每个存储区域1个器件)。 | + | * (4)存储区域5和6用于连接SDRAM器件(每个存储区域1个器件)。 |
* 对于每个存储区域,所要使用的存储器类型可由用户应用程序通过配置寄存器配置。 | * 对于每个存储区域,所要使用的存储器类型可由用户应用程序通过配置寄存器配置。 | ||
* 本实验使用FMC控制SDRAM。启动时,必须通过用户应用程序对用于连接 FMC SDRAM 控制器与外部 SDRAM 设备的SDRAM I/O 引脚进行配置。应用程序未使用的 SDRAM 控制器 I/O 引脚可用于其它用途。 | * 本实验使用FMC控制SDRAM。启动时,必须通过用户应用程序对用于连接 FMC SDRAM 控制器与外部 SDRAM 设备的SDRAM I/O 引脚进行配置。应用程序未使用的 SDRAM 控制器 I/O 引脚可用于其它用途。 | ||
行 215: | 行 215: | ||
#define read_sdram(offset) *(volatile unsigned short int *)(SDRAM_DEVICE_ADDR + (offset << 1)) | #define read_sdram(offset) *(volatile unsigned short int *)(SDRAM_DEVICE_ADDR + (offset << 1)) | ||
</code> | </code> | ||
+ | 4.FMC初始化函数 | ||
+ | <code c> | ||
+ | void MX_FMC_Init(void) | ||
+ | { //本实验中我们只用到了FMC的引脚,时序配置使用官方提供的SDRAM驱动 | ||
+ | FMC_SDRAM_TimingTypeDef SdramTiming = {0}; | ||
+ | /* 执行SDRAM1存储器初始化序列 */ | ||
+ | hsdram1.Instance = FMC_SDRAM_DEVICE; | ||
+ | /* hsdram1初始化 */ | ||
+ | hsdram1.Init.SDBank = FMC_SDRAM_BANK1; | ||
+ | hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8; | ||
+ | hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13; | ||
+ | hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16; | ||
+ | hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; | ||
+ | hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1; | ||
+ | hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; | ||
+ | hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_DISABLE; | ||
+ | hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE; | ||
+ | hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0; | ||
+ | /* Sdram时序 */ | ||
+ | SdramTiming.LoadToActiveDelay = 16; | ||
+ | SdramTiming.ExitSelfRefreshDelay = 16; | ||
+ | SdramTiming.SelfRefreshTime = 16; | ||
+ | SdramTiming.RowCycleDelay = 16; | ||
+ | SdramTiming.WriteRecoveryTime = 16; | ||
+ | SdramTiming.RPDelay = 16; | ||
+ | SdramTiming.RCDDelay = 16; | ||
+ | if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) | ||
+ | { | ||
+ | Error_Handler( ); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | ==== 五、实验步骤 ==== | ||
+ | - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); | ||
+ | - 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; | ||
+ | - 打开Keil MDK 开发环境,并打开本实验工程; | ||
+ | - 烧写程序到iCore3L上; | ||
+ | - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 | ||
+ | ==== 六、实验现象 ==== | ||
+ | SDRAM读写测试成功,红色LED灯常亮。测试失败红色LED灯闪烁。 |