stm32 用PVD实现掉电保存数据遇到奇怪的问题
我打算用PVD实现掉电保存数据,然后就遇到一些奇怪的问题,读写flash是没有问题的。但是就是有些情况会保存不了数据,有些情况保存的了数据。1.在调试的时候把调试JTAG拔掉,然后就可以保存数据了,然后以后都能保存数据2.如果先断电在拔掉JTAG就会保存不了数据,以后都不能保存数据
贴上代码
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();
}
//线擦除
void Init_FlashP(u32 address)
{
Erase_Flash(address);
}
//保存账目
void WriteAccountFlash(void)
{
u16 buf;
memcpy(&buf,&CreanZoren,4);
memcpy(&buf,&GameRunSt.Address,4);
STMFLASH_Write(ACCTION_ADDR,buf,50);
}
//读账目
void ReadAccountFlash(void)
{
u16 buf;
STMFLASH_Read(ACCTION_ADDR,buf,50);
memcpy(&CreanZoren, &buf,4);
memcpy(&GameRunSt.Address, &buf,4);
Init_FlashP(ACCTION_ADDR);
}
//开机读数据出来
void CreanZore(void)
{
ReadAccountFlash();
if(CreanZoren!=CREANFALG)
{
CreanZoren=CREANFALG;
GameRunSt.Address=36;
WriteAccountFlash();
}
}
技术问题有专门的求助和讨论版块,请下次注意 没有人吗 没有人吗? :'(:'(:'(:'(:'(:'( JTAG有给电路板供电吗?? huangyanga 发表于 2018-7-7 15:20
JTAG有给电路板供电吗??
分情况,如果把先把JTAG拔掉就可以,再断电源就可以一直保存了。
如果先关电源再拔JTAG,那就以后一直都不能保存了 :Q:Q:Q:Q:Q:Q:Q:Q 本帖最后由 馒头弟 于 2018-7-17 10:41 编辑
小肥羊dsf 发表于 2018-7-9 09:26
分情况,如果把先把JTAG拔掉就可以,再断电源就可以一直保存了。
如果先关电源再拔JTAG,那就以后一直都 ...
这个问题比较重要。但是,他问你JTAG有对板子供电吗?你还分情况? 建议检查一下JTAG调试的设置参数是不是有问题;还有调试器对板子的供电设置以及电压值跟程序中的设定擦除值是否相同。
页:
[1]