Vorsicht vor dem STM32 LSI: Seine Toleranz beträgt bis zu ±47%
Der STM32 LSI-Oszillator mag wie eine attraktive Wahl für RTC, IWDG-Watchdog usw. erscheinen – ohne externe Bauteile und
Aber eine Tatsache wird oft übersehen: Da er intern ein RC-Oszillator ist, hat er eine extrem hohe Toleranz.
Beim Blick in das STM32F407-Datenblatt sehen wir beispielsweise, dass seine Toleranz ±47% beträgt.

Mit anderen Worten, der LSI-Takt kann halb so langsam oder 1,5-mal so schnell wie erwartet laufen.
±47% entspricht ±470 000 ppm, während jeder normale Quarz eine Toleranz von ±20 ppm hat.
Neuere STM32-Familien wie der STM32H747XI haben eine verbesserte LSI-Genauigkeit:

Dies entspricht einer Toleranz von ±1,875 %, was ±18 750 ppm entspricht – immer noch Größenordnungen mehr als jeder Quarz oder sogar Keramikresonator.
Kann die Abweichung durch RTC-Digital-Tuning ausgeglichen werden?
Das STM32-Digital-Tuning hat nur einen Bereich von -487,1 ppm bis +488,5 ppm – aber selbst für den viel genaueren STM32H747XI wäre ein Tuning-Bereich von mindestens ±20 000 ppm erforderlich, um anfängliche Ungenauigkeiten und Temperaturkoeffizienten auszugleichen.
Was kann getan werden, um eine bessere Genauigkeit zu erzielen?
In der Regel empfehle ich, einfach einen Quarz für die RTC zu verwenden – oder komplett eine externe RTC zu verwenden.
Bezüglich des IWDG gibt es keine andere Wahl als den LSI zu verwenden. In der Regel kann einfach ein längereres Reset-Intervall gewählt werden, um unbeabsichtigte Watchdog-Resets zu vermeiden, wenn der LSI viel schneller als die Standard-32 kHz läuft, oder der Watchdog kann häufiger zurückgesetzt werden. Wenn der Watchdog in einem Interrupt zurückgesetzt wird, sollte ein Interrupt mit höherer Priorität verwendet werden – und globale Interrupt-Deaktivierungen seltener durchgeführt werden und versucht werden, Zeiträume zu vermeiden, in denen Interrupts global für lange Zeit kontinuierlich deaktiviert sind.