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

做stm32L476RG的IAP功能遇到了问题

[复制链接]
jinguang2020 提问时间:2017-9-12 14:04 /
本帖最后由 jinguang2020 于 2017-9-12 14:05 编辑

  问题描述:最近做stm32L476RG的IAP功能,设计思路是初始程序运行在BANK1,用串口接收更新程序,存储在BANK2,再置位选项字节中的BFB2,程序跳转到BANK2运行;如果串口又收到更新程序,则存储在BANK1,清零选项字节中的BFB2,程序跳转到BANK1运行;如此反复。
  但是实际做的过程中遇到了问题,调试了几天都没有进展。实现上述的第一步是成功的,BANK1中的程序收到更新程序存储在BANK2并能够正确运行。BANK2中的程序又收到更新程序,先擦除BANK1也是OK的,但是将新程序写入BANK1时就会产生错误。通过ST-LINK utility能够观察到,新程序存储在BANK2,地址为0x08080000起始,BANK1已经擦除,但是没有写入数据。
  开始使用的是快速写FLASH,即FLASH_TYPEPROGRAM_FAST,出错时错误标志位有PGSERR、PGAERR、PROGERR;又尝试了FLASH_TYPEPROGRAM_DOUBLEWORD,出错时的标志位是PGAERR、PROGERR、OPERR。
  调试过程中还遇到一个很奇怪的问题,当更新程序运行在BANK2时,程序地址空间应该是从0x08080000起始,但是我读一个函数的地址却是0x08002861,属于BANK1的地址空间。
  试了ST给的例程,也存在同样的问题。
  以上是我遇到的一些问题,欢迎大家一起讨论,更欢迎同行的高手和ST的专家指教。在此先谢谢大家!

IAP.png
收藏 评论7 发布时间:2017-9-12 14:04

举报

7个回答
回答时间:2017-9-12 15:47:29
楼主生成少些文件时,工程配置中是否修改了FLASH的其实地址?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jinguang2020 回答时间:2017-9-12 17:21:35
安 发表于 2017-9-12 15:47
楼主生成少些文件时,工程配置中是否修改了FLASH的其实地址?

工程配置中没有修改Flash起始地址,这个会有什么影响呢?
回答时间:2017-9-13 08:39:14
这样的影响就是。写入的代码可能会有问题,他的起始地址是不一样的。楼主可以按照实际应用的地址修改一下FLASH起始地址,然后再测试一下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

dsjsjf 回答时间:2017-9-13 14:47:52
顶楼上的
PaulRambo 回答时间:2018-1-23 15:02:10
楼主,我最近也遇到这个问题。请问您解决了吗?
yu0405jie 回答时间:2018-1-23 16:21:45
在编写程序的时候,需要根据你的FLASH起始地址,更改工程的链接文件,编译器会根据你的链接文件内容规划各函数的地址,在经过链接之后也会将调用的函数名更改为地址。如果在BANK2的函数地址放在了BANK1中,那实际也会执行BANK1中的指令,这样擦除BANK1的内容之后,相关函数指令也会擦除,就影响了BANK1的再次写入。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

PaulRambo 回答时间:2018-1-23 16:30:43
非常感谢yu0405jie,按照你的提醒修改了配置文件,我自己的IAP可以用了。谢谢

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版