Als erstes nimmst du dir das RM0090, aktuell Rev 8, zur Hand:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/DM00031020.pdf
Dort findest du auf Seite 695 neben dem Blockdiagramm des IWDG eine
nette Tabelle, aus der hervorgeht, dass selbst mit einem Vorteiler-Wert
von 32 ein Watchdog-Timeout zwischen 1...4096ms eingestellt werden kann
(Reload-Register 12bit => 0...4095).
Zurück zum von dir genannten Beispiel:
1. der Prescaler wurde auf 32 gesetzt (im Beispiel könntest du ihn auch
auf jeden anderen zulässigen Wert setzen, da 250ms sich in allen
Wertebereichen wiederfindet)
2. der Reload-Wert ergibt sich dann wie im Kommentar beschrieben und man
muss natürlich wissen, dass die LSI-Freq (Low Speed Internal) durchaus
Bauteil-abhängig ist und beim STM32F405/7 z.B. zwischen 17...47kHz
liegt:
Zuerst nochmal den 250ms-Wert:
IWDG-f = LsiFreq/Prescaler
Reload Value = 250ms/(IWDG counter clock period)
= 250ms * IWDG-f
Wenn man hier IWDG-f durch die erste Gleichung ersetzt, kommst du auf
dasselbe Ergebnis, eben auf
= 250ms * LsiFreq/32 (Achtung: ms! 32/0.25=128) also:
= LsiFreq/128
Die Programmzeile lautet demnach:
IWDG_SetReload(uwLsiFreq/128);
Jetzt deine 15ms:
der Einfachheit kann der Vorteiler auf 32 bleiben, dann ergibt sich der
Reload-Wert zu:
IWDG-f = LsiFreq/Prescaler
Reload Value = 15ms/(IWDG counter clock period)
= 15ms * IWDG-f
Wenn man hier IWDG-f durch die erste Gleichung ersetzt, kommst du auf
= 15ms * LsiFreq/32 (Achtung: wieder ms! 32/0.015=2133.3)
also:
= LsiFreq/2133
Die Programmzeile lautet also:
IWDG_SetReload(uwLsiFreq/2133);
Jetzt musst du dich nur noch damit beschäftigen, wie du mit der
Abweichung von 2.3 Mikrosekunden klarkommst, die der IWDG später
zuschlägt.
Theoretisch.
Praktisch schaust du dir das Scheunentor der LSI-Frequenz im Datenblatt
an...
Alle Klarheiten beseitigt?