用户工具

站点工具


icore3l_18

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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灯闪烁。
icore3l_18.1605063120.txt.gz · 最后更改: 2020/11/11 10:52 由 zgf