对使用stm32的flash作为数据储存的方式有如下疑问:1.手册中如是描述:
在对 STM32F4xx 的 Flash 执行写入或擦除操作期间,任何读取 Flash 的尝试都会导致总线
阻塞。只有在完成编程操作后,才能正确处理读操作。这意味着,写/擦除操作进行期间不能
从 Flash 中执行代码或数据获取操作。
2.代码中是这么写的
FLASH->CR|=1<<16; //开始擦除
res=STMFLASH_WaitDone(200000);//等待操作结束,最大2s
其中函数在不断查询状态
u8 STMFLASH_WaitDone(u32 time)
{
u8 res;
do
{
res=STMFLASH_GetStatus();
if(res!=1)break;//非忙,无需等待了,直接退出.
delay_us(10);
time--;
}while(time);
if(time==0)res=0xff;//TIMEOUT
return res;
}
3. 那么问题来了
首先,这个例程中应该是在flash中运行代码的
那么在执行过
FLASH->CR|=1<<16; //开始擦除
之后,继续要执行
res=STMFLASH_WaitDone(200000);//等待操作结束,最大2s
那么此时取命令、执行代码,不都是在flash中进行的吗?
那岂不是违反了不能从 Flash 中执行代码或数据获取操作。这个要求?
实在是不懂,请指教!谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果说对某个扇区的操作会影响到整个FLASH的程序运行,那么这个所谓的把FLASH当EEPROM根本不可能实现的啊,而且很多时候都是用bootloader+APP的方式运行,所以说肯定不可能是对所有扇区都有影响的,不然何必分扇区,直接一整片设计不更合理
一周热门 更多>