STM32/STM8技术论坛
直播中

听风说梦

9年用户 866经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

STM32L476RCT6调用擦除函数HAL_FLASHEx_Erase(),擦除失败的原因有哪些?

MCU型号: STM32L476RCT6
        大家有用过 HAL_FLASHEx_Erase() 这个函数吗? 我根据官方例程写的代码,读写都能成功,但是擦除失败。        调用擦除函数 HAL_FLASHEx_Erase(),返回 0 = 擦除成功,但是擦除后返回去读,却发现并没有真正的被擦掉,不是0xFF。
       下面是我的代码,各位大侠指点一下,非常感谢!

void Erase_MCU_Flash(uint32_t p_number)
{
    uint8_t state;
    uint32_t addr;

    p_number = 96;
    addr = FLASH_BASE + FLASH_PAGE_SIZE * p_number;

    HAL_FLASH_Unlock();
        
    // Clear OPTVERR bit set on virgin samples
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);

    BankNumber = GetBank(addr);                                        // Get the bank
    EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
    EraseInitStruct.Banks       = BankNumber;
    //EraseInitStruct.Banks       = FLASH_BANK_1;
    EraseInitStruct.Page        = p_number;
    EraseInitStruct.NbPages     = 1;        
    //if(HAL_FLASHEx_Erase( EraseInitStruct,  PAGEError) != HAL_OK)                // 这里默认擦除成功
    //{                ;                }
    state =         HAL_FLASHEx_Erase( EraseInitStruct,  PAGEError);    // 测得这里返回0
        
    HAL_FLASH_Lock();
}

是不是擦除过程中,要关闭总中断之类的??如果是的话,要怎么关?


回帖(1)

袁钧质

2024-3-8 14:17:19
刚换开发板试了一下,一样的固件,竟然可以。开发板的MCU型号是:STM32L476RGT6
举报

更多回帖

发帖
×
20
完善资料,
赚取积分