Embedded Cortex-M3 STM32F103 core在闪存页擦除期间是否因为FPEC忙且可以';你不能从flash中获取更多的指令吗?

Embedded Cortex-M3 STM32F103 core在闪存页擦除期间是否因为FPEC忙且可以';你不能从flash中获取更多的指令吗?,embedded,cortex-m3,stm32,Embedded,Cortex M3,Stm32,在STM32F103上,擦除闪存页需要20毫秒的时间,在此期间内核会暂停。从ST PM00042闪存编程手册中不清楚,在擦除闪存页时,内核是否总是会暂停,或者只是因为指令流本身在闪存中(在我的项目中),FPEC(闪存接口)很忙,无法获取更多指令而暂停 问这个问题的另一种方式是“从RAM运行我的flash编程代码会避免flash页面擦除暂停吗?” 谢谢,我相信在闪存编程过程中,任何试图访问闪存的操作都会导致CPU停机 因此,您要做的是确保关键代码(可能是中断处理程序、看门狗kicker等)可以在程

在STM32F103上,擦除闪存页需要20毫秒的时间,在此期间内核会暂停。从ST PM00042闪存编程手册中不清楚,在擦除闪存页时,内核是否总是会暂停,或者只是因为指令流本身在闪存中(在我的项目中),FPEC(闪存接口)很忙,无法获取更多指令而暂停

问这个问题的另一种方式是“从RAM运行我的flash编程代码会避免flash页面擦除暂停吗?”


谢谢,

我相信在闪存编程过程中,任何试图访问闪存的操作都会导致CPU停机

因此,您要做的是确保关键代码(可能是中断处理程序、看门狗kicker等)可以在程序操作期间从RAM中运行。上次我使用STM32时(大概是2年前),我就是这么做的

因此,为了清楚起见,请回答您文章末尾的问题:

问这个问题的另一种方式是 “你会运行我的flash编程吗 来自RAM的代码避免闪存页 删除暂停?”

我相信答案是“不”。闪存编程驱动程序位于何处并不重要,重要的是在执行擦除/编程操作时,代码执行了什么操作。如果CPU在操作期间试图访问flash,甚至是读取程序的指令或读取常量表,我相信它会暂停

我知道这就是NXP flash在他们的ARM uCs上的工作原理,但我也想引用STM32的章节。出于某种原因,flash编程手册目前似乎不可用,但我在类似的文档(我相信是PM0068)中找到了以下语言:

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

如果在编程期间启动读/写操作[闪存](BSY位设置),CPU将暂停,直到正在进行的主闪存编程结束


太棒了,谢谢。我目前正在做的是尝试将有问题的代码加载到RAM中,以尝试执行此操作。我会告诉你我的情况。我只是希望PM00042和你引用的PM一样清晰…PM00042已经消失了-试着寻找PM0056或PM0063。您也可以访问ST网站,找到STM32部分并查找“编程手册”文档。