Всё прекрасно работало.
Хочу слегка упростить. Конечно можно опять же воспользоваться АЦП, только анализировать VDD, но я решил воспользоваться PVD из PWR регистра.
И что-то не работает. Вроде бы как всё правильно инициализирую.
Сначала включаю PWR
Код
// Enable Power Control clock
__PWR_CLK_ENABLE();
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
regarding system frequency refer to product datasheet. */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
__enable_interrupt();
// Разрешить питание RTC и BackUp
PWR->CR |= PWR_CR_DBP;
__PWR_CLK_ENABLE();
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
regarding system frequency refer to product datasheet. */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
__enable_interrupt();
// Разрешить питание RTC и BackUp
PWR->CR |= PWR_CR_DBP;
устанавливаю уровень и запускаю PVD:
Код
// Работа со свалом питания
PWR->CR |= PWR_CR_PLS_LEV7;
PWR->CR |= PWR_CR_PVDE;
PWR->CR |= PWR_CR_PLS_LEV7;
PWR->CR |= PWR_CR_PVDE;
Потом разрешаю прерывания
Код
EXTI->FTSR |= EXTI_FTSR_TR16;
EXTI->IMR |= EXTI_IMR_MR16;
EXTI->PR = EXTI_IMR_MR16;
// Прерывание по свалу питания
HAL_NVIC_SetPriority(PVD_IRQn, 0x6, 0);
HAL_NVIC_EnableIRQ(PVD_IRQn);
EXTI->IMR |= EXTI_IMR_MR16;
EXTI->PR = EXTI_IMR_MR16;
// Прерывание по свалу питания
HAL_NVIC_SetPriority(PVD_IRQn, 0x6, 0);
HAL_NVIC_EnableIRQ(PVD_IRQn);
Но что-то прерываний не вижу, при выключении питания.
Кто-нибудь может прокомментировать?