|

hsdram1.Instance = FMC_SDRAM_DEVICE;
/* hsdram1.Init */
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_32;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_1;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_ENABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
/* SdramTiming */
SdramTiming.LoadToActiveDelay = 1;
SdramTiming.ExitSelfRefreshDelay = 1;
SdramTiming.SelfRefreshTime = 1;
SdramTiming.RowCycleDelay = 1;
SdramTiming.WriteRecoveryTime = 1;
SdramTiming.RPDelay = 1;
SdramTiming.RCDDelay = 1;
if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
{
Error_Handler( );
}
#define SRAM_BASE_ADDRESS 0x60000000
// 写SRAM
void SRAM_Write(uint32_t address, uint32_t data) {
//FMC_Bank1->BTCR[0] |= (1<<20);
*(volatile uint16_t*)(SRAM_BASE_ADDRESS + (address<<1)) = data;
//FMC_Bank1->BTCR[0] &= ~(1<<20);
}
SRAM_Write(0x00AA, 0x0055);
SRAM_Write(0x0055, 0x0055);
SRAM_Write(0x00AA, 0x0055);
SRAM_Write(0x0055, 0x0055);
地址线翻转很慢啊
|
|