新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2018-6-4
- 在线时间
- 3 小时
|
1金钱
想用在PVD掉电中断中将自带的FLASH写入数据,刚开始一直无法写入,后来查出是FLASH之前没有擦除成为,FLASH指定的地址中还不是FF。请各位指点一下为什么?
void PVD_IRQHandler(void)
{
EXTI->PR |=1<<16;//清中断
STMFLASH_Unlock();
FLASH->SR|=1<<2; //清除PGERR位.
FLASH->SR|=1<<4; //清除WRPRT位.
FLASH->SR|=1<<5; //清除WRPRT位.
STMFLASH_Write_NoCheck(FLASH_ENSAVE_ADDR,(u16*)&TEXT_Buffer,sizeof(TEXT_Buffer));
STMFLASH_Lock();
}
int main(void)
{u8 i;u8 datatemp[sizeof(TEXT_Buffer)];
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
PWR_PVD_Init();
STMFLASH_Read(FLASH_ENSAVE_ADDR,(u16*)&datatemp,sizeof(TEXT_Buffer));
FLASH->SR|=1<<2; //清除PGERR位.
FLASH->SR|=1<<4; //清除WRPRT位.
FLASH->SR|=1<<5; //清除WRPRT位.
delay_ms(100);
Uart[0].TXBUF[0] = STMFLASH_ErasePage(FLASH_ENSAVE_ADDR);//擦除这个扇区
while(1)
{
if(TimerTask_1s.flag==1)
{
TimerTask_1s.flag =0;
memcpy(&Uart[0].TXBUF[1],&datatemp[0],sizeof(TEXT_Buffer));
Uart[0].Txdlen = sizeof(TEXT_Buffer) +1;
USART_SEND(1);
}
if(TimerTask_5s.flag==1)
{
TimerTask_5s.flag =0;
STMFLASH_Read(FLASH_ENSAVE_ADDR,(u16*)&datatemp,sizeof(TEXT_Buffer));
}
}
|
|