Hallo Zusammen, ich programmiere gerade einen STM32F030 und möchte wichtige Prozessdaten beim unterbrechen der Versorgungsspannung vorher auf ein EEPROM speichern. Da der uC eine Versorgungsspannung von 2.4-3.6V verträgt und ich mal irgendwo etwas davon gelesen habe, dass man irgendwo die Versorgungsspannung auslesen kann, bzw dafür Interrupts aktivieren kann, wollte ich das Anliegen wie folgt lösen. Positive Flanke Interrupt Vcc < 2,7V = Daten auf EEPROM speichern. (Ggf noch mit einer Entprellung versehen) Nun finde ich jedoch im usermanual nur Register für den Lowpowermode. Hat jemand von euch schon mal sowas mit einem STM32 realisiert? Oder weiß jemand welche Register dafür zu verwenden sind? Gruß
Guggst Du Datasheet Reference Manual RM0360 Errata Sheet. Stichwort "Analog Watchdog"
Mit dem F030 hast Du Dir ja das kleinste Sparbroetchen ausgesucht. Fast alle anderen STM32 haben einen "Programmable voltage detector (PVD)" Interrupt, beim F030 ist der weggespart...
Wenn ich mir mal kurz das Datenblatt anschaue, dann fällt mir da das "AWD analog watchdog feature" auf. Das könnte man für sowas verwenden. Der Controller und das EEPROM wird ausreichend über einen C gepuffert um noch die Daten ins EEPROM zu schreiben. Ein analog Pin geht vor die Pufferung und nutzt das Feature AWD mit den gewünschten Schwellen. Sobald der Bereich verlassen wird gibt es einen Interrupt und Du schreibst das Zeug weg. Der Puffer muss halt ausreichend groß sein.
Uwe B. schrieb: > Mit dem F030 hast Du Dir ja das kleinste Sparbroetchen ausgesucht. Fast > alle anderen STM32 haben einen "Programmable voltage detector (PVD)" > Interrupt, beim F030 ist der weggespart... Ah, der F7-Rennfahrer. ;) Der Analog-Watchdog ist vorhanden. Und der F030 ist der Grund, warum ich AVR und PIC nur noch unter ganz bestimmten Randbedingungen einsetze. Beispiel: auf diesem 0,5€-Sparbrötchen (ich liebe den Begriff) http://www.harerod.de/applications_ger.html#ASi-Xceiver werkeln mehrere Timer und DMA-Streams parallel und ersetzen ein ASIC zu 20% der Materialkosten. :)
Klar, wenn es um Stueckzahlen geht, dann einen uC so klein wie moeglich. Und wahrscheinlich kostet es Dich fast die gleiche Zeit, sich in dem PVD oder den Analog Watchdog einzuarbeiten. Und damit wirst Du noch auf der positive Seite sein, wenn Du analog https://xkcd.com/1205/ Entwicklungskosten gegen Bauteilekosten auftraegst. Aber fuer den Bastler hier kostet ein Nucleo-L476 genausoviel wie ein Nucleo-F030.
XKCD ;) Ich bin da eher old school: http://www.ee.ryerson.ca/~elf/hack/realmen.html "Real Programmers write self-modifying code, especially if it saves them 20 nanoseconds in the middle of a tight loop." -> auf den STM32F4/F7 ist das noch etwas härter, da man durch die Ausführung im SRAM den ART verliert... Ich bastele praktisch nicht mehr. Ich habe, manchmal leider, ein Hobby zum Beruf gemacht. Und der TO hat von der Wortwahl her auch nicht nach Bastler geklungen.
Marcus H. schrieb: ... > -> auf den STM32F4/F7 ist das noch etwas härter, da man durch die > Ausführung im SRAM den ART verliert... > Was soll da verloren gehen? ART versucht mit Tricks die Flash Latency von x Waitstates auf 0 Waitstates zu reduzieren. Ausfuehrung aus CCM/ITCM SRAM hat immer 0 Waitstates, Ausfuehrung aus dem SRAM hat auch meistens 0 Waitstates, bi auf den Fall bei gleichzeitigen DMA Zugriff auf RAM.
Auf F4 ist code execution aus dem SRAM ist langsamer als aus dem Flash. Zumindest war das beim GCC 4.8.3 auf dem F407@168MHz bei mir auf dem Schreibtisch der Fall. Ursachen sind ART und Busstruktur. Siehe auch: RM0090 -> 3 Embedded Flash memory Interface -> Figure 3 Wir sprechen über <10%.
:
Bearbeitet durch User
Uwe B. schrieb: > Ausfuehrung aus > CCM/ITCM SRAM hat immer 0 Waitstates, Ausfuehrung aus dem SRAM hat auch > meistens 0 Waitstates, bi auf den Fall bei gleichzeitigen DMA Zugriff > auf RAM. Bei Ausführung aus SRAM (>= 0x20000000) muss der Instruktion Fetcher gelegentlich auf Datenzyklen (LDR/STR) warten. Das stört vor allem bei 32 Bit Instruktionen. Bei CCRAM/FLASH kann er gleichzeitig fetchen da dann andere Businterfaces aktiv sind.
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.