boart test board

Dependencies:   USBDevice mbed-dev lwip

Fork of USBSerial_HelloWorld by Compass Yap

Revision:
18:c276f3d01630
Parent:
17:8279856460a8
Child:
19:8b7595ced647
--- a/STM32_FMC.cpp	Tue Jul 24 19:17:05 2018 +0000
+++ b/STM32_FMC.cpp	Tue Jul 24 19:35:38 2018 +0000
@@ -5,71 +5,140 @@
 #include "platform/platform.h"
 #include "hal/pinmap.h"
 
-#define GPIO_AF12_FSMC 12
-
-typedef class fsmc
+typedef class fmc
 {
 public:
 
-    ~fsmc() {
+    ~fmc() {
         core_util_critical_section_enter();
         unlock_deep_sleep();
         core_util_critical_section_exit();
     }
 
-    fsmc::fsmc() :
+    fmc() :
         _deep_sleep_locked(false) {
         core_util_critical_section_enter();
-      
+
         __HAL_RCC_GPIOC_CLK_ENABLE();
         __HAL_RCC_GPIOD_CLK_ENABLE();
         __HAL_RCC_GPIOE_CLK_ENABLE();
         __HAL_RCC_GPIOF_CLK_ENABLE();
         __HAL_RCC_GPIOG_CLK_ENABLE();
 
-        pin_function(PF_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));   // FMC_A0
-        pin_function(PF_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A1
-        pin_function(PF_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A2
-        pin_function(PF_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A3
-        pin_function(PF_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A4
-        pin_function(PF_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A5
-        pin_function(PC_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDNWE
-        pin_function(PC_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDNE0
-        pin_function(PC_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDCKE0
-        pin_function(PF_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDNRAS
-        pin_function(PF_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A6
-        pin_function(PF_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A7
-        pin_function(PF_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A8
-        pin_function(PF_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A9
-        pin_function(PG_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A10
-        pin_function(PG_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_A11
-        pin_function(PE_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D4
-        pin_function(PE_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D5
-        pin_function(PE_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D6
-        pin_function(PE_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D7
-        pin_function(PE_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D8
-        pin_function(PE_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D9
-        pin_function(PE_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D10
-        pin_function(PE_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D11
-        pin_function(PE_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D12
-        pin_function(PD_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D13
-        pin_function(PD_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D14
-        pin_function(PD_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D15
-        pin_function(PD_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D0
-        pin_function(PD_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D1
-        pin_function(PG_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_BA0
-        pin_function(PG_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_BA1
-        pin_function(PG_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDCLK
-        pin_function(PD_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D2
-        pin_function(PD_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_D3
-        pin_function(PG_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_SDNCAS
-        pin_function(PE_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_NBL0
-        pin_function(PE_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FSMC));  // FMC_NBL1
+
+        /** FMC GPIO Configuration
+        PF0   ------> FMC_A0
+        PF1   ------> FMC_A1
+        PF2   ------> FMC_A2
+        PF3   ------> FMC_A3
+        PF4   ------> FMC_A4
+        PF5   ------> FMC_A5
+        PC0   ------> FMC_SDNWE
+        PC2   ------> FMC_SDNE0
+        PC3   ------> FMC_SDCKE0
+        PF11   ------> FMC_SDNRAS
+        PF12   ------> FMC_A6
+        PF13   ------> FMC_A7
+        PF14   ------> FMC_A8
+        PF15   ------> FMC_A9
+        PG0   ------> FMC_A10
+        PG1   ------> FMC_A11
+        PE7   ------> FMC_D4
+        PE8   ------> FMC_D5
+        PE9   ------> FMC_D6
+        PE10   ------> FMC_D7
+        PE11   ------> FMC_D8
+        PE12   ------> FMC_D9
+        PE13   ------> FMC_D10
+        PE14   ------> FMC_D11
+        PE15   ------> FMC_D12
+        PD8   ------> FMC_D13
+        PD9   ------> FMC_D14
+        PD10   ------> FMC_D15
+        PD14   ------> FMC_D0
+        PD15   ------> FMC_D1
+        PG4   ------> FMC_BA0
+        PG5   ------> FMC_BA1
+        PG8   ------> FMC_SDCLK
+        PD0   ------> FMC_D2
+        PD1   ------> FMC_D3
+        PG15   ------> FMC_SDNCAS
+        PE0   ------> FMC_NBL0
+        PE1   ------> FMC_NBL1
+        */
+        pin_function(PF_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));   // FMC_A0
+        pin_function(PF_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A1
+        pin_function(PF_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A2
+        pin_function(PF_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A3
+        pin_function(PF_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A4
+        pin_function(PF_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A5
+        pin_function(PC_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDNWE
+        pin_function(PC_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDNE0
+        pin_function(PC_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDCKE0
+        pin_function(PF_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDNRAS
+        pin_function(PF_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A6
+        pin_function(PF_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A7
+        pin_function(PF_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A8
+        pin_function(PF_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A9
+        pin_function(PG_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A10
+        pin_function(PG_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_A11
+        pin_function(PE_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D4
+        pin_function(PE_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D5
+        pin_function(PE_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D6
+        pin_function(PE_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D7
+        pin_function(PE_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D8
+        pin_function(PE_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D9
+        pin_function(PE_13, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D10
+        pin_function(PE_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D11
+        pin_function(PE_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D12
+        pin_function(PD_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D13
+        pin_function(PD_9, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D14
+        pin_function(PD_10, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D15
+        pin_function(PD_14, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D0
+        pin_function(PD_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D1
+        pin_function(PG_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_BA0
+        pin_function(PG_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_BA1
+        pin_function(PG_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDCLK
+        pin_function(PD_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D2
+        pin_function(PD_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_D3
+        pin_function(PG_15, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_SDNCAS
+        pin_function(PE_0, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_NBL0
+        pin_function(PE_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_FMC));  // FMC_NBL1
 
         __HAL_RCC_FMC_CLK_ENABLE();
-        
+
+        FMC_SDRAM_TimingTypeDef SdramTiming;
+        /** Perform the SDRAM1 memory initialization sequence
+        */
+        SDRAM_HandleTypeDef hsdram1;
+
+        hsdram1.Instance = FMC_Bank5_6; //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_12;
+        hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
+        hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+        hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2;
+        hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+        hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_3;
+        hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
+        hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
+        /* SdramTiming */
+        SdramTiming.LoadToActiveDelay = 2;
+        SdramTiming.ExitSelfRefreshDelay = 7;
+        SdramTiming.SelfRefreshTime = 4;
+        SdramTiming.RowCycleDelay = 2;
+        SdramTiming.WriteRecoveryTime = 2;
+        SdramTiming.RPDelay = 2;
+        SdramTiming.RCDDelay = 2;
+
+        if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK) {
+            //_Error_Handler(__FILE__, __LINE__);
+        }
+
         core_util_critical_section_exit();
-   }
+    }
 
 protected:
     /** Lock deep sleep only if it is not yet locked */