你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

手动按键复位可以保存变量, 但是断电马上上电却不能了. 有什么办法可以解决吗?

[复制链接]
vb2002 提问时间:2026-3-2 18:37 / 未解决

我定义了一个变量uint32_t test;

需要上电后+1 , 我已经把test放在keil的noinit里面了, 可以复位自动加1 , 变量不会初始化. 每次手动复位12345678

但是我上到项目里面想执行断电马上上电让test+1, 断电马上上电也不行, 加大电容也不行. 一直是1 1 1 1 1

请问怎么弄能让断电马上上电 变成12345678这样自加?

收藏 评论8 发布时间:2026-3-2 18:37

举报

8个回答
CM_STM32 回答时间:2026-3-2 20:54:13

你这是想干啥,单片机上的RAM本来就是易失性的,断电丢失数据

zhoupxa 回答时间:2026-3-2 23:36:15

带电热复位和断电再上电的冷复位对RAM的影响不同,断电再上电可能被硬件电路执行为冷复位操作

摩洛哥的制砖匠人 回答时间:2026-3-3 08:29:47

可以放到外部的EEPPROM中

老牛洋车 回答时间:2026-3-3 08:34:16

添加一个外部存储芯片如AT24Cxx如何,这样保存的数据不会受断电的影响了。

HyunYong 回答时间:2026-3-3 08:44:47

断电本身就会丢数据 根据芯片情况找个EEPPROM芯片或者看芯片带不带EEPPROM,然后每次默认上电写入一次EEPPROM中存储的变量数据自增一次

一般芯片都是有的

butterflyspring 回答时间:2026-3-3 09:50:00
这样定义的变量是放在RAM中的,断电后,RAM是不能保存数据的。

如果需要保存这个数据,那么它只能放到FLASH 或 外部EEPORM中去。可以参考以下思路尝试:
1. 内部FLASH: 每次上电或检测到复位后,将原来存贮在FLASH中最后一个不为0的记录读出来加1,然后写到下一个地址保存起来,直到整个page 都写满,再下一个PAGE记录并擦除当前page ,或擦除当前PAGE重新循环记录。
注意:在保存时不能断电,也就是上电后不能立刻掉电。同时占用一个page 或两个page 的程序空间。
2。增加外部EEPROM。 注意检测到掉电时,不要再去写EEPROM。

这里计数有个好处,每个单元都会加1,方便判断比较。


fafa1 回答时间:2026-3-3 09:51:36

可以写入flash啊,但是就是要考虑次数

lvgl 回答时间:2026-3-5 09:59:51

RAM掉电会丢失数据,使用eeprom保存这个变量,每次上电读写

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版