|
H743官方手册标配说明是100MHz,超过的话属于超频,而我们配置主频为480MHz的话,需要单独配置个PLL设置到100MHz才行。
略显繁琐,这里提供个无需单独配置PLL的方法,仅需修改下面位置,让SDRAM运行在120MHz。
V7-563_emWin6.x实验_AppWizard使用emWin经典回调(RTOS).7z (36.98MB)
配置时钟到480MHz
SDRAM仅需修改参数hsdram.Init.ReadPipeDelay 为 FMC_SDRAM_RPIPE_DELAY_1即可
- /*
- *********************************************************************************************************
- * 函 数 名: bsp_InitExtSDRAM
- * 功能说明: 配置连接外部SDRAM的GPIO和FMC
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void bsp_InitExtSDRAM(void)
- {
- SDRAM_HandleTypeDef hsdram = {0};
- FMC_SDRAM_TimingTypeDef SDRAM_Timing = {0};
- FMC_SDRAM_CommandTypeDef command = {0};
-
- /* FMC SDRAM所涉及到GPIO配置 */
- SDRAM_GPIOConfig();
- /* SDRAM配置 */
- hsdram.Instance = FMC_SDRAM_DEVICE;
- /*
- FMC使用的HCLK3时钟,200MHz,用于SDRAM的话,至少2分频,也就是100MHz,即1个SDRAM时钟周期是10ns
- 下面参数单位均为10ns。
- */
- SDRAM_Timing.LoadToActiveDelay = 2; /* 20ns, TMRD定义加载模式寄存器的命令与激活命令或刷新命令之间的延迟 */
- SDRAM_Timing.ExitSelfRefreshDelay = 7; /* 70ns, TXSR定义从发出自刷新命令到发出激活命令之间的延迟 */
- SDRAM_Timing.SelfRefreshTime = 4; /* 50ns, TRAS定义最短的自刷新周期 */
- SDRAM_Timing.RowCycleDelay = 7; /* 70ns, TRC定义刷新命令和激活命令之间的延迟 */
- SDRAM_Timing.WriteRecoveryTime = 2; /* 20ns, TWR定义在写命令和预充电命令之间的延迟 */
- SDRAM_Timing.RPDelay = 2; /* 20ns, TRP定义预充电命令与其它命令之间的延迟 */
- SDRAM_Timing.RCDDelay = 2; /* 20ns, TRCD定义激活命令与读/写命令之间的延迟 */
- hsdram.Init.SDBank = FMC_SDRAM_BANK1; /* 硬件设计上用的BANK1 */
- hsdram.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9; /* 9列 */
- hsdram.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12; /* 12行 */
- hsdram.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32; /* 32位带宽 */
- hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4; /* SDRAM有4个BANK */
- hsdram.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; /* CAS Latency可以设置Latency1,2和3,实际测试Latency3稳定 */
- hsdram.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE; /* 禁止写保护 */
- hsdram.Init.SDClockPeriod = SDCLOCK_PERIOD; /* FMC时钟200MHz,2分频后给SDRAM,即100MHz */
- hsdram.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; /* 使能读突发 */
- hsdram.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1; /* 此位定CAS延时后延后多少个SDRAM时钟周期读取数据,实际测此位可以设置无需延迟 */
- /* 配置SDRAM控制器基本参数 */
- if(HAL_SDRAM_Init(&hsdram, &SDRAM_Timing) != HAL_OK)
- {
- /* Initialization Error */
- Error_Handler(__FILE__, __LINE__);
- }
- /* 完成SDRAM序列初始化 */
- SDRAM_Initialization_Sequence(&hsdram, &command);
- }
复制代码
|
|