@@ -189,192 +189,235 @@ static I2C_HandleTypeDef *i2c_handles[I2C_NUM];
189189static uint32_t i2c_getClkFreq (I2C_TypeDef * i2c )
190190{
191191 uint32_t clkSrcFreq = 0 ;
192- #if !defined(STM32MP1xx )
193192#ifdef STM32H7xx
194193 PLL3_ClocksTypeDef PLL3_Clocks ;
195194#endif
196- #if defined I2C1_BASE
195+ #if defined( I2C1_BASE )
197196 if (i2c == I2C1 ) {
198- switch (__HAL_RCC_GET_I2C1_SOURCE ()) {
199- case RCC_I2C1CLKSOURCE_HSI :
200- clkSrcFreq = HSI_VALUE ;
201- break ;
197+ #if defined(RCC_PERIPHCLK_I2C1 ) || defined(RCC_PERIPHCLK_I2C12 )
198+ #ifdef RCC_PERIPHCLK_I2C1
199+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C1 );
200+ #else
201+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
202+ #endif
203+ if (clkSrcFreq == 0 )
204+ #endif
205+ {
206+ switch (__HAL_RCC_GET_I2C1_SOURCE ()) {
207+ #ifdef RCC_I2C1CLKSOURCE_HSI
208+ case RCC_I2C1CLKSOURCE_HSI :
209+ clkSrcFreq = HSI_VALUE ;
210+ break ;
211+ #endif
202212#ifdef RCC_I2C1CLKSOURCE_SYSCLK
203- case RCC_I2C1CLKSOURCE_SYSCLK :
204- clkSrcFreq = SystemCoreClock ;
205- break ;
213+ case RCC_I2C1CLKSOURCE_SYSCLK :
214+ clkSrcFreq = SystemCoreClock ;
215+ break ;
206216#endif
207217#if defined(RCC_I2C1CLKSOURCE_PCLK1 ) || defined(RCC_I2C1CLKSOURCE_D2PCLK1 )
208218#ifdef RCC_I2C1CLKSOURCE_PCLK1
209- case RCC_I2C1CLKSOURCE_PCLK1 :
219+ case RCC_I2C1CLKSOURCE_PCLK1 :
210220#endif
211221#ifdef RCC_I2C1CLKSOURCE_D2PCLK1
212- case RCC_I2C1CLKSOURCE_D2PCLK1 :
222+ case RCC_I2C1CLKSOURCE_D2PCLK1 :
213223#endif
214- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
215- break ;
224+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
225+ break ;
216226#endif
217227#ifdef RCC_I2C1CLKSOURCE_CSI
218- case RCC_I2C1CLKSOURCE_CSI :
219- clkSrcFreq = CSI_VALUE ;
220- break ;
228+ case RCC_I2C1CLKSOURCE_CSI :
229+ clkSrcFreq = CSI_VALUE ;
230+ break ;
221231#endif
222232#ifdef RCC_I2C1CLKSOURCE_PLL3
223- case RCC_I2C1CLKSOURCE_PLL3 :
224- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
225- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
226- break ;
233+ case RCC_I2C1CLKSOURCE_PLL3 :
234+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
235+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
236+ break ;
227237#endif
228- default :
229- Error_Handler ();
238+ default :
239+ Error_Handler ();
240+ }
230241 }
231242 }
232243#endif // I2C1_BASE
233- #if defined I2C2_BASE
244+ #if defined( I2C2_BASE )
234245 if (i2c == I2C2 ) {
246+ #if defined(RCC_PERIPHCLK_I2C2 ) || defined(RCC_PERIPHCLK_I2C12 )
247+ #ifdef RCC_PERIPHCLK_I2C2
248+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C2 );
249+ #else
250+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
251+ #endif
252+ if (clkSrcFreq == 0 )
253+ #endif
254+ {
235255#ifdef __HAL_RCC_GET_I2C2_SOURCE
236- switch (__HAL_RCC_GET_I2C2_SOURCE ()) {
237- case RCC_I2C2CLKSOURCE_HSI :
238- clkSrcFreq = HSI_VALUE ;
239- break ;
256+ switch (__HAL_RCC_GET_I2C2_SOURCE ()) {
257+ case RCC_I2C2CLKSOURCE_HSI :
258+ clkSrcFreq = HSI_VALUE ;
259+ break ;
240260#ifdef RCC_I2C2CLKSOURCE_SYSCLK
241- case RCC_I2C2CLKSOURCE_SYSCLK :
242- clkSrcFreq = SystemCoreClock ;
243- break ;
261+ case RCC_I2C2CLKSOURCE_SYSCLK :
262+ clkSrcFreq = SystemCoreClock ;
263+ break ;
244264#endif
245265#if defined(RCC_I2C2CLKSOURCE_PCLK1 ) || defined(RCC_I2C2CLKSOURCE_D2PCLK1 )
246266#ifdef RCC_I2C2CLKSOURCE_PCLK1
247- case RCC_I2C2CLKSOURCE_PCLK1 :
267+ case RCC_I2C2CLKSOURCE_PCLK1 :
248268#endif
249269#ifdef RCC_I2C2CLKSOURCE_D2PCLK1
250- case RCC_I2C2CLKSOURCE_D2PCLK1 :
270+ case RCC_I2C2CLKSOURCE_D2PCLK1 :
251271#endif
252- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
253- break ;
272+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
273+ break ;
254274#endif
255275#ifdef RCC_I2C2CLKSOURCE_CSI
256- case RCC_I2C2CLKSOURCE_CSI :
257- clkSrcFreq = CSI_VALUE ;
258- break ;
276+ case RCC_I2C2CLKSOURCE_CSI :
277+ clkSrcFreq = CSI_VALUE ;
278+ break ;
259279#endif
260280#ifdef RCC_I2C2CLKSOURCE_PLL3
261- case RCC_I2C2CLKSOURCE_PLL3 :
262- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
263- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
264- break ;
281+ case RCC_I2C2CLKSOURCE_PLL3 :
282+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
283+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
284+ break ;
265285#endif
266- default :
267- Error_Handler ();
268- }
286+ default :
287+ Error_Handler ();
288+ }
269289#else
270- /* STM32 L0/G0 I2C2 has no independent clock */
271- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
290+ /* STM32 L0/G0 I2C2 has no independent clock */
291+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
272292#endif
293+ }
273294 }
274295#endif // I2C2_BASE
275- #if defined I2C3_BASE
296+ #if defined( I2C3_BASE )
276297 if (i2c == I2C3 ) {
298+ #if defined(RCC_PERIPHCLK_I2C3 ) || defined(RCC_PERIPHCLK_I2C35 )
299+ #ifdef RCC_PERIPHCLK_I2C3
300+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C3 );
301+ #else
302+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
303+ #endif
304+ if (clkSrcFreq == 0 )
305+ #endif
306+ {
277307#if defined(__HAL_RCC_GET_I2C3_SOURCE )
278- switch (__HAL_RCC_GET_I2C3_SOURCE ()) {
279- case RCC_I2C3CLKSOURCE_HSI :
280- clkSrcFreq = HSI_VALUE ;
281- break ;
308+ switch (__HAL_RCC_GET_I2C3_SOURCE ()) {
309+ case RCC_I2C3CLKSOURCE_HSI :
310+ clkSrcFreq = HSI_VALUE ;
311+ break ;
282312#ifdef RCC_I2C3CLKSOURCE_SYSCLK
283- case RCC_I2C3CLKSOURCE_SYSCLK :
284- clkSrcFreq = SystemCoreClock ;
285- break ;
313+ case RCC_I2C3CLKSOURCE_SYSCLK :
314+ clkSrcFreq = SystemCoreClock ;
315+ break ;
286316#endif
287317#if defined(RCC_I2C3CLKSOURCE_PCLK1 ) || defined(RCC_I2C3CLKSOURCE_D2PCLK1 )
288318#ifdef RCC_I2C3CLKSOURCE_PCLK1
289- case RCC_I2C3CLKSOURCE_PCLK1 :
319+ case RCC_I2C3CLKSOURCE_PCLK1 :
290320#endif
291321#ifdef RCC_I2C3CLKSOURCE_D2PCLK1
292- case RCC_I2C3CLKSOURCE_D2PCLK1 :
322+ case RCC_I2C3CLKSOURCE_D2PCLK1 :
293323#endif
294- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
295- break ;
324+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
325+ break ;
296326#endif
297327#ifdef RCC_I2C3CLKSOURCE_CSI
298- case RCC_I2C3CLKSOURCE_CSI :
299- clkSrcFreq = CSI_VALUE ;
300- break ;
328+ case RCC_I2C3CLKSOURCE_CSI :
329+ clkSrcFreq = CSI_VALUE ;
330+ break ;
301331#endif
302332#ifdef RCC_I2C3CLKSOURCE_PLL3
303- case RCC_I2C3CLKSOURCE_PLL3 :
304- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
305- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
306- break ;
333+ case RCC_I2C3CLKSOURCE_PLL3 :
334+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
335+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
336+ break ;
307337#endif
308- default :
309- Error_Handler ();
310- }
338+ default :
339+ Error_Handler ();
340+ }
311341#else
312- /* STM32 G0 I2C3 has no independent clock */
313- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
342+ /* STM32 G0 I2C3 has no independent clock */
343+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
314344#endif
345+ }
315346 }
316347#endif // I2C3_BASE
317- #if defined I2C4_BASE
348+ #if defined( I2C4_BASE )
318349 if (i2c == I2C4 ) {
319- switch (__HAL_RCC_GET_I2C4_SOURCE ()) {
320- case RCC_I2C4CLKSOURCE_HSI :
321- clkSrcFreq = HSI_VALUE ;
322- break ;
350+ #if defined(RCC_PERIPHCLK_I2C4 ) || defined(RCC_PERIPHCLK_I2C46 )
351+ #ifdef RCC_PERIPHCLK_I2C4
352+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C4 );
353+ #else
354+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
355+ #endif
356+ if (clkSrcFreq == 0 )
357+ #endif
358+ {
359+ switch (__HAL_RCC_GET_I2C4_SOURCE ()) {
360+ #ifdef RCC_I2C4CLKSOURCE_HSI
361+ case RCC_I2C4CLKSOURCE_HSI :
362+ clkSrcFreq = HSI_VALUE ;
363+ break ;
364+ #endif
323365#ifdef RCC_I2C4CLKSOURCE_SYSCLK
324- case RCC_I2C4CLKSOURCE_SYSCLK :
325- clkSrcFreq = SystemCoreClock ;
326- break ;
366+ case RCC_I2C4CLKSOURCE_SYSCLK :
367+ clkSrcFreq = SystemCoreClock ;
368+ break ;
327369#endif
328370#ifdef RCC_I2C4CLKSOURCE_PCLK1
329- case RCC_I2C4CLKSOURCE_PCLK1 :
330- clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
331- break ;
371+ case RCC_I2C4CLKSOURCE_PCLK1 :
372+ clkSrcFreq = HAL_RCC_GetPCLK1Freq ();
373+ break ;
332374#endif
333375#ifdef RCC_I2C4CLKSOURCE_D3PCLK1
334- case RCC_I2C4CLKSOURCE_D3PCLK1 :
335- clkSrcFreq = HAL_RCCEx_GetD3PCLK1Freq ();
336- break ;
376+ case RCC_I2C4CLKSOURCE_D3PCLK1 :
377+ clkSrcFreq = HAL_RCCEx_GetD3PCLK1Freq ();
378+ break ;
337379#endif
338380#ifdef RCC_I2C4CLKSOURCE_CSI
339- case RCC_I2C4CLKSOURCE_CSI :
340- clkSrcFreq = CSI_VALUE ;
341- break ;
381+ case RCC_I2C4CLKSOURCE_CSI :
382+ clkSrcFreq = CSI_VALUE ;
383+ break ;
342384#endif
343385#ifdef RCC_I2C4CLKSOURCE_PLL3
344- case RCC_I2C4CLKSOURCE_PLL3 :
345- HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
346- clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
347- break ;
386+ case RCC_I2C4CLKSOURCE_PLL3 :
387+ HAL_RCCEx_GetPLL3ClockFreq (& PLL3_Clocks );
388+ clkSrcFreq = PLL3_Clocks .PLL3_R_Frequency ;
389+ break ;
348390#endif
349- default :
350- Error_Handler ();
391+ default :
392+ Error_Handler ();
393+ }
351394 }
352395 }
353396#endif // I2C4_BASE
354-
355- #elif defined(STM32MP1xx )
356- if (i2c == I2C1 ) {
357- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
358- }
359- if (i2c == I2C2 ) {
360- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C12 );
361- }
362- if (i2c == I2C3 ) {
363- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
364- }
365- if (i2c == I2C4 ) {
366- clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
367- }
368- #endif // STM32MP1xx
369-
370- #if defined I2C5_BASE
397+ #if defined(I2C5_BASE )
371398 if (i2c == I2C5 ) {
399+ #if defined(RCC_PERIPHCLK_I2C5 ) || defined(RCC_PERIPHCLK_I2C35 )
400+ #ifdef RCC_PERIPHCLK_I2C5
401+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C5 );
402+ #else
372403 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
404+ #endif
405+ if (clkSrcFreq == 0 )
406+ #endif
407+ {
408+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C35 );
409+ }
373410 }
374411#endif // I2C5_BASE
375- #if defined I2C6_BASE
412+ #if defined( I2C6_BASE )
376413 if (i2c == I2C6 ) {
414+ #if defined(RCC_PERIPHCLK_I2C6 ) || defined(RCC_PERIPHCLK_I2C46 )
415+ #ifdef RCC_PERIPHCLK_I2C6
416+ clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C6 );
417+ #else
377418 clkSrcFreq = HAL_RCCEx_GetPeriphCLKFreq (RCC_PERIPHCLK_I2C46 );
419+ #endif
420+ #endif
378421 }
379422#endif // I2C6_BASE
380423 return clkSrcFreq ;
0 commit comments