为什么stm32上的FLASH页面没有被清除?
Why are the FLASH pages not being cleared on the stm32?
我正在对 stm32(l412kb) 进行编程,其中一个函数清除了 FLASH 的一个区域,以备以后覆盖。被清除的闪存区域位于存储器的后半部分 - 第 35 页 - 共 6 页。 stm32l412kb有64页2KB flash.
我一直在关注 reference manual,第 83 页。
flash 的清除工作了一次,但在尝试了几次之后,再也没有,这导致代码更改,所以我不确定现在的代码是否正确!当代码工作时,stm IDE 显示内存已重置为 0,但是当代码 'failed' 时显示的值是默认值 0xFFFFFFFF,尽管代码 运行 正常。
密码是:
int clearFlash(uint8_t numberOfPages, uint8_t firstPageNumber){
HAL_FLASH_Unlock();
FLASH->SR &= ~(FLASH_FLAG_PGSERR | FLASH_FLAG_PGAERR |
FLASH_FLAG_WRPERR |FLASH_FLAG_OPERR | FLASH_FLAG_EOP); //Clearing Error Flags
//Looping through clearing enough space. Flash is cleared in 2KB pages.
for (int i = 0; i<numberOfPages; i++){
while(FLASH->SR & FLASH_SR_BSY); //Hold While Busy
while((FLASH->SR & FLASH_SR_PGSERR)); //PGSERR should not be set
FLASH->CR |= FLASH_CR_PER; //Set erase process
FLASH->CR &= ~FLASH_CR_PNB_Msk; //Clear address mask
FLASH->CR |= ((firstPageNumber+i)<<FLASH_CR_PNB_Pos); //place in address
FLASH->CR |= FLASH_CR_STRT; //Start clear
}
HAL_FLASH_Lock();
return 1;
}
变量 firstPageNumber 传递值 35,numberOfPages 是根据文件大小(6 页)计算得出的。如果对我的错误有任何想法,非常感谢您的贡献。
非常感谢,
哈利
对于STM32,erase/clear状态全为'1'。因此 0xFFFF FFFF 的值是擦除内存后观察到的正确值。在您提供的参考手册中,请参阅第 85 页的顶部,其中指出
erase
value 0xFFFF FFFF
我正在对 stm32(l412kb) 进行编程,其中一个函数清除了 FLASH 的一个区域,以备以后覆盖。被清除的闪存区域位于存储器的后半部分 - 第 35 页 - 共 6 页。 stm32l412kb有64页2KB flash.
我一直在关注 reference manual,第 83 页。
flash 的清除工作了一次,但在尝试了几次之后,再也没有,这导致代码更改,所以我不确定现在的代码是否正确!当代码工作时,stm IDE 显示内存已重置为 0,但是当代码 'failed' 时显示的值是默认值 0xFFFFFFFF,尽管代码 运行 正常。
密码是:
int clearFlash(uint8_t numberOfPages, uint8_t firstPageNumber){
HAL_FLASH_Unlock();
FLASH->SR &= ~(FLASH_FLAG_PGSERR | FLASH_FLAG_PGAERR |
FLASH_FLAG_WRPERR |FLASH_FLAG_OPERR | FLASH_FLAG_EOP); //Clearing Error Flags
//Looping through clearing enough space. Flash is cleared in 2KB pages.
for (int i = 0; i<numberOfPages; i++){
while(FLASH->SR & FLASH_SR_BSY); //Hold While Busy
while((FLASH->SR & FLASH_SR_PGSERR)); //PGSERR should not be set
FLASH->CR |= FLASH_CR_PER; //Set erase process
FLASH->CR &= ~FLASH_CR_PNB_Msk; //Clear address mask
FLASH->CR |= ((firstPageNumber+i)<<FLASH_CR_PNB_Pos); //place in address
FLASH->CR |= FLASH_CR_STRT; //Start clear
}
HAL_FLASH_Lock();
return 1;
}
变量 firstPageNumber 传递值 35,numberOfPages 是根据文件大小(6 页)计算得出的。如果对我的错误有任何想法,非常感谢您的贡献。
非常感谢, 哈利
对于STM32,erase/clear状态全为'1'。因此 0xFFFF FFFF 的值是擦除内存后观察到的正确值。在您提供的参考手册中,请参阅第 85 页的顶部,其中指出
erase value 0xFFFF FFFF