打印
[STM32F1]

STM32怎么实现断电的时候把数据写入FLASH

[复制链接]
6247|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiashengcheng|  楼主 | 2016-3-15 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟刚转来STM32没多久。,第一次发贴 子,请各位大神赐教,
现在有两个想法:
1。是不是可以用一个ADC去读电源管脚的电压来判断外面电压降低了再写入数据
2。另外还有办法是不是有什么标志位,单片机自己判断电压过低然后跳转把数据写入。。




如果都没办法,你们是怎么保存数据的,外部EEPROM除外,我现在是修改一个数据保存一次,这样听说很容易坏
沙发
dentsgot| | 2016-3-15 20:11 | 只看该作者
那只能加一个电池了,这样外部断电的时候可用慢慢检测电压

使用特权

评论回复
板凳
zhuomuniao110| | 2016-3-16 08:49 | 只看该作者
断电了如何工作?必须有备用电源,然后瞬间实现转换,然后检测是不是主电源掉电了,如果是,然后开始记录数据,最后关机进入休眠状态,等待主电源上电重启。

使用特权

评论回复
地板
E-Kaia| | 2016-3-16 10:05 | 只看该作者
最好通过ADC实时记录电压

使用特权

评论回复
5
airwill| | 2016-3-16 10:18 | 只看该作者
1。是不是可以用一个ADC去读电源管脚的电压来判断外面电压降低了再写入数据
2。另外还有办法是不是有什么标志位,单片机自己判断电压过低然后跳转把数据写入。。

方法1可行, MCU有掉电检测功能, 但2实现困难, 如2楼所言: 必须有备用电源来实现写 FLASH  的供电.
方法1 可以用电源里较大的电容来支持, 方法2 则需要MCU 掉电检测到后需要专门的后备电池了, 所以实现困难.
方法1 为了工作可靠, ADC 得采用连续采样模式, 这比较浪费 ADC 的资源, 可以改用模拟比较器来替代, 给mcu 发掉电信号就可以了

使用特权

评论回复
6
runningwzf| | 2016-3-16 14:47 | 只看该作者
除非你有很大的电容让系统掉电的过程长一点,否则几乎不可能啊
话说Flash的话一般都可以写个几万次,就写几个设置的参数,你担心什么?

使用特权

评论回复
7
useeker| | 2016-3-18 01:30 | 只看该作者
对于1,没有必要用ADC,属于画蛇添足,因为已经有PVD(Programmable Voltage Detector)了,再用ADC监测,这不是画蛇添足是啥?
对于2,PVD产生中断后,开始向FLASH写数据。可根据自己要写入的数据量,配合手册的FLASH写入周期,计算一下自己要选用多大的电容。PVD中断产生后的第一个语句,应考虑关闭无关的外设以节约能量。

使用特权

评论回复
8
戈卫东| | 2016-3-18 06:47 | 只看该作者
电源管脚的电压如果掉落那么MCU就已经掉电路,已经无法保证后面操作能否实现。所以不行。

使用特权

评论回复
9
gmm2015| | 2016-3-18 16:20 | 只看该作者
可以的,STM32有个 可编程电压监测器(PVD),设置好阈值,开启这个中断。这样当电压掉落到这个阈值的时候,就会产生中断。然后在中断函数里面写数据。
当然,你要写在数据不能太多,否则来不及写完,系统已经不工作了。
还有,你要在电源处加个大点的电容,具体要多大你要实际测试。
我有做过一个项目,用的电容是220uF的。数据是写到外部EEPROM中的。具体写几个数据忘记了。

使用特权

评论回复
10
Ryze| | 2016-3-18 19:56 | 只看该作者
这个必须有备用电源来实现的

使用特权

评论回复
11
Varus| | 2016-3-18 20:30 | 只看该作者
MCU不是有电源管理吗,是不是可以检测到电压状况

使用特权

评论回复
12
secretuniverse| | 2016-3-20 08:14 | 只看该作者
断电的时候都没电了,怎么工作呢?

使用特权

评论回复
13
zyj9490| | 2016-3-20 10:22 | 只看该作者
gmm2015 发表于 2016-3-18 16:20
可以的,STM32有个 可编程电压监测器(PVD),设置好阈值,开启这个中断。这样当电压掉落到这个阈值的时候, ...

是的,这个要需要大电容的,板级电容实现也未尝不可,关键是在中断里不能写很多。几十字节应可以的。

使用特权

评论回复
14
zyj9490| | 2016-3-20 10:23 | 只看该作者
secretuniverse 发表于 2016-3-20 08:14
断电的时候都没电了,怎么工作呢?

断电也不是一下子断电,由高电压回落到MCU最低运行电压的过程。

使用特权

评论回复
15
ruthlessafei| | 2019-4-22 11:38 | 只看该作者
runningwzf 发表于 2016-3-16 14:47
除非你有很大的电容让系统掉电的过程长一点,否则几乎不可能啊
话说Flash的话一般都可以写个几万次,就写几 ...

几万次很多吗?10秒写一次。你算算几万次能写多久。Flash是先擦除整页,再写部分的。也就是说你写一个字节。也得把整个页先擦掉。

使用特权

评论回复
16
li880wert| | 2019-4-22 15:22 | 只看该作者
ruthlessafei 发表于 2019-4-22 11:38
几万次很多吗?10秒写一次。你算算几万次能写多久。Flash是先擦除整页,再写部分的。也就是说你写一个字 ...

别事乱写什么,有需要再写,你10秒写一次是为了什么?

使用特权

评论回复
17
kingkits| | 2019-4-22 16:59 | 只看该作者
通常断电是由芯片本身去操作的,这样,在断电之前有足够的时间保存数据,
也可以考虑用电池来维持RAM,保存重要的数据
如果是必须实时检测掉电状态,那就要看你的硬件设计得如何了,其实,做个在线电源会比写入FLASH安全的多

使用特权

评论回复
18
runningwzf| | 2019-4-25 22:45 | 只看该作者
ruthlessafei 发表于 2019-4-22 11:38
几万次很多吗?10秒写一次。你算算几万次能写多久。Flash是先擦除整页,再写部分的。也就是说你写一个字 ...

10秒一次,Flash的话神仙也没辙。你用铁电吧

使用特权

评论回复
19
externally| | 2019-4-26 14:02 | 只看该作者
可以对一块flash区域分块存储,存满之后再一次性擦除,减少擦除次数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

107

帖子

1

粉丝