      }
  
    /* Loop until the transfer is complete. */
+@@ -731,6 +731,10 @@ static inline void stm32_i2c_sem_waitstop(FAR struct stm32_i2c_priv_s *priv)
+   start = clock_systimer();
+   do
+     {
++      /* Calculate the elapsed time */
++
++      elapsed = clock_systimer() - start;
++
+       /* Check for STOP condition */
+ 
+       cr1 = stm32_i2c_getreg(priv, STM32_I2C_CR1_OFFSET);
+@@ -747,9 +751,6 @@ static inline void stm32_i2c_sem_waitstop(FAR struct stm32_i2c_priv_s *priv)
+           return;
+         }
+ 
+-      /* Calculate the elapsed time */
+-
+-      elapsed = clock_systimer() - start;
+     }
+ 
+   /* Loop until the stop is complete or a timeout occurs. */
 diff --git NuttX/nuttx/arch/arm/src/stm32f7/stm32_i2c.c NuttX/nuttx/arch/arm/src/stm32f7/stm32_i2c.c
-index d089db9..1b5951d 100644
+index d089db9..fd73457 100644
 --- NuttX/nuttx/arch/arm/src/stm32f7/stm32_i2c.c
 +++ NuttX/nuttx/arch/arm/src/stm32f7/stm32_i2c.c
+@@ -7,7 +7,7 @@
+  *
+  * With extensions and modifications for the F1, F2, and F4 by:
+  *
+- *   Copyright (C) 2016 Gregory Nutt. All rights reserved.
++ *   Copyright (C) 2016-2017 Gregory Nutt. All rights reserved.
+  *   Authors: Gregroy Nutt <gnutt@nuttx.org>
+  *            John Wharington
+  *            David Sidrane <david_s5@nscdg.com>
 @@ -897,15 +897,15 @@ static inline int stm32_i2c_sem_waitdone(FAR struct stm32_i2c_priv_s *priv)
  
    do

     }
 
   /* Loop until the transfer is complete. */
diff --git NuttX/nuttx/arch/arm/src/stm32/stm32f40xxx_i2c.c NuttX/nuttx/arch/arm/src/stm32/stm32f40xxx_i2c.c
index 2bb715c..974fab8 100644
--- NuttX/nuttx/arch/arm/src/stm32/stm32f40xxx_i2c.c
+++ NuttX/nuttx/arch/arm/src/stm32/stm32f40xxx_i2c.c
@@ -7,7 +7,7 @@

     }
 
   /* Loop until the transfer is complete. */
@@ -1034,6 +1034,10 @@ static inline void stm32_i2c_sem_waitstop(FAR struct stm32_i2c_priv_s *priv)
   start = clock_systimer();
   do
     {
+      /* Calculate the elapsed time */
+
+      elapsed = clock_systimer() - start;
+
       /* Check for STOP condition */
 
       cr = stm32_i2c_getreg32(priv, STM32_I2C_CR2_OFFSET);
@@ -1050,9 +1054,6 @@ static inline void stm32_i2c_sem_waitstop(FAR struct stm32_i2c_priv_s *priv)
           return;
         }
 
-      /* Calculate the elapsed time */
-
-      elapsed = clock_systimer() - start;
     }
 
   /* Loop until the stop is complete or a timeout occurs. */
diff --git NuttX/nuttx/arch/arm/src/stm32l4/stm32l4_i2c.c NuttX/nuttx/arch/arm/src/stm32l4/stm32l4_i2c.c
index eed199f..be46524 100644
--- NuttX/nuttx/arch/arm/src/stm32l4/stm32l4_i2c.c
+++ NuttX/nuttx/arch/arm/src/stm32l4/stm32l4_i2c.c
@@ -4,7 +4,7 @@
