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
|