为什么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