打印
[STM32F0]

STM32F030 擦写FLASH导致程序复位

[复制链接]
2897|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wsl_5631|  楼主 | 2019-7-6 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用stm32f030RC做的项目,准备做OTA,擦写FLASH就好导致系统重启,前面加延时就可以了,真是怪事,请高手指点
                          //delay_ms(100);
                         __disable_irq();
                        IWDG_ReloadCounter();
                        FLASH_Unlock();
                        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);  
                        FLASH_ErasePage(FLASH_APP_ADDS);
                        __enable_irq();

如上,加上delay_ms(100);就可以,否则,就会重启

使用特权

评论回复
沙发
xyz549040622| | 2019-7-7 08:00 | 只看该作者
不怪,说明你不满足flash的时间要求。delay_ms必须要加在__disable_irq();前面吗?前面进行了什么操作呢,你要定位下,重启是发生在哪段代码执行之后呢?

使用特权

评论回复
板凳
xuanhuanzi| | 2019-7-7 18:55 | 只看该作者
可能是前面的操作没有执行完。

使用特权

评论回复
地板
xuanhuanzi| | 2019-7-7 18:55 | 只看该作者
延时后,确保了前面其他内容完成了。

使用特权

评论回复
5
airwill| | 2019-7-7 22:10 | 只看该作者
擦写 flash, 不能在 FLASH 里取指了, 所以你的代码先搬 SRAM 里执行就可以了

使用特权

评论回复
6
wsl_5631|  楼主 | 2019-7-8 08:30 | 只看该作者
xyz549040622 发表于 2019-7-7 08:00
不怪,说明你不满足flash的时间要求。delay_ms必须要加在__disable_irq();前面吗?前面进行了什么操作呢, ...

重启是发生在 执行FLASH_ErasePage(FLASH_APP_ADDS);这句。这段程序之前没有执行过擦或者写FLASH操作,应该不存在您说的FLASH延时要求。

使用特权

评论回复
7
wsl_5631|  楼主 | 2019-7-8 08:31 | 只看该作者
airwill 发表于 2019-7-7 22:10
擦写 flash, 不能在 FLASH 里取指了, 所以你的代码先搬 SRAM 里执行就可以了

如果必须放在SRAM里,为什么加上延时就好了呢

使用特权

评论回复
8
香水城| | 2019-7-8 14:50 | 只看该作者
复位是否跟看门狗的喂狗时机有关?

你的delay函数里是否有喂狗操作?

使用特权

评论回复
9
wsl_5631|  楼主 | 2019-7-8 15:07 | 只看该作者
香水城 发表于 2019-7-8 14:50
复位是否跟看门狗的喂狗时机有关?

你的delay函数里是否有喂狗操作?

delay函数没有喂狗,喂狗是在主程序循环中设置喂狗次数,定时器中断中,如果喂狗次数不为0,喂狗并递减。也怀疑过喂狗的问题。但是我再擦除前加了一次喂狗,看门狗复位时间也改成很长4秒以上,还是不行。我刚刚又试了一下,把狗关掉,程序就死机了。现在要排查的问题是为什么擦写执行不下去,香主有没有好的建议?

使用特权

评论回复
10
xyz549040622| | 2019-7-8 15:49 | 只看该作者
wsl_5631 发表于 2019-7-8 08:30
重启是发生在 执行FLASH_ErasePage(FLASH_APP_ADDS);这句。这段程序之前没有执行过擦或者写FLASH操作, ...

所以我要问你,重启发生在哪个语句的时候,你把延时加在FLASH_ErasePage(FLASH_APP_ADDS)之前是否解决呢?

使用特权

评论回复
11
wsl_5631|  楼主 | 2019-7-8 16:01 | 只看该作者
xyz549040622 发表于 2019-7-8 15:49
所以我要问你,重启发生在哪个语句的时候,你把延时加在FLASH_ErasePage(FLASH_APP_ADDS)之前是否解决呢 ...

可以

使用特权

评论回复
12
wsl_5631|  楼主 | 2019-7-10 09:08 | 只看该作者
沉下去了

使用特权

评论回复
13
晓伍| | 2019-8-6 10:29 | 只看该作者
是不是对时序要求很严格啊

使用特权

评论回复
14
八层楼| | 2019-8-6 10:38 | 只看该作者
那就加上延时呗

使用特权

评论回复
15
观海| | 2019-8-6 11:02 | 只看该作者
一点也不怪  有时候是需要延时的啊

使用特权

评论回复
16
huadong1357| | 2019-9-12 14:43 | 只看该作者
我遇到同样的问题,延时几毫秒就可以了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

335

帖子

2

粉丝