3232 defined(STM32F745xx ) || defined(STM32F746xx ) || \
3333 defined(STM32F756xx ) || defined(STM32F767xx ) || \
3434 defined(STM32F769xx ) || defined(STM32F777xx ) || \
35- defined(STM32F779xx ))
35+ defined(STM32F779xx ) || defined( STM32H743xx ) )
3636
3737#if (HAL_USE_SDRAM == TRUE ) || defined(__DOXYGEN__ )
3838
@@ -78,10 +78,12 @@ SDRAMDriver SDRAMD1;
7878 *
7979 * @notapi
8080 */
81+ #if !defined(STM32H743xx ) // H7xx has no busy flag
8182static void sdram_lld_wait_ready (void ) {
8283 /* Wait until the SDRAM controller is ready */
8384 while (SDRAMD1 .sdram -> SDSR & FMC_SDSR_BUSY );
8485}
86+ #endif
8587
8688/**
8789 * @brief Executes the SDRAM memory initialization sequence.
@@ -102,36 +104,50 @@ static void sdram_lld_init_sequence(const SDRAMConfig *cfgp) {
102104#endif
103105
104106 /* Step 3: Configure a clock configuration enable command.*/
107+ #if !defined(STM32H743xx )
105108 sdram_lld_wait_ready ();
109+ #endif
106110 SDRAMD1 .sdram -> SDCMR = FMCCM_CLK_ENABLED | command_target ;
107111
108112 /* Step 4: Insert delay (tipically 100uS).*/
109113 osalSysPolledDelayX (OSAL_US2RTC (STM32_HCLK , 100 ));
110114
111115 /* Step 5: Configure a PALL (precharge all) command.*/
116+ #if !defined(STM32H743xx )
112117 sdram_lld_wait_ready ();
118+ #endif
113119 SDRAMD1 .sdram -> SDCMR = FMCCM_PALL | command_target ;
114120
115121 /* Step 6.1: Configure a Auto-Refresh command: send the first command.*/
122+ #if !defined(STM32H743xx )
116123 sdram_lld_wait_ready ();
124+ #endif
117125 SDRAMD1 .sdram -> SDCMR = FMCCM_AUTO_REFRESH | command_target |
118126 (cfgp -> sdcmr & FMC_SDCMR_NRFS );
119127
120128 /* Step 6.2: Send the second command.*/
129+ #if !defined(STM32H743xx )
121130 sdram_lld_wait_ready ();
131+ #endif ;
122132 SDRAMD1 .sdram -> SDCMR = FMCCM_AUTO_REFRESH | command_target |
123133 (cfgp -> sdcmr & FMC_SDCMR_NRFS );
124134
125135 /* Step 7: Program the external memory mode register.*/
136+ #if !defined(STM32H743xx )
126137 sdram_lld_wait_ready ();
138+ #endif
127139 SDRAMD1 .sdram -> SDCMR = FMCCM_LOAD_MODE | command_target |
128140 (cfgp -> sdcmr & FMC_SDCMR_MRD );
129141
130142 /* Step 8: Set clock.*/
143+ #if !defined(STM32H743xx )
131144 sdram_lld_wait_ready ();
145+ #endif
132146 SDRAMD1 .sdram -> SDRTR = cfgp -> sdrtr & FMC_SDRTR_COUNT ;
133147
148+ #if !defined(STM32H743xx )
134149 sdram_lld_wait_ready ();
150+ #endif
135151}
136152
137153/*===========================================================================*/
@@ -149,6 +165,10 @@ void sdram_lld_start(SDRAMDriver *sdramp, const SDRAMConfig *cfgp)
149165 sdramp -> sdram -> SDCR2 = cfgp -> sdcr ;
150166 sdramp -> sdram -> SDTR2 = cfgp -> sdtr ;
151167
168+ #if defined(STM32H743xx )
169+ FMC_Bank1_R -> BTCR [0 ] |= FMC_BCR1_FMCEN ;
170+ #endif
171+
152172 sdram_lld_init_sequence (cfgp );
153173}
154174
0 commit comments