diff --git a/embassy-stm32/src/i2c/v2.rs b/embassy-stm32/src/i2c/v2.rs
index 33c397404..6627d7f67 100644
--- a/embassy-stm32/src/i2c/v2.rs
+++ b/embassy-stm32/src/i2c/v2.rs
@@ -755,10 +755,11 @@ impl<'d, T: Instance, TXDMA, RXDMA> I2c<'d, T, TXDMA, RXDMA> {
     }
 
     pub fn blocking_read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Error> {
-        #[cfg(feature = "time")]
-        self.blocking_read_timeout(address, read, self.timeout)
-        #[cfg(not(feature = "time"))]
-        self.blocking_read_timeout(address, read, || Ok(()))
+        if cfg!(feature = "time") {
+            self.blocking_read_timeout(address, read, self.timeout)
+        } else {
+            self.blocking_read_timeout(address, read, || Ok(()))
+        }
     }
 
     #[cfg(feature = "time")]
@@ -772,10 +773,11 @@ impl<'d, T: Instance, TXDMA, RXDMA> I2c<'d, T, TXDMA, RXDMA> {
     }
 
     pub fn blocking_write(&mut self, address: u8, write: &[u8]) -> Result<(), Error> {
-        #[cfg(feature = "time")]
-        self.blocking_write_timeout(address, write, self.timeout)
-        #[cfg(not(feature = "time"))]
-        self.blocking_write_timeout(address, write, || Ok(()))
+        if cfg!(feature = "time") {
+            self.blocking_write_timeout(address, write, self.timeout)
+        } else {
+            self.blocking_write_timeout(address, write, || Ok(()))
+        }
     }
 
     #[cfg(feature = "time")]
@@ -807,10 +809,11 @@ impl<'d, T: Instance, TXDMA, RXDMA> I2c<'d, T, TXDMA, RXDMA> {
     }
 
     pub fn blocking_write_read(&mut self, address: u8, write: &[u8], read: &mut [u8]) -> Result<(), Error> {
-        #[cfg(feature = "time")]
-        self.blocking_write_read_timeout(address, write, read, self.timeout)
-        #[cfg(not(feature = "time"))]
-        self.blocking_write_read_timeout(address, write, read, || Ok(()))
+        if cfg!(feature = "time") {
+            self.blocking_write_read_timeout(address, write, read, self.timeout)
+        } else {
+            self.blocking_write_read_timeout(address, write, read, || Ok(()))
+        }
     }
 
     fn blocking_write_vectored_with_timeout(
@@ -913,10 +916,11 @@ impl<'d, T: Instance, TXDMA, RXDMA> I2c<'d, T, TXDMA, RXDMA> {
     }
 
     pub fn blocking_write_vectored(&mut self, address: u8, write: &[&[u8]]) -> Result<(), Error> {
-        #[cfg(feature = "time")]
-        self.blocking_write_vectored_timeout(address, write, self.timeout)
-        #[cfg(not(feature = "time"))]
-        self.blocking_write_vectored_timeout(address, write, || Ok(()))
+        if cfg!(feature = "time") {
+            self.blocking_write_vectored_timeout(address, write, self.timeout)
+        } else {
+            self.blocking_write_vectored_timeout(address, write, || Ok(()))
+        }
     }
 }