#include "bsp_fsmc_nandflash.h" /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ NAND_HandleTypeDef hnand1; static uint32_t FSMC_Initialized = 0; /* FSMC initialization function */ /* FSMC initialization function */ void MX_FSMC_NANDFLASH_Init(void) { /* USER CODE BEGIN FSMC_Init 0 */ /* USER CODE END FSMC_Init 0 */ FSMC_NAND_PCC_TimingTypeDef ComSpaceTiming = {0}; FSMC_NAND_PCC_TimingTypeDef AttSpaceTiming = {0}; /* USER CODE BEGIN FSMC_Init 1 */ /* USER CODE END FSMC_Init 1 */ /** Perform the NAND1 memory initialization sequence */ hnand1.Instance = FSMC_NAND_DEVICE; /* hnand1.Init */ hnand1.Init.NandBank = FSMC_NAND_BANK2; hnand1.Init.Waitfeature = FSMC_NAND_PCC_WAIT_FEATURE_DISABLE; hnand1.Init.MemoryDataWidth = FSMC_NAND_PCC_MEM_BUS_WIDTH_8; hnand1.Init.EccComputation = FSMC_NAND_ECC_ENABLE; hnand1.Init.ECCPageSize = FSMC_NAND_ECC_PAGE_SIZE_1024BYTE; hnand1.Init.TCLRSetupTime = 0; hnand1.Init.TARSetupTime = 0; /* hnand1.Config */ hnand1.Config.PageSize = 2048; hnand1.Config.SpareAreaSize = 64; hnand1.Config.BlockSize = 64; hnand1.Config.BlockNbr = 1024; hnand1.Config.PlaneNbr =2; hnand1.Config.PlaneSize = 2048; hnand1.Config.ExtraCommandEnable = DISABLE; /* ComSpaceTiming */ ComSpaceTiming.SetupTime = 0x1; ComSpaceTiming.WaitSetupTime = 0x2; ComSpaceTiming.HoldSetupTime = 0x2; ComSpaceTiming.HiZSetupTime = 0x2; /* AttSpaceTiming */ AttSpaceTiming.SetupTime = 0x1; AttSpaceTiming.WaitSetupTime = 0x2; AttSpaceTiming.HoldSetupTime = 0x2; AttSpaceTiming.HiZSetupTime = 0x2; if (HAL_NAND_Init(&hnand1, &ComSpaceTiming, &AttSpaceTiming) != HAL_OK) { return ; } } static void HAL_FSMC_NANDFLASH_MspInit() { /* USER CODE BEGIN FSMC_MspInit 0 */ /* USER CODE END FSMC_MspInit 0 */ GPIO_InitTypeDef GPIO_InitStruct = {0}; if (FSMC_Initialized) { return; } FSMC_Initialized = 1; /* Peripheral clock enable */ __HAL_RCC_FSMC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOE_CLK_ENABLE(); /** FSMC GPIO Configuration PE7 ------> FSMC_D4 PE8 ------> FSMC_D5 PE9 ------> FSMC_D6 PE10 ------> FSMC_D7 PD11 ------> FSMC_CLE PD12 ------> FSMC_ALE PD14 ------> FSMC_D0 PD15 ------> FSMC_D1 PD0 ------> FSMC_D2 PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PD6 ------> FSMC_NWAIT PD7 ------> FSMC_NCE2 */ /* GPIO_InitStruct */ GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); /* GPIO_InitStruct */ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15 |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN FSMC_MspInit 1 */ GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE END FSMC_MspInit 1 */ } void HAL_NAND_MspInit(NAND_HandleTypeDef *hnand) { HAL_FSMC_NANDFLASH_MspInit(); }