OpenEdv-开源电子网

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

stm32103C8T6 PVD保存数据不成功?

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-8-28
在线时间
6 小时
发表于 2018-7-7 10:54:40 | 显示全部楼层 |阅读模式
1金钱
我的问题是这样的分两种情况
1.我在用JTAG调试的时候调试着,然后拔掉JTAG,然后关电源。那么以后都能进入PVD_IRQHandler 中断掉电保存了。
2.如果我是先关电源,然后拔掉JTAG,就不能进入PVD_IRQHandler ,保存数据。
贴上代码
[mw_shl_code=applescript,true]void PWR_PVD_Init(void)
{   
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
     
    //RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);//使能PWR和BKP外设时钟

    NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;           //使能PVD所在的外部中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       //子优先级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);                         //初始

        EXTI_ClearITPendingBit(EXTI_Line16);//清中断
    PWR_PVDLevelConfig(PWR_PVDLevel_2V9);//设定监控阀值
    PWR_PVDCmd(ENABLE);//使能PVD     
}


void PVD_IRQHandler(void)
{
    EXTI_ClearITPendingBit(EXTI_Line16);//清中断
    WriteAccountFlash();
        //Sw_Lamp(0,1);
        //NIVC_GenerateReset();
        while(1);
       
}
  
//线擦除
void Init_FlashP(u32 address)
{
  Erase_Flash(address);
}



//保存账目
void WriteAccountFlash(void)
{
    u16 buf[50];
        memcpy(&buf[0],&CreanZoren,4);
        memcpy(&buf[2],&GameRunSt.Address,4);
        STMFLASH_Write(ACCTION_ADDR,buf,50);

}

//读账目
void ReadAccountFlash(void)
{
    u16 buf[50];
        STMFLASH_Read(ACCTION_ADDR,buf,50);
        memcpy(&CreanZoren,                  &buf[0],4);
        memcpy(&GameRunSt.Address,            &buf[2],4);       
        Init_FlashP(ACCTION_ADDR);

}

//开机读数据出来
void CreanZore(void)
{
    //GameRunSt.Address=0;
    ReadAccountFlash();
    if(CreanZoren!=CREANFALG)
    {
        CreanZoren=CREANFALG;
                GameRunSt.Address=36;
                WriteAccountFlash();
        }

}
[/mw_shl_code]

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

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-7-7 17:28:49 | 显示全部楼层
应该是电源有电容,可以储能,jtag不能储能,拔了就没电了吧,你在3.3v gnd上加个大电容试试
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-8-28
在线时间
6 小时
 楼主| 发表于 2018-7-9 09:18:05 | 显示全部楼层
275891381 发表于 2018-7-7 17:28
应该是电源有电容,可以储能,jtag不能储能,拔了就没电了吧,你在3.3v gnd上加个大电容试试

1.我在用JTAG调试的时候调试着,然后拔掉JTAG,然后关电源。那么以后都能进入PVD_IRQHandler 中断掉电保存了
电源加了电源了
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-8-28
在线时间
6 小时
 楼主| 发表于 2018-7-9 09:18:32 | 显示全部楼层
275891381 发表于 2018-7-7 17:28
应该是电源有电容,可以储能,jtag不能储能,拔了就没电了吧,你在3.3v gnd上加个大电容试试

有能保存的情况
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-8-28
在线时间
6 小时
 楼主| 发表于 2018-7-11 11:36:54 | 显示全部楼层
有人吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 19:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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