Forum: Mikrocontroller und Digitale Elektronik STM32 low voltage interrupt


von Frank D. (nyler)


Lesenswert?

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ß

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Guggst Du Datasheet  Reference Manual RM0360  Errata Sheet.
Stichwort "Analog Watchdog"

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

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...

von Frank (Gast)


Lesenswert?

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.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

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. :)

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

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.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

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.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

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.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

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
von Jim M. (turboj)


Lesenswert?

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
Noch kein Account? Hier anmelden.