本帖最后由 wangjianf5 于 2017-11-6 08:34 编辑
问题描述:产品使用STM32F4芯片,外加外部看门狗(数据手册写0.9-2.5秒会工作)。正常程序0.5秒左右清除一下看门狗。由于这次产品中加入了自己编写了Bootloader升级APP的程序,需要擦除几个连续的扇区,每擦除一个扇区就给外部看门狗一个沿信号去清除看门狗。当擦除到128KB扇区的时候,测得擦除大概需要1.15秒时间(手册上写一般擦除128KB时间需要1-2秒)。所以,部分板子在擦除128KB扇区的时候出现外部看门狗复位的情况......
做了个测试:
1-在执行擦除Flash之前,将清除看门狗的程序放在SystemTick(1ms触发)中。结果:前面2个128KB扇区擦除仍然需要1秒钟左右才会去执行SystemTick中的程序,后面的扇区擦除期间,会有SystemTick的清看门狗的信号在执行。
这个测试说明了一个问题,就是和STM32F4手册上写的一样,在Flash擦除期间,任何读取Flash的指令都将会被挂起,直到Flash擦除完成。
奇怪的是为什么前2个扇区擦除的时候会出现这种情况,后面几个扇区没有出现这情况?
有没有哪位朋友遇到过这种类似的问题?后来怎么解决的?
20171102更新
测试将操作擦除Flash和给WatchDog信号的程序存放在RAM中,在运行后,出现如下图那样的情况。期间有两个明显时间很长的信号,第一个是擦除STM32F407 Secotr4(64KB)的时间,第二个是擦除Sector5(128kb)的时间,后面6-10 Secotrs就有信号去清除了。这个现象和之前所有擦除Flash和给Watchdog信号的程序全部放在Flash中的结果一模一样。现在的疑惑是,如果按照STM32手册说明的,第一二个Sector擦除的时候确实总线挂起了,但是为什么在6-10的Sectors擦除的时候却有程序执行的高低信号去清除看门狗了?
|