
代码如下: volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;/*FLASH擦除完成标志*/ int main(void) { /*解锁FLASH*/ FLASH_Unlock(); /* 清除所有挂起标志位 */ FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); /* 擦除FLASH 页*/ FLASHStatus = FLASH_ErasePage((uint32_t)0x08000000); while(FLASHStatus != FLASH_COMPLETE) ; /* 锁定FLASH */ FLASH_Lock(); while (1); } 程序就一直停在FLASHStatus = FLASH_ErasePage((uint32_t)0x08000000);这条代码上,但是我通过Watch window看0x08000000到0x080007FF都已经擦除,这个空间内都是FF。 还有一个问题,就是芯片重启之后,在0x08000000到0x080007F空间内,又恢复到未擦除状态,里面好像是随机码。 请问这都是什么情况? |
STM32F105 USB HID RCC設定
STM32F103VCT6单片机的复位引脚和地引脚短路
【官方例程】STM32F107以太网官方例程
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
2.你大概是要IAP吧。就是程序既可以运行也可以烧录新固件,那么此时需要参考如下官方的推荐方式:
分配一个IAP代码区和一个用户代码区,每个区都有向量表和代码。其实,每个区都是一个独立的MCU程序,只是功能不一样。
IAP代码区执行的是截获用户的一些特殊操作,然后烧录用户代码;否则执行用户代码。这里面的关键是使用了向量表的重定位功能。
你参考下图吧(参考AN4657):
评分
查看全部评分
你这么做,应带都不是停在FLASHStatus = FLASH_ErasePage((uint32_t)0x08000000);这个函数了
而是直接进入了硬件错误中断中了。
因为编译器编译程序源码后的区域应该都是不可写入的。
具体程序是存储在什么地方,存储了多大的空间。。。这个需要根据编译器配置和程序的大小。。。余下的空间只要不超过片内FLASH的最大存储量应该都是可以擦除的。
评分
查看全部评分
评分
查看全部评分
例如:由0x08000000改为0x08010000。