STM32 的页擦除顺序为:
检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁
检查 FLASH_SR 寄存器的 BSY 位,以确认没有其他正在进行的闪存操作
设置 FLASH_CR 寄存器的 PER 位为’1’
用 FLASH_AR 寄存器选择要擦除的页
设置 FLASH_CR 寄存器的 STRT 位为’1’
等待 BSY 位变为’0’
读出被擦除的页并做验证
void Up_E2Data(u32 e2address) //更新flash参数数据
{
u8 i=0;
if(Flag_UpdataE2) //接收到新的参数
{
Flag_UpdataE2=0;
if(FLASH->CR&(1<<7)) //解锁
{
FLASH->KEYR=0x45670123;
FLASH->KEYR=0xCDEF89AB;
}
FLASH->CR|=1<<1; //擦除指定页数据,为新的数据作准备
FLASH->AR=e2address;
FLASH->CR|=1<<6;
while(FLASH->SR&(1<<0));
FLASH->CR&=~(1<<1);
FLASH->CR|=1<<0;
while(FLASH->SR&(1<<0));
//写如新的数据
while(i<2) //写如新的数据
{
while(FLASH->SR&(1<<0));
*(volatile u16 *)e2address=Parameter[i];
e2address+=2;
i++;
}
FLASH->CR&=~(1<<0);
FLASH->CR|=1<<7; //加锁,防止误操作
}
}
————————————————
版权声明:本文为CSDN博主「位文杰TOP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36958104/article/details/102497422
|