hi, ich habe einen stm32f103 und verwende keil µVision 4. ich speicher einen wert in einer Variable, der wert soll nach einem reset nicht gelöscht werden, was er aber tut. was muss ich machen das der Variablenwert unverändert bleibt. der stm32 hat auch eine batterie
im EEPROM speichern bei der init in eine temporäre Var speichern ich weiß allerdings nicht, ob dein MC diesen Nichtflüchtigen Speicher aufweist. Ein C-Beispiel:
1 | #include <avr/eeprom.h> |
2 | //+ den rest
|
3 | |
4 | //Zelle
|
5 | uint8_t var_cell EEMEN=3; |
6 | //var
|
7 | uint8_t var_tmp; |
8 | |
9 | void init() |
10 | {
|
11 | var_tem=eeprom_read_byte(&var_cell); |
12 | }
|
13 | |
14 | int main() |
15 | {
|
16 | init(); |
17 | ///...
|
18 | }
|
natürlich must du vor dem stromverlust die variable wieder in den EEPROM speichen, sonst brings alles nichts. Und nein, der EEPROM ist zu langsam, um ständig in ihn zu schreiben und aus ihm zu lesen. Und er kan nur eine begrenzte Anzehl wieder beschrieben werden(siehe Dtaenblatt, ca. 10k).
Hi Ich habe zwar keine Ahnung von STM32 aber eine kurze Suche im Reference Manual nach 'Reset Source' fördert ein Register zu Tage, in dem die Resetquelle feststellen kann. Also kann man beim Programmstart passend reagieren. MfG Spess
das ist aber eine Variable die sich häufig ändert und wann die Versorgung ausfällt kann ich nicht vorhersagen
Hier kannst du dir ein Beispiel zusammensuchen bei dem eine Variable nicht initialisiert wird. http://www.keil.com/support/docs/3480.htm
> und wann die Versorgung ausfällt kann ich nicht vorhersagen > der stm32 hat auch eine batterie Wenn die normale Versorgung nicht über die Batterie geht, dann hast du hier deinen Ansatzpunkt. Sobald auf Batterie umgeschaltet wird, ist der Zeitpunkt gekommen, mal einen Zwischenstand im EEPROM zu speichern. Ansonsten musst du eben baulich dafür sorgen, dass nach Ausfall der regulären Versorgung der µC und das EEPROM noch für ein paar Sekunden Saft haben.
Wie - um alles in der Welt - verwendest Du den Reset? Üblicherweise benutze ich diesen (indirekt) beim Einschalten. Hierbei hilft sowieso nur das EEPROM und wenn der Wachhund anschlägt. Dann aber sind gespeicherte Variablen bestenfalls zweifelhaft. Vor allem, wenn der Wauwau während des Speicherns zubeißt.
Wenn Dein Rechner nicht allzu gierig ist, was den Stromverbrauch betrifft, so entkopple ihn z.B. mit eigenem L05 oder so und einem ordentlichen Kondensator. Dann überwache den Leistungsstrang und sichere Deine Variablen, wenn dem die Puste ausgeht. Wenn Du Volldampf nicht benötigst, reicht vielleicht auch eine Reihendiode mit passendem "C".
Der STM32F103 hat auch 20 bytes battery backed registers. Wenn du also eine unabhängige Spannungsquelle an VBat angeschlossen hast, kannst du dadrin solange 20 byte speichern, bis die Batterie den Geist aufgibt. Wie man die genau nutzt weiss ich nicht, aber ich nehme an, dass man einfach an eine bestimmte Speicheradresse schreiben muss.
Der STM32 hat keinen EEPROM aber dafür gibt es EEPROM Emulation: http://www.bdtic.com/DownLoad/ST/AN4061.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.