From c2f1ca54ad324e024e80247ed317e3b1af195217 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Mon, 21 Oct 2024 14:40:06 +0200 Subject: [PATCH] fix(i2c): wrong clock frequencies for I2C5 and I2C6 Fixes #2534 Signed-off-by: Frederic Pillon --- libraries/Wire/src/utility/twi.c | 73 ++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/libraries/Wire/src/utility/twi.c b/libraries/Wire/src/utility/twi.c index 19eb3e337a..507fc63d96 100644 --- a/libraries/Wire/src/utility/twi.c +++ b/libraries/Wire/src/utility/twi.c @@ -420,7 +420,49 @@ static uint32_t i2c_getClkFreq(I2C_TypeDef *i2c) #else clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_I2C35); #endif + if (clkSrcFreq == 0) +#endif + { +#ifdef __HAL_RCC_GET_I2C5_SOURCE + switch (__HAL_RCC_GET_I2C5_SOURCE()) { +#ifdef RCC_I2C5CLKSOURCE_HSI + case RCC_I2C5CLKSOURCE_HSI: + clkSrcFreq = HSI_VALUE; + break; +#endif +#ifdef RCC_I2C5CLKSOURCE_SYSCLK + case RCC_I2C5CLKSOURCE_SYSCLK: + clkSrcFreq = SystemCoreClock; + break; +#endif +#if defined(RCC_I2C5CLKSOURCE_PCLK1) || defined(RCC_I2C5CLKSOURCE_D2PCLK1) +#ifdef RCC_I2C5CLKSOURCE_PCLK1 + case RCC_I2C5CLKSOURCE_PCLK1: +#endif +#ifdef RCC_I2C5CLKSOURCE_D2PCLK1 + case RCC_I2C5CLKSOURCE_D2PCLK1: +#endif + clkSrcFreq = HAL_RCC_GetPCLK1Freq(); + break; +#endif +#ifdef RCC_I2C5CLKSOURCE_CSI + case RCC_I2C5CLKSOURCE_CSI: + clkSrcFreq = CSI_VALUE; + break; +#endif +#ifdef RCC_I2C5CLKSOURCE_PLL3 + case RCC_I2C5CLKSOURCE_PLL3: + HAL_RCCEx_GetPLL3ClockFreq(&PLL3_Clocks); + clkSrcFreq = PLL3_Clocks.PLL3_R_Frequency; + break; #endif + default: + Error_Handler(); + } +#else + Error_Handler(); +#endif + } } #endif // I2C5_BASE #if defined(I2C6_BASE) @@ -431,7 +473,38 @@ static uint32_t i2c_getClkFreq(I2C_TypeDef *i2c) #else clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_I2C46); #endif + if (clkSrcFreq == 0) +#endif + { +#ifdef __HAL_RCC_GET_I2C6_SOURCE + switch (__HAL_RCC_GET_I2C6_SOURCE()) { +#ifdef RCC_I2C6CLKSOURCE_HSI + case RCC_I2C6CLKSOURCE_HSI: + clkSrcFreq = HSI_VALUE; + break; +#endif +#ifdef RCC_I2C6CLKSOURCE_SYSCLK + case RCC_I2C6CLKSOURCE_SYSCLK: + clkSrcFreq = SystemCoreClock; + break; #endif +#ifdef RCC_I2C6CLKSOURCE_PCLK1 + case RCC_I2C6CLKSOURCE_PCLK1: + clkSrcFreq = HAL_RCC_GetPCLK1Freq(); + break; +#endif +#ifdef RCC_I2C6CLKSOURCE_MSIK + case RCC_I2C6CLKSOURCE_MSIK: + clkSrcFreq = MSI_VALUE; + break; +#endif + default: + Error_Handler(); + } +#else + Error_Handler(); +#endif + } } #endif // I2C6_BASE return clkSrcFreq; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy