首页 > 解决方案 > 为什么stm32上的FLASH页没有被清除?

问题描述

我正在对 stm32(l412kb) 进行编程,其中一个函数会清除 FLASH 的一个区域,以供以后覆盖。被清除的闪存区域位于存储的后半部分 - 第 35 页 - 共 6 页。stm32l412kb 有 64 页 2KB 的 flash。

我一直在关注参考手册,第 83 页。

flash 的清除工作了一次,但经过几次尝试后,再也没有,这导致代码更改,所以我现在不确定代码是否正确!当代码工作时,stm IDE 显示内存已重置为 0,但是当代码“失败”时,显示的值是默认的 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 页)中计算出来的。如果对我的错误有任何想法,非常感谢您的贡献。

非常感谢,哈利

标签: c++stm32flash-memory

解决方案


对于 STM32,擦除/清除状态全为“1”。所以 0xFFFF FFFF 值是擦除内存后要观察的正确值。在您提供的参考手册中,请参阅第 85 页顶部的说明

擦除值 0xFFFF FFFF


推荐阅读