Hallo zusammen,
ich habe ein Softwareprojekt zum steuern meines E-Autos. (https://github.com/jsphuebner/stm32-car/tree/touran-meb). Es läuft auf einem STM32F103RBT6. Da ich einen neuen Akku verbaut habe läuft das jetzt mit dem BMS etwas anders, ich muss viele Sachen selbst machen die vorher ein OEM BMS gemacht hat.
Eines davon ist die SoC Berechnung anhand der entnommenen Ladung. Das klappt soweit alles, nun möchte ich aber den SoC speichern und wenn ich das Auto wieder benutze den alten Wert wieder laden.
Ich will vermeiden das interne Flash zu nutzen, weil z.B. beim Löschen einer Page der Prozessor kurz Pause macht - beim Fahren eher schlecht.
Nun dachte ich, ich kann das Alarm-Register der RTC quasi als gepuffertes SRAM zweckentfremden. Klappt aber nicht, nach einem Neustart (egal ob Soft Reset oder Power on Reset) ist der wert wieder auf -1. Direkt nach dem Reinschreiben ist der Wert gespeichert, nur eben nach dem Neustart nicht.
Beim booten nutze ich von libopencm3 die Funktion rtc_awake_from_standby() und probeweise auch rtc_auto_awake(RCC_LSE, 32767) (einmal muss die Clock-Config ja gemacht werden).
Die Funktion macht eigentlich nichts verdächtiges:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
Die Zeit an sich verhält sich auch wie geplant, sprich die Sekunden laufen auch weiter wenn ich die Spannung wegnehme (3V Batterie hängt an VBAT, Takt über 32 kHz Quartz). Nur der Alarm-Wert ist weg. Was mache ich falsch?