2019-12-12 18:17发布
wenunit 发表于 2014-4-24 15:51 2.9V....能完成这么多事啊. 我在外部供电到直流14V的时候开始保存,也只能正常保存两个扇区, 还是上电时先擦 ...
tuowai 发表于 2014-4-24 15:33 也想学习下PVD检测掉电,方便分享下程序吗,谢谢!
Llinuxu 发表于 2014-4-24 17:08 void PVD_NVIC(void) { NVIC_InitTypeDef NVIC_InitStructure;
tuowai 发表于 2014-4-26 09:21 谢谢,到时去测试下,一直想着flash频繁写,会影响寿命的问题,这方法要可靠的话,可以减少很多麻烦了 ...
最多设置5个标签!
掉电的时候本来就基本只能写,但是写起来还是很快地~~根本不费时间,所以还是可以写很多的
void PVD_NVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Enable the PVD Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void PVD_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
PWR_PVDLevelConfig(PWR_PVDLevel_2V9); // 设定监控的阀值
PWR_PVDCmd(ENABLE); // 使能PVD
EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD连接到中断线16上
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使能中断模式
//EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//表示电压从低上升到高于阀值时产生中断
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//表示电压从高下降到低于阀值时产生中断
//EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//表示电压上升或下降越过设定阀值时都产生中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线
EXTI_Init(&EXTI_InitStructure); // 初始化exti寄存器
}
上面的是初始化,在用的时候一定不要忘了RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
这些都做好好就可以直接在PVD_IRQHandler() 函数中调用,希望对你有帮助,如果还有不懂的再问我吧~
不是在 PVD_IRQHandler() 中调用,而是在这个函数中干自己想干的事情~
我就是为了延长flash的寿命才这样做的~
想请问下,看了看手册,STM32好象是检测VDD/VDDA,但VDD和VDDA一般都是稳压后的的吧,这样检测到掉电后,还够时间保存数据吗,我的数据会比较多?以前有用过STC的,那时数据量不大,且有专门的引脚检测,用的是检测稳压前的电源,那时数据不多,可以正常保存
一周热门 更多>