使用stm32f4片上flash存储数据不能执行代码吗?

2019-07-14 15:24发布

大家好:
   使用STM32f407,希望使用flash的剩余空间来存放数据。希望片上flash可以像片外flash一样任意读写。
   看了参考手册,上面如是描述:
   “在对 STM32F4xx 的 Flash 执行写入或擦除操作期间,任何读取 Flash 的尝试都会导致总线
阻塞。只有在完成编程操作后,才能正确处理读操作。这意味着,写/擦除操作进行期间不能
从 Flash 中执行代码或数据获取操作。”

    我有很大疑惑,
   1.我使用片上flash作为代码存储空间,
   2.stm32执行代码,是需要从flash上取指令,然后分析指令,进行操作
   3.当我执行完擦除/写操作的时候,无论是查询flash状态寄存器,或是执行中断,都是需要从flash读取代码的
   那么按照手册的说法,岂不是不能执行代码???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
7762642422d
2019-07-14 21:04
本帖最后由 moyanming2013 于 2017-8-25 20:50 编辑

你也看到了,是在写/擦除(不是读)期间不能从flash读,执行完写/擦除以及平时代码执行时都是在读flash,所以没问题。

当正在执行写/擦除过程时,尝试对flash的读(比如中断来了CPU想尝试通过NVIC执行ISR时)会被阻塞,此时对代码的读取会阻塞,如果阻塞明显你会感觉到“卡”。除非把代码复制到RAM(编译前配置代码的位置到RAM空间)。但一般不会配置代码从RAM执行,此时代码的执行是在CPU内部,跟RAM无关。
如下图是典型的STM32 MCU系统架构内的flash接口连接图,指令总线直接从flash读取指令,一般不会把指令从flash搬到RAM,再从RAM搬到CPU进而再执行的(多此一举)。

楼主,你每次写内部flash数据量都很大(也就是时间会比较长)吗?如果比较大,比如好几个扇区,或许此时会对中断等产生影响。比如可以尝试在写之前暂时关闭中断。

一周热门 更多>