OpenEdv-开源电子网

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

STM32F103掉电保存数据问题

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-1-5
在线时间
3 小时
发表于 2018-1-5 10:53:47 | 显示全部楼层 |阅读模式
5金钱
检测电路.png
我使用的STM32F103C8T6芯片,使用PA2管脚检测电压,当断电时检测到低于阈值电压,然后flash存储一个有10个16位数据的数组。上电时这10个数据重新给到这个数组。请大神帮忙调试个程式,谢谢。
我在网上看到操作PVD寄存器的,设置通道16,我这个PA2管脚应该怎么配置?
还是请大神给个完整的程式,自己琢磨。

最佳答案

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

这是我之前发的一个帖子的摘录: 不用ADC检测,只要用库里提供的现成的几个函数就能行。前提是电源的滤波电容要大些,以提供足够的时间来保存数据。我试过,保存十几个数据是不成问题的。 我也试过用ADC来检测电源电压,检测点必须取在电源的主滤波电容后,7805或LM1117_3.3之前,电容要大些,并且要电阻分压。没有这个方法简洁,两者效果一样。上电时只要读出eeprom就行了。 以下是之前发过的一个帖子的摘录: 终于搞定了!根 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2018-1-5 10:53:48 | 显示全部楼层
本帖最后由 rjx007 于 2018-1-5 11:27 编辑

这是我之前发的一个帖子的摘录:
不用ADC检测,只要用库里提供的现成的几个函数就能行。前提是电源的滤波电容要大些,以提供足够的时间来保存数据。我试过,保存十几个数据是不成问题的。
我也试过用ADC来检测电源电压,检测点必须取在电源的主滤波电容后,7805或LM1117_3.3之前,电容要大些,并且要电阻分压。没有这个方法简洁,两者效果一样。上电时只要读出eeprom就行了。
以下是之前发过的一个帖子的摘录:
终于搞定了!根本不用这么复杂,用简单的查询方式就可以了,几条语句就行了,与大家分享:思路非常务实:
1、开PWR时钟-----必须的。
2、使能PVD
3、设置监控电压的阈值,这里设为2.9V.
4、再判断到阈值后,标志位是否置位,如置位,就保存数值到EEPROM.
至于为什么用中断方式失败,原因不清。

int main()
{
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);  //打开PWR时钟
     PWR_PVDCmd(ENABLE);     //使能PVD
     PWR_PVDLevelConfig(PWR_PVDLevel_2V9);   //设置PVD的探测电压阀值为2.9V。可设置范围:2.2-2.9
   
     while(1)
        {
               if(PWR_GetFlagStatus(PWR_FLAG_PVDO)==SET)  //判断WR_FLAG_PVDO的标志位是否置位,即电压是否跌落到2.9V了。
                     {                  
                              AT24CXX_WriteOneByte(0x02,VOLUME_1); //write_eep(0x02,VOLUME_1);       //如若置位了,就保存数据。   
                              delay_ms(4);                 
                     }
        }

}

回复

使用道具 举报

12

主题

330

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2294
金钱
2294
注册时间
2016-5-21
在线时间
954 小时
发表于 2018-1-5 11:18:02 | 显示全部楼层
本帖最后由 xxssl 于 2018-1-5 11:20 编辑

1、单片机需要一个单独的电池供电才行,要不然掉电了,单片机也没有电无法操作flash存储
2、如果没有电池供电,那可以10秒或1分钟存储一次,当重新上电时读取最近一次的存储


回复

使用道具 举报

2

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2018-1-5
在线时间
3 小时
 楼主| 发表于 2018-1-5 14:44:28 | 显示全部楼层
rjx007 发表于 2018-1-5 11:13
这是我之前发的一个帖子的摘录:
不用ADC检测,只要用库里提供的现成的几个函数就能行。前提是电源的滤波 ...

没有EE,需要存到flash中
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2018-1-5 15:26:28 | 显示全部楼层
本帖最后由 rjx007 于 2018-1-5 15:30 编辑

方法是一样的,只要将数据写入flash中就可以的,我也试过。只是写flash要麻烦些,先要擦除整页,再写入数据,可看原子的例程。
回复

使用道具 举报

13

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2015-5-14
在线时间
65 小时
发表于 2018-1-5 15:36:26 | 显示全部楼层
二楼说的对,加一个超级电容用于断电时进行短暂的供电以供MCU保存相关数据。
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2018-1-5 16:37:00 | 显示全部楼层
不用超级电容,容量大就可以了。
回复

使用道具 举报

0

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2017-10-12
在线时间
83 小时
发表于 2018-1-5 19:41:55 | 显示全部楼层
利用3.3V上并大电容延迟断电写Flash的话,有点危险,尤其是3.3V的芯片较多,5V电源一拔掉的话3.3V这部分几乎瞬间就没电了。
回复

使用道具 举报

0

主题

43

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1713
金钱
1713
注册时间
2017-2-22
在线时间
296 小时
发表于 2018-1-6 01:36:23 | 显示全部楼层
cxf0153 发表于 2018-1-5 19:41
利用3.3V上并大电容延迟断电写Flash的话,有点危险,尤其是3.3V的芯片较多,5V电源一拔掉的话3.3V这部分几 ...

实在怕的话可以用法拉电容或直接用纽扣电池呀!关键还是外供电时判定上,因为不仅仅是掉电就马上保存那么简单,还要考虑上电瞬间通断脉冲会产生误保存动作导致数据丢失哩!
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2018-1-6 10:06:22 | 显示全部楼层
如果作为工业产品,那确实要考虑周全,并采取可靠的措施。
回复

使用道具 举报

10

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2018-5-14
在线时间
46 小时
发表于 2018-10-18 19:32:06 | 显示全部楼层
rjx007 发表于 2018-1-5 15:26
方法是一样的,只要将数据写入flash中就可以的,我也试过。只是写flash要麻烦些,先要擦除整页,再写入数据 ...

老哥 能告知下是哪一个例程么
行至水穷处 坐看云起时
回复

使用道具 举报

2

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2018-11-7
在线时间
11 小时
发表于 2018-12-12 17:00:30 | 显示全部楼层
rjx007 发表于 2018-1-5 15:26
方法是一样的,只要将数据写入flash中就可以的,我也试过。只是写flash要麻烦些,先要擦除整页,再写入数据 ...

在吗?这个flash掉电保存看原子哥的哪个例程啊,我反复的看了原子哥的程序,只有flash读写,还需要自己做程序才可以实现掉电保存的,不知道如何下手,能告诉我下吗,
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4031
金钱
4031
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-11-13 00:02:58 | 显示全部楼层
gdqxp 发表于 2018-12-12 17:00
在吗?这个flash掉电保存看原子哥的哪个例程啊,我反复的看了原子哥的程序,只有flash读写,还需要自己做 ...

掉电存储,最好有备份数据,也就是万一掉电存储失败,还可以恢复上次的数据。还有就是,掉电存储,Flash区域一般都是预先擦除的,掉电的时候只管写入。这样大大的减少了操作Flash的时间。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 04:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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