[STM32F0] 擦写FLASH导致程序复位

[复制链接]
 楼主| jlyuan 发表于 2021-8-7 15:14 | 显示全部楼层 |阅读模式
用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);就可以,否则,就会重启
chuxh 发表于 2021-8-7 15:18 | 显示全部楼层
不怪,说明你不满足flash的时间要求。delay_ms必须要加在__disable_irq();前面吗?
llljh 发表于 2021-8-7 15:21 | 显示全部楼层
前面进行了什么操作呢,你要定位下,重启是发生在哪段代码执行之后呢?
dingy 发表于 2021-8-7 15:23 | 显示全部楼层
可能是前面的操作没有执行完。
heweibig 发表于 2021-8-7 15:25 | 显示全部楼层
延时后,确保了前面其他内容完成了。
zhanghqi 发表于 2021-8-7 15:27 | 显示全部楼层
擦写 flash, 不能在 FLASH 里取指了
chuxh 发表于 2021-8-7 15:30 | 显示全部楼层
嗯, 所以你的代码先搬 SRAM 里执行就可以了
 楼主| jlyuan 发表于 2021-8-7 15:32 | 显示全部楼层
重启是发生在 执行FLASH_ErasePage(FLASH_APP_ADDS);这句。这段程序之前没有执行过擦或者写FLASH操作,应该不存在您说的FLASH延时要求。
 楼主| jlyuan 发表于 2021-8-7 15:33 | 显示全部楼层
如果必须放在SRAM里,为什么加上延时就好了呢
chenjunt 发表于 2021-8-7 15:39 | 显示全部楼层
复位是否跟看门狗的喂狗时机有关?
huangchui 发表于 2021-8-7 15:44 | 显示全部楼层
你的delay函数里是否有喂狗操作?
 楼主| jlyuan 发表于 2021-8-7 15:47 | 显示全部楼层
delay函数没有喂狗,喂狗是在主程序循环中设置喂狗次数,定时器中断中,如果喂狗次数不为0,喂狗并递减。
chuxh 发表于 2021-8-7 15:49 | 显示全部楼层
喂狗的问题
 楼主| jlyuan 发表于 2021-8-7 15:51 | 显示全部楼层
我再擦除前加了一次喂狗,看门狗复位时间也改成很长4秒以上,还是不行
 楼主| jlyuan 发表于 2021-8-7 15:53 | 显示全部楼层
我刚刚又试了一下,把狗关掉,程序就死机了。
zhanghqi 发表于 2021-8-7 15:55 | 显示全部楼层
现在要排查的问题是为什么擦写执行不下去
zwll 发表于 2021-8-7 15:57 | 显示全部楼层
所以我要问你,重启发生在哪个语句的时候
llljh 发表于 2021-8-7 16:01 | 显示全部楼层
你把延时加在FLASH_ErasePage(FLASH_APP_ADDS)之前是否解决呢?
 楼主| jlyuan 发表于 2021-8-7 16:04 | 显示全部楼层
可以
dingy 发表于 2021-8-7 16:07 | 显示全部楼层
是不是对时序要求很严格啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部