例如:由0x08000000改为0x08010000。 FLASH_ErasePage((uint32_t)0x08000000)感觉地址不对劲。 这个有个st的官方的flash编程手册,下载下来好好看看恩。没搞过这个。。。 确认循环对嘛 本帖最后由 ppaaddss 于 2016-9-2 09:31 编辑
你这么做,应带都不是停在FLASHStatus = FLASH_ErasePage((uint32_t)0x08000000);这个函数了
而是直接进入了硬件错误中断中了。
因为编译器编译程序源码后的区域应该都是不可写入的。
具体程序是存储在什么地方,存储了多大的空间。。。这个需要根据编译器配置和程序的大小。。。余下的空间只要不超过片内FLASH的最大存储量应该都是可以擦除的。 1.不可能实现存放代码的flash扇区被自己擦除!擦除时的代码还要运行,擦除了运行哪里呢?!
2.你大概是要IAP吧。就是程序既可以运行也可以烧录新固件,那么此时需要参考如下官方的推荐方式:
分配一个IAP代码区和一个用户代码区,每个区都有向量表和代码。其实,每个区都是一个独立的MCU程序,只是功能不一样。
IAP代码区执行的是截获用户的一些特殊操作,然后烧录用户代码;否则执行用户代码。这里面的关键是使用了向量表的重定位功能。
你参考下图吧(参考AN4657):
0x0800 0000 中断向量表的位置,你删除了,程序的一些中断找不到中断服务程序了,导致异常了吧 回复的很明白了
页:
1
[2]