文章目录
- 概述
- 配置
- 掉电擦写注意
概述
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如下