Modified version of the Watchdog library with improved support for STM32

Dependents:   LightSaber iot_water_monitor_v2

Fork of Watchdog by David Smart

Revision:
9:84f7c088c261
Parent:
8:3c7d083f26b5
--- a/Watchdog.cpp	Tue Oct 27 17:04:16 2015 +0000
+++ b/Watchdog.cpp	Wed Nov 11 16:05:42 2015 +0000
@@ -76,7 +76,7 @@
 }
 
 // Compute the log2 of an integer. This is the simplest algorithm but probably is a bit slow.
-int log2(unsigned v)
+int Watchdog::log2(unsigned v)
 {
     unsigned r = 0;             
     
@@ -91,7 +91,9 @@
 void Watchdog::Configure(float s) {
     // http://www.st.com/web/en/resource/technical/document/reference_manual/CD00171190.pdf
     
-    s = s * 40000;                  // The average frequency of STM32 watchdog timer is 40 kHz but it can vary between 30 and 60 kHz
+    s = s * 32768;                  // Newer Nucleo boards have 32.768 kHz crystal. Without it, the internal 
+                                    // RC clock would have an average frequency of 40 kHz (variable between 30 and 60 kHz)
+                                    
     int scale = 1 + log2(s / 4096); // The RLR register is 12 bits and beyond that a prescaler should be used
     int residual = s / (1 << scale); // The value for the RLR register
     
@@ -99,7 +101,7 @@
         scale = 8;
         residual = 0xFFF;
     }
-        
+           
     IWDG->KR  = 0x5555;         // enable write to PR, RLR
     IWDG->PR  = scale - 2;      // Prescaler has values of multiples of 4 (i.e. 2 ^2), page 486 Reference Manual
     IWDG->RLR = residual;       // Init RLR