@@ -804,6 +804,49 @@ void i2c_deinit(i2c_t *obj)
804
804
HAL_NVIC_DisableIRQ (obj -> irqER );
805
805
#endif /* !STM32C0xx && !STM32F0xx && !STM32G0xx && !STM32L0xx */
806
806
HAL_I2C_DeInit (& (obj -> handle ));
807
+ // Reset I2Cx and disable clock
808
+ #if defined I2C1_BASE
809
+ if (obj -> i2c == I2C1 ) {
810
+ __HAL_RCC_I2C1_FORCE_RESET ();
811
+ __HAL_RCC_I2C1_RELEASE_RESET ();
812
+ __HAL_RCC_I2C1_CLK_DISABLE ();
813
+ }
814
+ #endif // I2C1_BASE
815
+ #if defined I2C2_BASE
816
+ if (obj -> i2c == I2C2 ) {
817
+ __HAL_RCC_I2C2_FORCE_RESET ();
818
+ __HAL_RCC_I2C2_RELEASE_RESET ();
819
+ __HAL_RCC_I2C2_CLK_DISABLE ();
820
+ }
821
+ #endif // I2C2_BASE
822
+ #if defined I2C3_BASE
823
+ if (obj -> i2c == I2C3 ) {
824
+ __HAL_RCC_I2C3_FORCE_RESET ();
825
+ __HAL_RCC_I2C3_RELEASE_RESET ();
826
+ __HAL_RCC_I2C3_CLK_DISABLE ();
827
+ }
828
+ #endif // I2C3_BASE
829
+ #if defined I2C4_BASE
830
+ if (obj -> i2c == I2C4 ) {
831
+ __HAL_RCC_I2C4_FORCE_RESET ();
832
+ __HAL_RCC_I2C4_RELEASE_RESET ();
833
+ __HAL_RCC_I2C4_CLK_DISABLE ();
834
+ }
835
+ #endif // I2C4_BASE
836
+ #if defined I2C5_BASE
837
+ if (obj -> i2c == I2C5 ) {
838
+ __HAL_RCC_I2C5_FORCE_RESET ();
839
+ __HAL_RCC_I2C5_RELEASE_RESET ();
840
+ __HAL_RCC_I2C5_CLK_DISABLE ();
841
+ }
842
+ #endif // I2C5_BASE
843
+ #if defined I2C6_BASE
844
+ if (obj -> i2c == I2C6 ) {
845
+ __HAL_RCC_I2C6_FORCE_RESET ();
846
+ __HAL_RCC_I2C6_RELEASE_RESET ();
847
+ __HAL_RCC_I2C6_CLK_DISABLE ();
848
+ }
849
+ #endif // I2C6_BASE
807
850
}
808
851
809
852
/**
0 commit comments