OpenEdv-开源电子网

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

关于STM32掉电写Flash的求助

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-3-26
在线时间
22 小时
发表于 2016-6-23 15:30:20 | 显示全部楼层 |阅读模式
//PVD中断函数
void PVD_IRQHandler(void)
{
        EXTI_ClearITPendingBit(EXTI_Line16);
       
        if(PWR_GetFlagStatus(PWR_FLAG_PVDO))
        {
               
                STMFLASH_Write(0X08070000,(u16*)DateNum_Str,3);

                printf("DateNum_Str Saved\r\n");

        }
}
在进行掉电测试的时候发现,总是隔一次成功保存一次,也就是说连续掉电两次,一次能写成功,一次写失败,不知道是哪里的原因。如果把STMFLASH_Write(0X08070000,(u16*)DateNum_Str,3);注释掉,每次掉电都能执行printf("DateNum_Str Saved\r\n");
求助高手给指点一下

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-6-23 16:12:12 | 显示全部楼层

如果这么有规律,
不妨先查下检验程序,
也许活干好了,但验收出错了。


回复 支持 反对

使用道具 举报

22

主题

180

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2015-6-29
在线时间
101 小时
发表于 2016-6-23 17:13:55 | 显示全部楼层
写FLASH对电压有要求,最好能在掉电前把需要写的扇区擦除,以便减少掉电后操作FLASH的时间
我是菜鸟
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-3-26
在线时间
22 小时
 楼主| 发表于 2016-6-24 16:18:52 | 显示全部楼层
xuande 发表于 2016-6-23 16:12
如果这么有规律,
不妨先查下检验程序,
也许活干好了,但验收出错了。

能给具体指点一下吗?
//-----PVD.C------
void EXTI_Configuration(void)
{
        EXTI_InitTypeDef EXTI_InitStructure;
       
        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_NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel=PVD_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
       
        NVIC_Init(&NVIC_InitStructure);
}

void PVD_IRQHandler(void)
{
        EXTI_ClearITPendingBit(EXTI_Line16);
       
         if(PWR_GetFlagStatus(PWR_FLAG_PVDO))
        {
               
                STMFLASH_Write(0X08070000,(u16*)DateNum_Str,3);

                printf("DateNum_Str Saved\r\n");

        }
}
//--------main.c------

        PVD_NVIC_Configuration();
        EXTI_Configuration();
        PWR_PVDLevelConfig(PWR_PVDLevel_2V9);
        PWR_PVDCmd(ENABLE);
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-3-26
在线时间
22 小时
 楼主| 发表于 2016-6-24 16:24:09 | 显示全部楼层
负西弱 发表于 2016-6-23 17:13
写FLASH对电压有要求,最好能在掉电前把需要写的扇区擦除,以便减少掉电后操作FLASH的时间

您的意思是:上电后先擦写要保存数据的扇区,掉电后在PVD中断里只做写操作?STMFLASH_Write这个函数要拆分吗?把擦除和写入分开来操作?是这个意思吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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