你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f407 FLASH_EraseSector 0-4 sector卡死问题

[复制链接]
yklkadlfk7898 提问时间:2021-6-26 13:24 / 未解决
我代码运行启动是使用的stm32f407内部flash,我烧录完程序运行起来后,代码区占内部sector 0-4扇区。我现在需要在程序运行期间在线升级软件。但是我用FLASH_EraseSector函数擦除0-4扇区时,卡死在FLASH_EraseSector函数里,具体问题在:执行FLASH->CR |= FLASH_CR_STRT;这个语句后就卡死。但是我擦除5-11扇区测试都没有问题。希望大神解惑。
收藏 评论9 发布时间:2021-6-26 13:24

举报

9个回答
Angel_YY_ST 回答时间:2021-6-27 11:14:50
擦除代码需要复制到RAM中再执行把。否则擦除时就擦除到擦除代码本身了。相当于用手机拨打自己的电话,怎么可能打通呢。
奇迹 回答时间:2021-6-28 09:31:27
你如果想要升级自身,需要把程序拷贝到RAM再执行。不然自己擦除自己怎么玩
xmshao 回答时间:2021-6-28 10:13:35
你不能这么操作。要么擦除程序放到RAM进行,要么基于双BANK架构来操作。你不能这么操作。要么擦除程序放到RAM进行,要么基于双BANK架构来操作。
废鱼 回答时间:2021-6-28 11:10:47
楼主,可以直接擦除芯片的,你的操作把你的代码区域擦除了,因此操作后代码会死机的。一般都是由boot程序进行应用程序的更新,应用程序负责下载存储更新代码。
yklkadlfk7898 回答时间:2021-6-28 11:58:14
开机起来后,程序运行不是在ram运行吗?难道程序是在内部flash里运行?
废鱼 回答时间:2021-6-28 13:41:38
yklkadlfk7898 发表于 2021-6-28 11:58
开机起来后,程序运行不是在ram运行吗?难道程序是在内部flash里运行?

代码不是再RAM执行,代码存储在FLASH中,最终还是调用的FLASH中的代码。
yklstudent 回答时间:2021-6-28 15:24:22
你自己想干自己,把自己给阉掉嘛?
yklkadlfk7898 回答时间:2021-7-20 18:09:59
xmshao 发表于 2021-6-28 10:13
你不能这么操作。要么擦除程序放到RAM进行,要么基于双BANK架构来操作。你不能这么操作。要么擦除程序放到R ...

我用的是stm32f407  代码空间将来有好几百K,但是我看ram只有190多K,把代码拷贝到ram空间也不够啊。我只是想程序运行起来后,通过usb hid接收新版本文件数据重新写到flash中,代替FLYMCU方式升级。这样普通用户就可以用手机通过usb更新代码了。
yklkadlfk7898 回答时间:2021-7-20 18:11:14
我用的是stm32f407  软件代码空间将来有好几百K,但是我看ram只有190多K,把代码拷贝到ram空间也不够啊。我只是想程序运行起来后,通过usb hid接收新版本文件数据重新写到flash中,代替FLYMCU方式升级。这样普通用户就可以用手机通过usb更新代码了。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版