大学生
最后登录1970-1-1
在线时间 小时
注册时间2015-7-25
|
楼主 |
发表于 2019-8-19 09:45:18
|
显示全部楼层
FMC配置:
C:\Users\86131\Desktop
void SDRAM_Init(void)
{
uint32_t tmpr = 0;
FMC_SDRAM_CommandTypeDef FMC_SDRAMCommandStructure;
FMC_SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
FMC_SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
FMC_SDRAMCommandStructure.AutoRefreshNumber = 0;
FMC_SDRAMCommandStructure.ModeRegisterDefinition = 0;
while(HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_READY && \
HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_PRECHARGED);
HAL_SDRAM_SendCommand(&hsdram1, &FMC_SDRAMCommandStructure, 1000);
HAL_Delay(10);
FMC_SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_PALL;
FMC_SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
FMC_SDRAMCommandStructure.AutoRefreshNumber = 0;
FMC_SDRAMCommandStructure.ModeRegisterDefinition = 0;
while(HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_READY && \
HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_PRECHARGED);
HAL_SDRAM_SendCommand(&hsdram1, &FMC_SDRAMCommandStructure, 1000);
FMC_SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
FMC_SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
FMC_SDRAMCommandStructure.AutoRefreshNumber = 16;
FMC_SDRAMCommandStructure.ModeRegisterDefinition = 0;
while(HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_READY && \
HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_PRECHARGED);
HAL_SDRAM_SendCommand(&hsdram1, &FMC_SDRAMCommandStructure, 1000);
/* sdram register configuration */
tmpr = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_4 |
SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |
SDRAM_MODEREG_CAS_LATENCY_2 |
SDRAM_MODEREG_OPERATING_MODE_STANDARD |
SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
FMC_SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
FMC_SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
FMC_SDRAMCommandStructure.AutoRefreshNumber = 1;
FMC_SDRAMCommandStructure.ModeRegisterDefinition = tmpr;
while(HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_READY && \
HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_PRECHARGED);
HAL_SDRAM_SendCommand(&hsdram1, &FMC_SDRAMCommandStructure, 1000);
/* set refresh conuter */
/*refresh rate = (COUNT + 1) x SDRAM clock frequency
COUNT =( SDRAM refresh cycle/lines) - 20*/
/* 64ms/4096=15.62us (15.62 us x FSDCLK) - 20 =1386 */
HAL_SDRAM_SetAutoRefreshNumber(&hsdram1, 1386);
while(HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_READY && \
HAL_SDRAM_GetState(&hsdram1) != HAL_SDRAM_STATE_PRECHARGED);
} |
|