擦除STM32 Flash Sector正在挂程序

问题描述

我正在使用FreeRtos,并且在其中一项任务中,我使用以下代码擦除闪存扇区

HAL_FLASH_Unlock();
    // Fill EraseInit structure
        static FLASH_EraseInitTypeDef EraseInitStruct;
    EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS; 
    EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
    EraseInitStruct.Sector = sector;
    EraseInitStruct.NbSectors = numOfSectorsToErase;
HAL_FLASHEx_Erase_IT(&EraseInitStruct); 
  
    HAL_FLASH_Lock();

我认为这是擦除该扇区的非阻塞调用,但是,当调用该扇区时,所有其他线程似乎都被抢占了100 ms(在示波器上看到),直到擦除完成。我一定做错了,因为我正在使用擦除的中断版本。它不应该像这样正确地悬挂所有东西吗?

(我确定要擦除程序代码所在的扇区。扇区6)

解决方法

文件清晰:

enter image description here

始终阅读文档,而不是Internet论坛。

,

所以@ Hs2似乎正确。在进一步的研究中,如此处https://www.w3schools.com/js/tryit.asp?filename=tryjs_cookie_username

所述,擦除闪存上的扇区将阻止执行。

说“闪烁阻止代码执行”。

现在这带来了更多的问题,尽管为什么无论哪种方式调用都将阻塞,stm的工程师为什么会在世界上包括扇区擦除的中断版本。其非常误导。似乎没有用例。