7676#define TIMEOUT_1_BYTE 10
7777
7878#if defined(SPI_FLAG_FRLVL ) // STM32F0 STM32F3 STM32F7 STM32L4
79- #if defined(STM32U5 )
79+ #if defined(STM32U5 ) || defined( STM32H5 )
8080extern HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo (const SPI_HandleTypeDef * hspi );
8181#else
8282extern HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo (SPI_HandleTypeDef * hspi );
@@ -291,8 +291,10 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
291291 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI1 ;
292292#if defined (RCC_SPI123CLKSOURCE_PLL )
293293 PeriphClkInit .Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL ;
294+ #elif defined (RCC_SPI1CLKSOURCE_SYSCLK )
295+ PeriphClkInit .Spi1ClockSelection = RCC_SPI1CLKSOURCE_SYSCLK ;
294296#else
295- PeriphClkInit .Spi1ClockSelection = RCC_SPI1CLKSOURCE_SYSCLK ;
297+ PeriphClkInit .Spi1ClockSelection = RCC_SPI1CLKSOURCE_PLL1Q ;
296298#endif
297299 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
298300 error ("HAL_RCCEx_PeriphCLKConfig\n" );
@@ -314,8 +316,10 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
314316 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI2 ;
315317#if defined (RCC_SPI123CLKSOURCE_PLL )
316318 PeriphClkInit .Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL ;
317- #else
319+ #elif defined ( RCC_SPI2CLKSOURCE_SYSCLK )
318320 PeriphClkInit .Spi2ClockSelection = RCC_SPI2CLKSOURCE_SYSCLK ;
321+ #else
322+ PeriphClkInit .Spi2ClockSelection = RCC_SPI2CLKSOURCE_PLL1Q ;
319323#endif
320324 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
321325 error ("HAL_RCCEx_PeriphCLKConfig\n" );
@@ -337,8 +341,10 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
337341 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI3 ;
338342#if defined (RCC_SPI123CLKSOURCE_PLL )
339343 PeriphClkInit .Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL ;
340- #else
344+ #elif defined ( RCC_SPI2CLKSOURCE_SYSCLK )
341345 PeriphClkInit .Spi3ClockSelection = RCC_SPI3CLKSOURCE_SYSCLK ;
346+ #else
347+ PeriphClkInit .Spi3ClockSelection = RCC_SPI3CLKSOURCE_PLL1Q ;
342348#endif
343349 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
344350 error ("HAL_RCCEx_PeriphCLKConfig\n" );
@@ -358,7 +364,11 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
358364 if (spiobj -> spi == SPI_4 ) {
359365#if defined(SPI_IP_VERSION_V2 )
360366 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI4 ;
367+ #if defined RCC_SPI45CLKSOURCE_PCLK1
361368 PeriphClkInit .Spi45ClockSelection = RCC_SPI45CLKSOURCE_PCLK1 ;
369+ #else
370+ PeriphClkInit .Spi4ClockSelection = RCC_SPI4CLKSOURCE_PCLK2 ;
371+ #endif
362372 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
363373 error ("HAL_RCCEx_PeriphCLKConfig\n" );
364374 }
@@ -377,7 +387,11 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
377387 if (spiobj -> spi == SPI_5 ) {
378388#if defined(SPI_IP_VERSION_V2 )
379389 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI5 ;
390+ #if defined RCC_SPI45CLKSOURCE_PCLK1
380391 PeriphClkInit .Spi45ClockSelection = RCC_SPI45CLKSOURCE_PCLK1 ;
392+ #else
393+ PeriphClkInit .Spi5ClockSelection = RCC_SPI5CLKSOURCE_PCLK3 ;
394+ #endif
381395 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
382396 error ("HAL_RCCEx_PeriphCLKConfig\n" );
383397 }
@@ -396,7 +410,11 @@ static void _spi_init_direct(spi_t *obj, const spi_pinmap_t *pinmap)
396410 if (spiobj -> spi == SPI_6 ) {
397411#if defined(SPI_IP_VERSION_V2 )
398412 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_SPI6 ;
413+ #if defined RCC_SPI6CLKSOURCE_PCLK4
399414 PeriphClkInit .Spi6ClockSelection = RCC_SPI6CLKSOURCE_PCLK4 ;
415+ #else
416+ PeriphClkInit .Spi6ClockSelection = RCC_SPI6CLKSOURCE_PCLK2 ;
417+ #endif
400418 if (HAL_RCCEx_PeriphCLKConfig (& PeriphClkInit ) != HAL_OK ) {
401419 error ("HAL_RCCEx_PeriphCLKConfig\n" );
402420 }
@@ -508,7 +526,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
508526 SPI_INIT_DIRECT (obj , & explicit_spi_pinmap );
509527}
510528
511- #ifdef STM32_SPI_CAPABILITY_DMA
529+ #if STM32_SPI_CAPABILITY_DMA
512530
513531/**
514532 * Initialize the DMA for an SPI object in the Tx direction.
0 commit comments