flash擦除之前必须关闭中断的官方资料在哪儿找?

2019-07-21 04:39发布

之前出现过flash存在最后一页上面数据(非程序)丢失的现象,后面查错过程中,在网上看到大家都说在写数据之前擦除一页数据之前需要先关闭所有中断,写完数据再打开中断,查了“STM32 FLASH模拟EEPROM资料”里面《STM32F10xxx闪存编程参考手册》和《STM32中文参考手册_V10》都没有找到官方对于这个操作的合理解释。请哪位大神帮我找一下这个官方的说明啊。不胜感激!DEBUG调试试过,在擦除写的过程中确实还是会响应外部定时器中断,执行完中断服务函数以后还是可以正常回到写flash的那段代码里。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zc123
1楼-- · 2019-07-21 07:54
本帖最后由 zc123 于 2017-12-29 00:10 编辑

参考的是STM32F7x参考手册,当
写/擦除操作进行期间不能从 Flash 中执行代码(闪存编程手册上也有这句话)
中断执行也算执行代码。

seupenn
2楼-- · 2019-07-21 12:37
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 17:20
貌似在哪里看到过,不过不记得了,你慢慢找
seupenn
4楼-- · 2019-07-21 21:57
zc123 发表于 2017-12-27 10:45
参考的是STM32F7x参考手册,当
写/擦除操作进行期间不能从 Flash 中执行代码(闪存编程手册上也有这句话)
...

万分感谢~那怎么关闭所有中断呢?
275891381
5楼-- · 2019-07-22 03:29
seupenn 发表于 2018-3-2 10:46
万分感谢~那怎么关闭所有中断呢?

void INTX_DISABLE(void)//关闭所有中断
{                  
        __ASM volatile("cpsid i");
}
void INTX_ENABLE(void)//开启所有中断
{
        __ASM volatile("cpsie i");                  
}
seupenn
6楼-- · 2019-07-22 07:58
275891381 发表于 2018-3-2 12:18
void INTX_DISABLE(void)//关闭所有中断
{                  
        __ASM volatile("cpsid i");

感谢感谢~

一周热门 更多>