@@ -686,9 +686,10 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
686686 __HAL_RCC_I2C1_RELEASE_RESET ();
687687
688688 obj -> irq = I2C1_EV_IRQn ;
689- #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
689+ #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && \
690+ !defined(STM32L0xx ) && !defined(STM32U0xx )
690691 obj -> irqER = I2C1_ER_IRQn ;
691- #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx */
692+ #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
692693 i2c_handles [I2C1_INDEX ] = handle ;
693694 }
694695#endif // I2C1_BASE
@@ -699,9 +700,10 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
699700 __HAL_RCC_I2C2_FORCE_RESET ();
700701 __HAL_RCC_I2C2_RELEASE_RESET ();
701702 obj -> irq = I2C2_EV_IRQn ;
702- #if !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
703+ #if !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx ) && \
704+ !defined(STM32U0xx )
703705 obj -> irqER = I2C2_ER_IRQn ;
704- #endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
706+ #endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
705707 i2c_handles [I2C2_INDEX ] = handle ;
706708 }
707709#endif // I2C2_BASE
@@ -712,9 +714,9 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
712714 __HAL_RCC_I2C3_FORCE_RESET ();
713715 __HAL_RCC_I2C3_RELEASE_RESET ();
714716 obj -> irq = I2C3_EV_IRQn ;
715- #if !defined(STM32G0xx ) && !defined(STM32L0xx )
717+ #if !defined(STM32G0xx ) && !defined(STM32L0xx ) && !defined( STM32U0xx )
716718 obj -> irqER = I2C3_ER_IRQn ;
717- #endif /* !STM32G0xx && !STM32L0xx */
719+ #endif /* !STM32G0xx && !STM32L0xx && !STM32U0xx */
718720 i2c_handles [I2C3_INDEX ] = handle ;
719721 }
720722#endif // I2C3_BASE
@@ -725,7 +727,9 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
725727 __HAL_RCC_I2C4_FORCE_RESET ();
726728 __HAL_RCC_I2C4_RELEASE_RESET ();
727729 obj -> irq = I2C4_EV_IRQn ;
730+ #if !defined(STM32U0xx )
728731 obj -> irqER = I2C4_ER_IRQn ;
732+ #endif /* !STM32U0xx */
729733 i2c_handles [I2C4_INDEX ] = handle ;
730734 }
731735#endif // I2C4_BASE
@@ -780,10 +784,11 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
780784
781785 HAL_NVIC_SetPriority (obj -> irq , I2C_IRQ_PRIO , I2C_IRQ_SUBPRIO );
782786 HAL_NVIC_EnableIRQ (obj -> irq );
783- #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
787+ #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && \
788+ !defined(STM32L0xx ) && !defined(STM32U0xx )
784789 HAL_NVIC_SetPriority (obj -> irqER , I2C_IRQ_PRIO , I2C_IRQ_SUBPRIO );
785790 HAL_NVIC_EnableIRQ (obj -> irqER );
786- #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx */
791+ #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
787792
788793 /* Init the I2C */
789794 if (HAL_I2C_Init (handle ) != HAL_OK ) {
@@ -807,9 +812,10 @@ void i2c_custom_init(i2c_t *obj, uint32_t timing, uint32_t addressingMode, uint3
807812void i2c_deinit (i2c_t * obj )
808813{
809814 HAL_NVIC_DisableIRQ (obj -> irq );
810- #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
815+ #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && \
816+ !defined(STM32L0xx ) && !defined(STM32U0xx )
811817 HAL_NVIC_DisableIRQ (obj -> irqER );
812- #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx */
818+ #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
813819 HAL_I2C_DeInit (& (obj -> handle ));
814820 /* Reset I2C GPIO pins as INPUT_ANALOG */
815821 pin_function (obj -> scl , STM_PIN_DATA (STM_MODE_ANALOG , GPIO_NOPULL , 0 ));
@@ -1232,12 +1238,14 @@ void I2C1_EV_IRQHandler(void)
12321238{
12331239 I2C_HandleTypeDef * handle = i2c_handles [I2C1_INDEX ];
12341240 HAL_I2C_EV_IRQHandler (handle );
1235- #if defined(STM32C0xx ) || defined(STM32F0xx ) || defined(STM32G0xx ) || defined(STM32L0xx )
1241+ #if defined(STM32C0xx ) || defined(STM32F0xx ) || defined(STM32G0xx ) || \
1242+ defined(STM32L0xx ) || defined(STM32U0xx )
12361243 HAL_I2C_ER_IRQHandler (handle );
1237- #endif /* STM32C0xx || STM32F0xx || STM32G0xx || STM32L0xx */
1244+ #endif /* STM32C0xx || STM32F0xx || STM32G0xx || STM32L0xx || STM32U0xx */
12381245}
12391246
1240- #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
1247+ #if !defined(STM32C0xx ) && !defined(STM32F0xx ) && !defined(STM32G0xx ) && \
1248+ !defined(STM32L0xx ) && !defined(STM32U0xx )
12411249/**
12421250* @brief This function handles I2C1 interrupt.
12431251* @param None
@@ -1248,7 +1256,7 @@ void I2C1_ER_IRQHandler(void)
12481256 I2C_HandleTypeDef * handle = i2c_handles [I2C1_INDEX ];
12491257 HAL_I2C_ER_IRQHandler (handle );
12501258}
1251- #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx */
1259+ #endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
12521260#endif // I2C1_BASE
12531261
12541262#if defined(I2C2_BASE )
@@ -1259,7 +1267,7 @@ void I2C1_ER_IRQHandler(void)
12591267*/
12601268void I2C2_EV_IRQHandler (void )
12611269{
1262- #if defined(I2C3_BASE ) && defined(STM32G0xx )
1270+ #if defined(I2C3_BASE ) && ( defined(STM32G0xx ) || defined( STM32U0xx ) )
12631271 /* I2C2_3_IRQHandler */
12641272 I2C_HandleTypeDef * handle2 = i2c_handles [I2C2_INDEX ];
12651273 I2C_HandleTypeDef * handle3 = i2c_handles [I2C3_INDEX ];
@@ -1271,16 +1279,26 @@ void I2C2_EV_IRQHandler(void)
12711279 HAL_I2C_EV_IRQHandler (handle3 );
12721280 HAL_I2C_ER_IRQHandler (handle3 );
12731281 }
1282+ #if defined(I2C4_BASE )
1283+ /* I2C2_3_4_IRQHandler */
1284+ I2C_HandleTypeDef * handle4 = i2c_handles [I2C4_INDEX ];
1285+ if (handle4 ) {
1286+ HAL_I2C_EV_IRQHandler (handle4 );
1287+ HAL_I2C_ER_IRQHandler (handle4 );
1288+ }
1289+ #endif /* I2C4_BASE */
12741290#else
12751291 I2C_HandleTypeDef * handle = i2c_handles [I2C2_INDEX ];
12761292 HAL_I2C_EV_IRQHandler (handle );
1277- #if defined(STM32F0xx ) || defined(STM32G0xx ) || defined(STM32L0xx )
1293+ #if defined(STM32F0xx ) || defined(STM32G0xx ) || defined(STM32L0xx ) || \
1294+ defined(STM32U0xx )
12781295 HAL_I2C_ER_IRQHandler (handle );
1279- #endif /* STM32F0xx || STM32G0xx || STM32L0xx */
1296+ #endif /* STM32F0xx || STM32G0xx || STM32L0xx || STM32U0xx */
12801297#endif
12811298}
12821299
1283- #if !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx )
1300+ #if !defined(STM32F0xx ) && !defined(STM32G0xx ) && !defined(STM32L0xx ) && \
1301+ !defined(STM32U0xx )
12841302/**
12851303* @brief This function handles I2C2 interrupt.
12861304* @param None
@@ -1291,10 +1309,10 @@ void I2C2_ER_IRQHandler(void)
12911309 I2C_HandleTypeDef * handle = i2c_handles [I2C2_INDEX ];
12921310 HAL_I2C_ER_IRQHandler (handle );
12931311}
1294- #endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx */
1312+ #endif /* !STM32F0xx && !STM32G0xx && !STM32L0xx && !STM32U0xx */
12951313#endif // I2C2_BASE
12961314
1297- #if defined(I2C3_BASE ) && !defined(STM32G0xx )
1315+ #if defined(I2C3_BASE ) && !defined(STM32G0xx ) && !defined( STM32U0xx )
12981316/**
12991317* @brief This function handles I2C3 interrupt.
13001318* @param None
@@ -1321,9 +1339,9 @@ void I2C3_ER_IRQHandler(void)
13211339 HAL_I2C_ER_IRQHandler (handle );
13221340}
13231341#endif /* !STM32L0xx */
1324- #endif /* I2C3_BASE && ! STM32G0xx */
1342+ #endif /* I2C3_BASE && ! STM32G0xx && !STM32U0xx */
13251343
1326- #if defined(I2C4_BASE )
1344+ #if defined(I2C4_BASE ) && !defined( STM32U0xx )
13271345/**
13281346* @brief This function handles I2C4 interrupt.
13291347* @param None
@@ -1346,7 +1364,7 @@ void I2C4_ER_IRQHandler(void)
13461364 I2C_HandleTypeDef * handle = i2c_handles [I2C4_INDEX ];
13471365 HAL_I2C_ER_IRQHandler (handle );
13481366}
1349- #endif // I2C4_BASE
1367+ #endif // I2C4_BASE && !STM32U0xx
13501368
13511369#if defined(I2C5_BASE )
13521370/**
0 commit comments