在闪存页擦除期间,Cortex-M3 STM32F103内核是否停止,因为FPEC正忙,无法从闪存中获取更多指令?

时间:2010-08-10 02:22:44

标签: embedded cortex-m3 stm32

在STM32F103上,闪存页面的擦除需要20ms,在此期间核心会停滞不前。从ST PM00042闪存编程手册中可以看出,当擦除闪存页时,核心是否总是总是失速,或者它是否因为指令流本身位于闪存(在我的项目中)和FPEC中而停止(闪存接口)忙,无法获取更多指令。

提出这个问题的另一种方法是“从RAM运行我的flash编程代码,避免闪存页面擦除失速?”。

谢谢,

1 个答案:

答案 0 :(得分:7)

我相信在闪存编程期间,任何尝试访问闪存都会使CPU停止运行。

所以你要做的是确保在程序运行期间关键代码(可能是中断处理程序,看门狗踢球者等)可以用完RAM。我最后一次使用STM32(可能大约2年前),这正是我所做的。

所以,要明确一点,在帖子的最后回答问题:

  

提出这个问题的另一种方法是   “会运行我的flash编程   来自RAM的代码避免了闪存页面   擦掉摊位?“。

我相信答案是“不”。闪存编程驱动程序所在的位置并不重要,重要的是您的代码在擦除/编程操作正在进行时 。如果CPU在操作期间尝试访问闪存,甚至读取程序指令或读取常量表,我相信它会停止。

我知道这是NXP闪存在他们的ARM uCs上运行的一个事实,但我想引用章节&对于STM32也是如此。出于某种原因,Flash编程手册目前似乎无法使用,但我在类似的文档中找到了以下语言(PM0068,我相信):

  

只要CPU不访问闪存,正在进行的闪存操作不会阻止CPU。

  

如果在编程期间启动了对闪存的读/写操作(BSY位置1),则CPU将停止工作,直到正在进行的主闪存编程结束。