хочется успеть сохранить данные(пару байт буквально) в момент выключения.
void setting_PWR(void)
{
RCC->APB1ENR|=RCC_APB1ENR_PWREN;
PWR->CR|=PWR_CR_PVDE;
PWR->CR|=PWR_CR_PLS_0| PWR_CR_PLS_1;
NVIC_EnableIRQ (PVD_IRQn);
}
int main()
{
while(1){}
}
void PVD_IRQHandler(void)
{
{ FLASH_Unlock(); //эта вещь
FLASH_ProgramWord(0x08008004,0x122); // рабочая
FLASH_Lock(); //проверил в main
}
}
собственно что не так?
P.S. бегло посмотрел RM0090 скорей всего пропустил чтото. но может кто делал что то подобное))
PVD stm32f4
-
Arthur_1990
- Родился
- Сообщения: 7
- Зарегистрирован: Пт сен 22, 2017 08:16:53
- Реклама
- AlanDrakes
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Пн июл 04, 2016 16:51:22
- Откуда: Россия, Омск
Re: PVD stm32f4
Что именно не работает?
1. Перезаписывать данные поверх старых - нельзя.
2. Вы можете просто не успеть записать слово в память во время пропадания питания.
По тому же даташиту (смотрю на STM32F407) время записи слова - 16...100us. При этом напряжение питания должно быть не ниже 2.1V (крайний нижний порог для записи слова), иначе программирование либо не удастся, либо будет запрещено автоматикой. Судя по Вашему коду, PVD должен сработать когда напряжение опустится до ~2.5V. В этот момент программирование ещё не запрещено, но остаётся очень мало времени.
upd.
Да, перепроверил даташиты снова.
Всё именно так и есть.
Советы:
1. Ставьте конденсаторы по-толще рядом с кристаллом, либо в цепи основного питания. Хотя бы 20-30uF.
2. Напряжение питания -> 3.3V
3. Порог срабатывания PVD -> 3.1V
4. Вообще не писать во Flash память. Это не слишком удачное решение. Поставьте внешнюю батарейку на 3V и храните нужные данные в BackUP SRAM.
1. Перезаписывать данные поверх старых - нельзя.
2. Вы можете просто не успеть записать слово в память во время пропадания питания.
По тому же даташиту (смотрю на STM32F407) время записи слова - 16...100us. При этом напряжение питания должно быть не ниже 2.1V (крайний нижний порог для записи слова), иначе программирование либо не удастся, либо будет запрещено автоматикой. Судя по Вашему коду, PVD должен сработать когда напряжение опустится до ~2.5V. В этот момент программирование ещё не запрещено, но остаётся очень мало времени.
upd.
Да, перепроверил даташиты снова.
Всё именно так и есть.
Советы:
1. Ставьте конденсаторы по-толще рядом с кристаллом, либо в цепи основного питания. Хотя бы 20-30uF.
2. Напряжение питания -> 3.3V
3. Порог срабатывания PVD -> 3.1V
4. Вообще не писать во Flash память. Это не слишком удачное решение. Поставьте внешнюю батарейку на 3V и храните нужные данные в BackUP SRAM.
Re: PVD stm32f4
а setting_PWR() где вызывается?
