OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5513|回复: 13

关于PVD的使用,掉电检测然后flash保存数据的问题

[复制链接]

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
发表于 2021-12-23 16:55:43 | 显示全部楼层 |阅读模式
1金钱
关于PVD的使用,掉电检测然后flash保存数据的问题,程序如下
void PVD_Init(void)
{
   EXTI_InitTypeDef EXTI_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
       
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
   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);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

   PWR_PVDLevelConfig(PWR_PVDLevel_2V9);       
   PWR_PVDCmd(ENABLE);

   EXTI_DeInit();
   EXTI_StructInit(&EXTI_InitStructure);
   EXTI_InitStructure.EXTI_Line = EXTI_Line16;       
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);
       
}

void  PVD_IRQHandler(void)
{
       

   if(PWR_GetFlagStatus(PWR_FLAG_PVDO))       
   {
        //此处是将数据写入flash的程序,保存了三个数据          
   }

   EXTI_ClearITPendingBit(EXTI_Line16);
}
现在遇到的问题是每次断电之后重新上电得到上次保存的数据一定是一次成功,一次失败,一次成功,一次失败。失败的读出来的数据都是65536,成功读出来的数据即保存的数据。

最佳答案

查看完整内容[请看2#楼]

失败的原因我估计是因为你掉电写的时候擦除了,导致时间不够,你应该正常上电就先擦除,掉电了直接写,不要擦除
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-5-26
在线时间
65 小时
发表于 2021-12-23 16:55:44 | 显示全部楼层
失败的原因我估计是因为你掉电写的时候擦除了,导致时间不够,你应该正常上电就先擦除,掉电了直接写,不要擦除
回复

使用道具 举报

6

主题

889

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1468
金钱
1468
注册时间
2020-8-19
在线时间
333 小时
发表于 2021-12-24 09:50:05 | 显示全部楼层
帮顶  
回复

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2020-11-8
在线时间
23 小时
发表于 2021-12-24 11:59:33 | 显示全部楼层
1.加大电容
2.数据量不大的话F1使用备份寄存器保存数据(F4使用备份区域),可能会比flash快一点
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2021-12-24 13:39:22 | 显示全部楼层
电路上啥也不处理做掉电保存是不现实的
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 16:36:58 | 显示全部楼层
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 16:38:03 | 显示全部楼层
lang113114 发表于 2021-12-24 11:59
1.加大电容
2.数据量不大的话F1使用备份寄存器保存数据(F4使用备份区域),可能会比flash快一点

谢谢!
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 16:39:19 | 显示全部楼层
阿侑kevin 发表于 2021-12-24 13:39
电路上啥也不处理做掉电保存是不现实的

有一个大电容,问题已解决 谢谢回复
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 16:44:12 | 显示全部楼层

问题已解决,谢谢回复。问题是在掉电保存时每次的时间都只能执行擦除或者保存一个操作,于是我在使用过后保存数据就执行一次擦除操作。然后掉电的时候再保存。可能函数有问题然后它还是执行了擦除操作,最后我直接只写了一个保存的函数就好了
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 17:39:04 | 显示全部楼层
本帖最后由 苏九思 于 2021-12-24 17:40 编辑
苏九思 发表于 2021-12-24 16:44
问题已解决,谢谢回复。问题是在掉电保存时每次的时间都只能执行擦除或者保存一个操作,于是我在使用过后 ...

                                 
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2021-12-24 17:48:18 | 显示全部楼层
lc0663 发表于 2021-12-23 16:55
失败的原因我估计是因为你掉电写的时候擦除了,导致时间不够,你应该正常上电就先擦除,掉电了直接写,不要 ...

void  PVD_IRQHandler(void)
{

   uint16_t VID[3];

   if(PWR_GetFlagStatus(PWR_FLAG_PVDO))       
   {
         VID[0]=VCV;
         VID[1]=ICC;       
         VID[2]=1;       
         FLASH_Unlock();                                               
   STMFLASH_Write_NoCheck(FLASH_SAVE_ADD,VID,512);//D′èëÕû¸öéèÇø  
         FLASH_Lock();                 
         
   }

   EXTI_ClearITPendingBit(EXTI_Line16);
}

大佬可以帮忙看下这个有什么问题吗?VCV和ICC是在别的.c文件中定义的全局变量是串口接收的,现在遇到的问题是只有进DEBUG运行时看到的值正常保存,直接运行数据一直是DEBUG那个
回复

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2022-6-23
在线时间
15 小时
发表于 2022-8-3 13:59:37 | 显示全部楼层
兄弟 ,解决了吗?能分享一下程序吗?2559054571@qq.com
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
 楼主| 发表于 2022-8-12 16:37:26 | 显示全部楼层
zmzxcc 发表于 2022-8-3 13:59
兄弟 ,解决了吗?能分享一下程序吗?

你的是什么问题?我的问题如上所说是掉电的时候先擦除导致时间不够数据完全保存,你可以在上电的时候先擦除一遍
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2021-1-13
在线时间
6 小时
发表于 2024-1-11 20:35:35 | 显示全部楼层
请问楼主,您用的是多大的电容啊?谢谢,能分享一下程序吗?760547812@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表