/** * @brief LCD Default FSMC Init * @param None * @retval None */ void BSP_LCD_DeInit(void) { GPIO_InitTypeDef GPIO_InitStructure; /*!< LCD Display Off */ LCD_DisplayOff(); /* BANK 3 (of NOR/SRAM Bank 1~4) is disabled */ hsram1_ssd2119.Init.NSBank = FSMC_NORSRAM_BANK3; __FMC_NORSRAM_ENABLE(hsram1_ssd2119.Instance, hsram1_ssd2119.Init.NSBank); /*!< LCD_SPI DeInit */ HAL_SRAM_DeInit(&hsram1_ssd2119); /*-- GPIO Configuration ------------------------------------------------------*/ /** FSMC GPIO Configuration PE3 ------> FSMC_A19 PE7 ------> FSMC_D4 PE8 ------> FSMC_D5 PE9 ------> FSMC_D6 PE10 ------> FSMC_D7 PE11 ------> FSMC_D8 PE12 ------> FSMC_D9 PE13 ------> FSMC_D10 PE14 ------> FSMC_D11 PE15 ------> FSMC_D12 PD8 ------> FSMC_D13 PD9 ------> FSMC_D14 PD10 ------> FSMC_D15 PD14 ------> FSMC_D0 PD15 ------> FSMC_D1 PD0 ------> FSMC_D2 PD1 ------> FSMC_D3 PD4 ------> FSMC_NOE PD5 ------> FSMC_NWE PD7 ------> FSMC_NE1 */ /* SRAM Data lines configuration */ HAL_GPIO_DeInit(GPIOE, GPIO_PIN_3|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9 |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13 |GPIO_PIN_14|GPIO_PIN_15); HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4 |GPIO_PIN_5|GPIO_PIN_7); }
/** * @brief DeInitializes the SRAM device. * @retval SRAM status */ uint8_t BSP_SRAM_DeInit(void) { static uint8_t sram_status = SRAM_ERROR; /* SRAM device de-initialization */ sramHandle.Instance = FMC_NORSRAM_DEVICE; sramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; if(HAL_SRAM_DeInit(&sramHandle) != HAL_OK) { sram_status = SRAM_ERROR; } else { sram_status = SRAM_OK; } /* SRAM controller de-initialization */ BSP_SRAM_MspDeInit(&sramHandle, NULL); return sram_status; }
/** * @brief Main program * @param None * @retval None */ int main(void) { /* STM32F4xx HAL library initialization: - Configure the Flash prefetch, instruction and Data caches - Systick timer is configured by default as source of time base, but user can eventually implement his proper time base source (a general purpose timer for example or other time source), keeping in mind that Time base duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and handled in milliseconds basis. - Set NVIC Group Priority to 4 - Low Level Initialization: global MSP (MCU Support Package) initialization */ HAL_Init(); /* Configure the system clock to 180 MHz */ SystemClock_Config(); /* Configure LED1 and LED3 */ BSP_LED_Init(LED1); BSP_LED_Init(LED3); /*##-1- Configure the SRAM device ##########################################*/ /* SRAM device configuration */ hsram.Instance = FMC_NORSRAM_DEVICE; hsram.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* SRAM device configuration */ SRAM_Timing.AddressSetupTime = 2; SRAM_Timing.AddressHoldTime = 1; SRAM_Timing.DataSetupTime = 2; SRAM_Timing.BusTurnAroundDuration = 1; SRAM_Timing.CLKDivision = 2; SRAM_Timing.DataLatency = 2; SRAM_Timing.AccessMode = FMC_ACCESS_MODE_A; hsram.Init.NSBank = FMC_NORSRAM_BANK2; hsram.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; hsram.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; hsram.Init.MemoryDataWidth = SRAM_MEMORY_WIDTH; hsram.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; hsram.Init.WrapMode = FMC_WRAP_MODE_DISABLE; hsram.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; hsram.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; hsram.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; hsram.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; hsram.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; hsram.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; HAL_SRAM_DeInit(&hsram); /* Initialize the SRAM controller */ if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /*##-2- SRAM memory read/write access ######################################*/ /* Fill the buffer to write */ Fill_Buffer(aTxBuffer, BUFFER_SIZE, 0xC20FC210); /* Write data to the SRAM memory */ for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++) { *(__IO uint32_t *)(SRAM_BANK_ADDR + WRITE_READ_ADDR + 4 * uwIndex) = aTxBuffer[uwIndex]; } /* Read back data from the SRAM memory */ for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++) { aRxBuffer[uwIndex] = *(__IO uint32_t *)(SRAM_BANK_ADDR + WRITE_READ_ADDR + 4 * uwIndex); } /*##-3- Checking data integrity ############################################*/ uwWriteReadStatus = Buffercmp(aTxBuffer, aRxBuffer, BUFFER_SIZE); if(uwWriteReadStatus != PASSED) { /* KO */ /* Turn on LED3 */ BSP_LED_On(LED3); } else { /* OK */ /* Turn on LED1 */ BSP_LED_On(LED1); } /* Infinite loop */ while (1) { } }