Hallo zusammen,
ich verzweifle gerade am PVD (Programmable Voltage Detector) eines
STM32H7, den ich benutzen möchte vor einer Stromunterbrechung ein paar
Bytes an Daten in den Flash zu schreiben. Zum Test wollte ich mich
darauf beschränken einfach einen Pin auf High zu ziehen und mir mit
einem Oszilloskop anzuschauen, wie lange der uC etwa nach der
Abschaltung noch läuft. Die Zeitspanne, in der die Spannung von 2.85 V
auf 1.62 V fällt liegt etwa bei 10 ms.
Konfiguriert ist alles mit CubeMX, was zu folgendem Code führt:
1 | /* Peripheral interrupt init */
|
2 | /* PVD_AVD_IRQn interrupt configuration */
|
3 | HAL_NVIC_SetPriority(PVD_AVD_IRQn, 0, 0);
|
4 | HAL_NVIC_EnableIRQ(PVD_AVD_IRQn);
|
5 |
|
6 | /** PVD Configuration
|
7 | */
|
8 | sConfigPVD.PVDLevel = PWR_PVDLEVEL_7;
|
9 | sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING;
|
10 | HAL_PWR_ConfigPVD(&sConfigPVD);
|
11 | /** Enable the PVD Output
|
12 | */
|
13 | HAL_PWR_EnablePVD(); // PVDE bit setzen
|
Das funktioniert so weit, dass wenn ich einen Software-Trigger per
EXTI->SWIER1 gebe, der Interrupt ausgelöst, und der Pin auf High gezogen
wird. Seitens EXTI und NVIC scheint für mich also alles zu passen. Das
PVDE-bit in PWR_CR1 ist gesetzt, das habe ich auch geprüft, also sollte
der PVD aktiv sein.
Hat jemand eine Idee, wo der Fehler liegen könnte?