找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 766|回复: 7
打印 上一主题 下一主题
收起左侧

单片机意外掉电数据快速保存方法

[复制链接]
跳转到指定楼层
楼主
ID:838763 发表于 2024-7-15 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在项目上遇到需要意外掉电保存20个字节的数据,因为要保存查看这些信息,所以数据保存在外部eeprom里面,但是掉电瞬间系统供电不能长时间维持写入,,方法将要写的数据先保存在单片机内部flash里面,开机的时候在写到外部存贮器,STM32本身具有低电压检测,这样就不需要硬件电路配合就可以简单的实现大量数据意外掉电保存的要求,目前测试良好,提供给大家,看看哪位高人还有什么方法能决绝这样类似问题。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:466250 发表于 2024-7-15 17:17 | 只看该作者
还可以用铁电,写入次数接近无限次,无视掉电
回复

使用道具 举报

板凳
ID:401564 发表于 2024-7-15 18:32 | 只看该作者
蓝蓝小星星 发表于 2024-7-15 17:17
还可以用铁电,写入次数接近无限次,无视掉电

铁电一般是100亿次以上,但并不是无限的,一样的要掉电检测的
回复

使用道具 举报

地板
ID:384109 发表于 2024-7-15 20:07 | 只看该作者
要保存的数据在调电瞬间有更新的话该怎么保存呢
回复

使用道具 举报

5#
ID:466250 发表于 2024-7-16 01:52 | 只看该作者
Y_G_G 发表于 2024-7-15 18:32
铁电一般是100亿次以上,但并不是无限的,一样的要掉电检测的

铁电内部就是用的ram,没有写入等待时间。肯定是无限次,只是厂家保守了。掉电还写入引起出错的问题,这是程序逻辑问题,不是铁电的问题。
回复

使用道具 举报

6#
ID:421260 发表于 2024-7-16 07:46 | 只看该作者
用了N年的掉电数据源保存!
void PVD_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; //中断优先级配置
    EXTI_InitTypeDef EXTI_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

    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);

    EXTI_StructInit(&EXTI_InitStructure);
    EXTI_InitStructure.EXTI_Line = EXTI_Line16;             //PVD连接到中断线16上
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;     //使用中断模式
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //电压低于阀值时产生中断
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;               //使能中断线
    EXTI_Init(&EXTI_InitStructure);                         //初始

    PWR_PVDLevelConfig(PWR_PVDLevel_2V8);//设定监控阀值
    PWR_PVDCmd(ENABLE);//使能PVD
}
/*-------------------------------------------------------------------------------
PVD中断
---------------------------------------------------------------------------------*/
void PVD_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line16) != RESET)
    {
       这里些:代码,需要保持的数据。。。
        EXTI_ClearITPendingBit(EXTI_Line16);//清中断
    }
}
回复

使用道具 举报

7#
ID:230500 发表于 2024-7-16 08:45 | 只看该作者
如果硬件不能更改; 就用铁电吧;几乎接近无限次写入!  其次再考虑一些偏门的方案,比如写入到时钟芯片内
回复

使用道具 举报

8#
ID:838763 发表于 2024-7-16 15:01 | 只看该作者
szqinyi 发表于 2024-7-16 07:46
用了N年的掉电数据源保存!
void PVD_NVIC_Configuration(void)
{

这个程序本身没有任何问题,只是断电系统耗电太大,写入数据较大,就会出问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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