文章目錄
- 概述
- 配置
- 掉電擦寫注意
概述
STM32 PVD功能具體可以檢測到上電、掉電瞬間,其處理方式有中斷響應及事件響應。掉電設置為上升沿觸發,上電為下降沿觸發
配置
1.開啟PVD中斷并設置其優先級
2.配置響應中斷或事件的閾值電壓
3.配置響應模式
生成工程之后在工程里面進行模式和閾值的配置:
void PVD_config()//掉電監測初始化
{__HAL_RCC_PWR_CLK_ENABLE();HAL_NVIC_SetPriority(PVD_IRQn,0,0);HAL_NVIC_EnableIRQ(PVD_IRQn);PWR_PVDTypeDef sConfigPVD;sConfigPVD.PVDLevel=PWR_PVDLEVEL_7;//level7為2.9V閾值,對于掉電來說閾值越高越快響應sConfigPVD.Mode=PWR_PVD_MODE_IT_RISING ;//模式為掉電時觸發中斷HAL_PWR_ConfigPVD(&sConfigPVD);HAL_PWR_EnablePVD();
}
然后將上面的PVD初始化函數放在主函數初始化里面執行,但是要在執行該函數前先延時一段時間,因為上電瞬間MCU供電電壓還未穩定,如果不延時一段時間會導致誤觸發PVD中斷,因為我們想要的效果是在掉電的時候觸發中斷
最后在stm32f1xx.it.c文件中找到其對應的中斷服務函數,把要實現的功能如擦寫數據放在里面即可:
void HAL_PWR_PVDCallback(void)
{// 在這里處理掉電中斷事件if (__HAL_PWR_GET_FLAG(PWR_FLAG_PVDO) != RESET){// 電壓低于閾值,執行掉電處理}else{// 電壓高于閾值,執行恢復處理}
}
掉電擦寫注意
掉電持續約50ms
FLASH的1頁的擦除時間約為10-20ms,寫一個字節的時間約幾十us
EEPROM如下