@@ -420,7 +420,49 @@ static uint32_t i2c_getClkFreq(I2C_TypeDef *i2c)
420420#else
421421 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
422422#endif
423+ if (clkSrcFreq == 0 )
424+ #endif
425+ {
426+ #ifdef __HAL_RCC_GET_I2C5_SOURCE
427+ switch (__HAL_RCC_GET_I2C5_SOURCE ()) {
428+ #ifdef RCC_I2C5CLKSOURCE_HSI
429+ case RCC_I2C5CLKSOURCE_HSI :
430+ clkSrcFreq = HSI_VALUE ;
431+ break ;
432+ #endif
433+ #ifdef RCC_I2C5CLKSOURCE_SYSCLK
434+ case RCC_I2C5CLKSOURCE_SYSCLK :
435+ clkSrcFreq = SystemCoreClock ;
436+ break ;
437+ #endif
438+ #if defined(RCC_I2C5CLKSOURCE_PCLK1 ) || defined(RCC_I2C5CLKSOURCE_D2PCLK1 )
439+ #ifdef RCC_I2C5CLKSOURCE_PCLK1
440+ case RCC_I2C5CLKSOURCE_PCLK1 :
441+ #endif
442+ #ifdef RCC_I2C5CLKSOURCE_D2PCLK1
443+ case RCC_I2C5CLKSOURCE_D2PCLK1 :
444+ #endif
445+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
446+ break ;
447+ #endif
448+ #ifdef RCC_I2C5CLKSOURCE_CSI
449+ case RCC_I2C5CLKSOURCE_CSI :
450+ clkSrcFreq = CSI_VALUE ;
451+ break ;
452+ #endif
453+ #ifdef RCC_I2C5CLKSOURCE_PLL3
454+ case RCC_I2C5CLKSOURCE_PLL3 :
455+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
456+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
457+ break ;
423458#endif
459+ default :
460+ Error_Handler ();
461+ }
462+ #else
463+ Error_Handler ();
464+ #endif
465+ }
424466 }
425467#endif // I2C5_BASE
426468#if defined(I2C6_BASE )
@@ -431,7 +473,38 @@ static uint32_t i2c_getClkFreq(I2C_TypeDef *i2c)
431473#else
432474 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
433475#endif
476+ if (clkSrcFreq == 0 )
477+ #endif
478+ {
479+ #ifdef __HAL_RCC_GET_I2C6_SOURCE
480+ switch (__HAL_RCC_GET_I2C6_SOURCE ()) {
481+ #ifdef RCC_I2C6CLKSOURCE_HSI
482+ case RCC_I2C6CLKSOURCE_HSI :
483+ clkSrcFreq = HSI_VALUE ;
484+ break ;
485+ #endif
486+ #ifdef RCC_I2C6CLKSOURCE_SYSCLK
487+ case RCC_I2C6CLKSOURCE_SYSCLK :
488+ clkSrcFreq = SystemCoreClock ;
489+ break ;
434490#endif
491+ #ifdef RCC_I2C6CLKSOURCE_PCLK1
492+ case RCC_I2C6CLKSOURCE_PCLK1 :
493+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
494+ break ;
495+ #endif
496+ #ifdef RCC_I2C6CLKSOURCE_MSIK
497+ case RCC_I2C6CLKSOURCE_MSIK :
498+ clkSrcFreq = MSI_VALUE ;
499+ break ;
500+ #endif
501+ default :
502+ Error_Handler ();
503+ }
504+ #else
505+ Error_Handler ();
506+ #endif
507+ }
435508 }
436509#endif // I2C6_BASE
437510 return clkSrcFreq ;
0 commit comments